أحدث المنشورات من Dolgo.polo Dev | Денис Долгополов (@dolgo_polo_dev) على Telegram

منشورات Dolgo.polo Dev | Денис Долгополов على Telegram

Dolgo.polo Dev | Денис Долгополов
Разбираемся в мобильной разработке (Android/iOS) и пытаемся выяснить, зачем оно так устроено

Статистика/цены: @dolgo_polo_dev_stats

По вопросам/рекламе: @dolgopolovdenis
2,052 مشترك
43 صورة
91 فيديو
آخر تحديث 11.03.2025 07:44

أحدث المحتوى الذي تم مشاركته بواسطة Dolgo.polo Dev | Денис Долгополов على Telegram

Dolgo.polo Dev | Денис Долгополов

07 Mar, 12:04

651

12 марта в 16:00
Онлайн-дискуссия: опыт работы с локальными, публичными и зарубежными мобильными фермами

Selectel приглашает на встречу, где эксперты по мобильному тестированию и разработке поделятся личным опытом работы c мобильными фермами и обсудят:

- Плюсы и минусы локальных ферм,
- Стоит ли полагаться на зарубежного провайдера,
- Можно ли заменить ферму качественной автоматизацией.

Мероприятие бесплатное. Зарегистрироваться в дискуссии и задать вопрос можно по ссылке: https://slc.tl/7526h

Чтобы не пропустить встречу и узнавать о митапах, воркшопах и бесплатных курсах Selectel, подписывайтесь на @selectel_events

Реклама. АО «Селектел», ИНН 7810962785, ERID: 2Vtzqxdatfx
Dolgo.polo Dev | Денис Долгополов

04 Mar, 14:17

993

🧬 Запрещенка в хэдерах

У каждого http-запроса и ответа есть заголовки (они же headers, они же мапка ключ-значений)

Но есть нюанс, о котором почему-то не написано красными большими буквами во всех гайдах по Retrofit/OkHttp


⚠️ не все символы можно класть в хэдеры (и cookie)


Если на мобилке добавить в хэдер запрещенный символ или бэк пришлет такой символ, то сетевой запрос крашнется, выкинув исключение


Актуальный список разрешенных символов можно найти в коде:

🔵okhttp3.Headers.checkValue()
🔵okhttp3.Headers.checkName()

сейчас это:

🔵для ключей: c in '\u0021'..'\u007e'
🔵для значений: c == '\t' || c in '\u0020'..'\u007e'

Например, в хэдере нельзя передавать знак рубля ₽ или иконки гендеров ♂♀ 🤬

@dolgo_polo_dev
Dolgo.polo Dev | Денис Долгополов

22 Feb, 18:00

1,681

запись докладов

📱 в VK Видео

📱 на YouTube

всем, кто дошел оффлайн и смотрел онлайн, привет 😉

@dolgo_polo_dev
Dolgo.polo Dev | Денис Долгополов

14 Feb, 13:47

2,435

🪩 митап

раз сегодня день рекомендаций, то еще расскажу про митапчик от Ozon, на котором буду выступать в следующую пятницу (21.02.25, вечер, бауманская)

поговорю про подводные камни в проектировании API для SDK, о проблемах ABI и мажорных каскадных релизах 😵

также там будут крутые доклады коллег, слайды с картинками и кейтеринг -> подробности и регистрация

@dolgo_polo_dev
Dolgo.polo Dev | Денис Долгополов

14 Feb, 07:01

2,003

☁️Оффлайн-встречи мобильных разработчиков уже в эти выходные!

😉Привет! На связи Coffee&Code — международное сообщество мобильных разработчиков.

😎Приглашаем вас на бесплатные встречи мобильных разработчиков в формате дружеской беседы. Будем обсуждать разработку, делиться опытом, задавать вопросы и просто приятно проводить время в кругу единомышленников.

🤪Пообщаемся на технические темы, обсудим интересные события из мобильной разработки, разберем вопросы с собеседований и поделимся опытом!

🤖 Android | 📱 Mobile | 🍏 iOS

📍СПИСОК ГОРОДОВ

💃Также мы выкладываем интересные технические/полезные видосики в наш YouTube канал и записываем Подкаст! Ждем тебя на встречах!
Dolgo.polo Dev | Денис Долгополов

11 Feb, 17:01

1,710

#️⃣ Кто виноват в том, что apk весит 300мб?


Чаще всего — нативные библиотеки, то есть c/с++ либы, подключенные к приложению

Обычно их в крыcу транзитивно тянут различные Kotlin/Java SDK

🟣🟣🟣

Особенность NDK либ в том, что они генерируются под 4 архитектуры отдельно (armeabi-v7a, arm64, x86, x86_64). Поэтому в каждом apk по 4 копии одной c/c++ либы. Если либа весит 5 мегабайт, то в apk попадет 20 мегабатайт


Плюс си плюс плюс код довольно жирный, так как тянет вместе с собой кучу стандартного кода, необходимый для его выполнения. Например, если вы напишите 5 строчек c++ кода, то либа все-равно будет весить минимум 500кб

🟣🟣🟣

Нативные либы обычно используют библиотеки по работе с картами, картинками, безопасностью, камерой -> если у вас такое есть, то вероятно в вашем приложении уже есть нативные либы

🟣🟣🟣

Топ-2 виновник размера apk — png картинка для экрана "О приложении" конечно

@dolgo_polo_dev
Dolgo.polo Dev | Денис Долгополов

31 Jan, 17:04

2,400

🤌 Опытный специалист

Тут надо было 1 строчку кода в 100 файлов добавить

Реально надо, так получилось

Как раньше я бы решил эту задачу:
🔵поискал инструмент в студии, позволяющий это сделать
🔵не нашел бы его и загуглил бы "how insert code line in class constructor automatically"
🔵не нашел бы ответа и решил написать свой скриптик, который бы автоматизировал этот процесс
🔵через какое-то время мучений понял бы, что нужен не просто скриптик, а целый парсер, чтобы оно отработало даже в корнер кейсах
🔵пошел бы в GPT AI Capilot Code Generator, чтобы он помог мне в этой борьбе

Но я опытный разработчик. Поэтому скипнул все предыдущие шаги и за 3 минуты перекопировал строчку в 100 файлов вручную

@doglo_polo_dev
Dolgo.polo Dev | Денис Долгополов

30 Jan, 17:02

2,322

🥶 Как сохранить секрет в apk

Очень интересная паста о том, как зашить секретную строку в приложение так, чтобы ее нельзя было вытащить за 1 секунду, используя обычный поиск внутри файлов

Например, вы решили спрятать свой ключ от биткоин-кошелька в apk

Что можно попробовать и что из этого выйдет:

1️⃣
Просто положить строку в val/var/const string или в strings.xml — строка попадет в apk в неизменном виде

2️⃣
Разбить строку на байты и положить в массив byte[] — строка попадет в apk в неизменном виде (случилась оптимизация при компиляции)

new byte[]{'x','y','z'} -> "xyz"


3️⃣
Положить строку в BuildConfig — строка попадет в apk в неизменном виде

4️⃣
Натравить Proguard/R8 на класс со строкой — строка попадет в apk в неизменном виде, proguard меняет только название переменных, но не их значение

5️⃣
Положить зашифрованную строку (например, в base64/sha254...) и декодить ее динамически — вот это уже сработает, за 1 секунду можно будет найти только зашифрованную строку

"eHl6".decodeBase64() -> "xyz"

Но еще за 3 секунды можно будет раздебажить алгоритм шифрования, найдя его в .dex-файлах

6️⃣
Зашить строку в нативный с++ код и обращаться к нему через JNI — строка попадет в apk в неизменном виде


Выводы:

➡️ спрятать секрет в apk — изначально идея, обреченная на провал
➡️ apk — это open source

@dolgo_polo_dev
Dolgo.polo Dev | Денис Долгополов

31 Dec, 21:06

2,627

с новым годом! 🎁
желаю хорошо отдохнуть и потом еще раз хорошо отдохнуть ☕️
Dolgo.polo Dev | Денис Долгополов

30 Dec, 17:36

2,986

❄️ Плюс еще одна фобия

Мне тут скинули историю с пикабу:

Приложение онлайн-аптеки каждую ночь начало выкачивать по 25 ГБ трафика

Причем случай не единичный, в гугл плей много пользователей пожаловались на перерасход трафика


Точных причин происшествия не нашел, есть только мое предположение:

💡 вероятно, решили в фоне выкачивать кэш и в случае падения сетевого запроса ретраить попытку. А поскольку сетевые запросы в фоне менее стабильны, чем современные игры в день релиза, то запрос бесконечно падал, очищал кэш и начинал выкачивать его заново

единственное, это не объясняет, почему приложение, судя по отзывам, отправляет больше трафика, чем загружает 🤔

@dolgo_polo_dev