У вас закончился пробный период!
Для полного доступа к функционалу, пожалуйста, оплатите премиум подписку
DO
Dolgo.polo Dev | Денис Долгополов
https://t.me/dolgo_polo_dev
Возраст канала
Создан
Язык
Русский
1.63%
Вовлеченность по реакциям средняя за неделю
10.44%
Вовлеченность по просмотрам средняя за неделю

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

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

Сообщения Статистика
Репосты и цитирования
Сети публикаций
Сателлиты
Контакты
История
Топ категорий
Здесь будут отображены главные категории публикаций.
Топ упоминаний
Здесь будут отображены наиболее частые упоминания людей, организаций и мест.
Найдено 29 результатов
63
30
739
🦙 Почему первые 300мс жизни сложнее всего?

Пользователь нажимает на иконку

И тут начинается треш и угар — в ближайшие 300мс случится больше интересного, чем в фильмах Marvel за последние 5 лет


Пошло поехало:

🔵проинициализоровать часть DI

🔵проинициализировать большую часть библиотек в нужном порядке

🔵стянуть и применить фича-флаги, на которых будет работать приложение

🔵собрать начальный стейт для первого экрана в зависимости от десятков параметров (авторизован ли юзер? какой язык выбран?...)

🔵прочитать кучу локальных данных из долгого ПЗУ, чтобы дальше работать с быстрой ОЗУ

🔵установить соединение с бэком (сходить в DNS, пройти этапы коннекта по TCP/TLS)

🔵выбрать CDN для загрузки медиа-контента

🔵проверить, есть ли в кэше информация для отображения

🔵если нет, начать грузить новую с бэка

🔵отрисовать какой-нибудь скелетон UI

🔵запустить префетч и прогрев важных экранов

🔵замерить все предыдущие этапы, отправить информацию о перфе в аналитику


фух, кончили. наконец-то можно вывести "Ваше приложение устарело, пожалуйста, обновите версию"

@dolgo_polo_dev
22.04.2025, 19:41
t.me/dolgo_polo_dev/196
10
3
746
#реклама

Yandex Cloud Postbox

Просто хороший сервис для транзакционных рассылок. Помогает быстро настроить инфраструктуру. Отправляет e-mail по TLS 1.2+. Можно выбрать протокол взаимодействия: SMTP или AWS SES API.

Доставляемость 99,9%. Если вам нужна подробная аналитика, совместим с Yandex Cloud Logging, Monitoring и DataLens.

Первые 2 000 писем в месяц бесплатные. Попробуйте
22.04.2025, 10:00
t.me/dolgo_polo_dev/195
15
2
748
🖥 Будущее офисных компов у меня на столе

Купил себе мини-пк, так как прошлый домашний ноут умер. Пользуюсь полгода, делюсь впечатлениями

Задачи у него такие:

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

✅ красивое — есть аналоги чуть мощнее за ту же цену, но в пластмассовых стремных коробках

✅ тянет без лагов среднего размера проекты в AutoCAD, Matlab, Android Studio, Figma

✅ можно позапускать на средних в 60фпс всякие простенькие игры — Dont Starve Together, Party Animals, Raft, Split Fiction...

✅ подключил к телеку, чтобы организовать на нем домашнюю медиастанцию


Со всеми этими задачами отлично справляется встроенка AMD 680M — не шумит, не греется выше нормы, не фризит

Если вы геймер, то судя по тестам из интернетов можно взять MacMini на M4 за 70-80к и комфортно играть на нем даже в киберпанк


Итого — все мои потребности закрыл на 5️⃣➕. Через пару лет этот оставлю под медиастанцию, а для остального возьму что-нибудь с еще более мощной встроенкой


Думаю, со временем все не_игровые пк перейдут в такой формат. Коробки размером с пылесос больше не имеют смысла, но пока они чуть дешевле


А в идеальном мире домашние компы заменят телефоны, которые с помощью внешнего монитора и type-c будут превращаться в полноценный пк. Надеюсь, лет через 5-10 мы окажемся в этой точке 🌈


Минусы и характеристики моей коробки скину в комменты👇

@dolgo_polo_dev
20.04.2025, 17:42
t.me/dolgo_polo_dev/194
17
4
565
🍏 Эко-френдли код

Почему какое-то приложение жрет батарейку больше остальных?

Потому что там много анимаций, а в бэкграунде запускается майнер? Возможно, но есть более физическое объяснение


💡 Например, сетевые запросы напрямую влияют на расход батареи

Чтобы выполнить запрос к бэку, нужно вывести Wi-Fi-модуль из сна ➡️ подать на него напряжение ➡️ сначала отправить байты в интернет с помощью излучения радиоволн ➡️ повисеть какое-то время в режиме ожидания ответных радиоволн

То же самое с Bluetooth/NFC/динамиками/датчиками — для передачи информации нужно потратить энергию


При этом теоретически важно не только количество передаваемой информации в физический мир, но и частота

Например, энергоэффективнее отправить 10 запросов в бэкенд параллельно, чем последовательно — ведь так мы быстрее позволим Wi-Fi платке вернуться в режим сна


Но в реальном мире такими микрооптимизациями занимается в лучшем случае ОС или драйвер, нам же достаточно описать, откуда и куда перекладывать джейсончики

@dolgo_polo_dev
17.04.2025, 18:02
t.me/dolgo_polo_dev/193
1
4
647
💻Хотите научиться писать эффективные сетевые клиенты для iOS и разобраться в том, какие технологии лучше выбрать для SwiftUI?

📖На открытом вебинаре 22 апреля в 20:00 мск мы подробно разберем архитектуру приложений на SwiftUI и выбор сетевого клиента: что лучше — Alamofire, Moya или нативное решение? Мы также покажем, как интегрировать эти технологии с Combine и async-await.

📊Умение работать с сетевыми клиентами под SwiftUI — ключевой навык для iOS-разработчика.

👉Регистрируйтесь прямо сейчас и получите скидку на большое обучение «iOS Developer. Professional» по промокоду IOSPRO4: https://otus.pw/WYte/?erid=2W5zFJq2sUL 

Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
17.04.2025, 10:01
t.me/dolgo_polo_dev/192
24
21
710
🐦‍⬛️ Как передать секрет между приложениями безопасно

Помните про мужика в середине?

Давайте представим, что нам нужно передать секрет от одного приложения к другому так, чтобы его никто не перехватил


💡 Например, пользователь поставил смешную фотку на аватарку в нашем приложении, и мы хотим по-секрету рассказать об этом всем дружеским приложениям так, чтобы об этом не узнали чужие


⚠️ Какие варианты точно не подходят:

🔵Intent — любое приложение может перехватить Intent, зарегистрировав intent-filter в Manifest

🔵Explicit Intent — это тот же самый Intent, но с явным указанием пакета/класса, которому он отправляется. На устройстве не может быть двух приложений с одинаковым пакетом. Но на устройстве могут быть хакнутые сборки с оригинальным пакетом, сливающие данные, которые пользователь скачал не из Play Market, а с пиратского сайта

🔵deeplink с query-параметрами — любое приложение может перехватить deeplink, зарегистрировав его в Manifest

🔵общий зашифрованный файл — любой алгоритм шифрования и ключи шифрования, зашитые в apk, вычисляются за пару минут. так что сколько не шифруй, все-равно зареверсинжинирят



🗝 Более интересные варианты:

🔵AccountManager и ContentProvider / BroadcastReceiver с protectionLevel = "signature" и KeyStore — позволяют безопасно общаться приложениям с одинаковой подписью

🔵App-links — подходят, если нужно передать какой-то секрет из браузера в мобильное приложение. Благодаря этой технологии домен сайта связан с подписью приложения

🔵Доверенное лицо — это любые сторонние сервисы-посредники, который мы почему-то решили доверять (свой бэкенд, гугл аккаунт и т.д.)

@dolgo_polo_dev
16.04.2025, 19:33
t.me/dolgo_polo_dev/191
35
4
774
Короткий топ технологий


гибкость 👇

🔵низкоуровневая разработка
🔵нативная разработка
🔵кросс-платформа
🔵AI-вайб-кодинг
🔵AI+вайб-кодинг
🔵no-code
🔵шаблоны
🔵нам IT-отдел не нужон, а логотип дочка нарисует

time to market 👆


@dolgo_polo_dev
5.04.2025, 17:42
t.me/dolgo_polo_dev/190
5
3
671
3_VSEVOLOD_H_1.mp4
12–13 апреля проводим Weekend Offer Mobile

Устроиться в Яндекс за выходные — реально. Ищем крутых Android- и iOS-разработчиков с опытом работы от 3 лет, готовых работать в офисном или гибридном режиме в России.

Подавайте заявку до 9 апреля — и всего за 2 дня пройдите все технические собеседования. После сможете пообщаться с нанимающими командами и выбрать ту, которая покажется самой интересной. Если всё сложится хорошо, сразу же пришлём вам офер.

Узнать подробности и зарегистрироваться.

Реклама. ООО "Яндекс". ИНН 7736207543
4.04.2025, 10:00
t.me/dolgo_polo_dev/189
22
20
561
SSL Pinning

Помните про мужика в середине?

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


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

Там все просто — в коде указываем данные сертификата, и начинаем общаться с бэком только если он прислал этот же сертификат при установке соединения

В этой схеме приложение само является центром сертификации, так как само проверяет сертификат



🔵спасаем пользователей, которые отключили проверку сертификатов на устройстве, не понимая, чем рискуют


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


mTLS

Тут идея в том, чтобы передавать сертификат не только с бэка на мобилку, но и с мобилки на бэк

В код мобилки зашивается сертификат, который при установки соединения отправляется на бэк.

Если мобилка не отправила сертификат или отправила неверный — бэк не станет устанавливать соединение


🔵защищаем бэк от DDOS, даем ему возможность игнорировать запросы без сертификата


🔵добавляется еще один шаг при установке соединения -> может негативно сказаться на скорости сетевых запросов (тратим дополнительные миллисекунды)

первая часть поста
29.03.2025, 16:03
t.me/dolgo_polo_dev/187
29.03.2025, 16:03
t.me/dolgo_polo_dev/188
17
19
569
TLS / SSL / SSL Pinning / mTLS на пальцах

Не буду вдаваться в подробности потому что я их не знаю и расскажу то, что достаточно знать мобильному разработчику



Первый запрос к бэку всегда особенный — на нем устанавливается соединение и происходит обмен информацией для шифрования трафика

TLS / SSL — протоколы шифрования
❌ SSL — старый
✅ TLS — новый (самая крутая версия 1.3)

Один из этапов шифрование — передача публичного ключа шифрования вместе с сертификатом

💡 Сертификат — это файлик с уникальным публичным ключем, который владелец домена (например, ya.ru) получает от центра сертификации

💡 Центр сертификации — организация, которая выдает сертификаты доменам и потом проверяет их


Так вот, бэк передает свой сертификат на мобилку. Мобилка идет к центру сертификации и спрашивает:

Точно ли этот сертификат принадлежит этому домену?

Если все ок, то с помощью этого сертификата трафик шифруется

➡️ стороннее лицо (центр сертификации) подтверждает, что мы общаемся напрямую с ya.ru

Это и есть SSL / TLS (если сильно упрощать)

продолжение
29.03.2025, 16:02
t.me/dolgo_polo_dev/186
6
2
658
Если нужно подтянуть разговорный английский для работы, помочь с этим могут в онлайн-школе Authentic Pigeon.

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

Абсолютно кайфую от подхода ребят. Занятия тут это не потогонка, а крутой дружеский разговор.
Студент школы — Иван, QA инженер

Узнать подробнее о занятиях и записаться на бесплатный демо-урок можно в боте.

#реклама
25.03.2025, 10:01
t.me/dolgo_polo_dev/185
26
10
757
🔓 Почему нельзя подключаться к публичным Wi-Fi в Макдональдсе?


С дества слышал, что подключаться к общественным Wi-Fi небезопасно. И это утверждение у меня никогда не билось с фактом "https трафик зашифрован, ведь s — это security" (ну или TLS/SSL)

Если весь трафик зашифрован умными алгоритмами, то какая-разница, через какие радиоволны подключаюсь к бэку? 🤯


Разгадка нашлась простая — проблема в атаке man in the middle (мужик в середине)


Это не какая-то конкретная уязвимость, а весь спрект потенциальных проблем

Имея доступ к роутеру, то есть находясь посередине между приложением и бэком, злоумышленник может попытаться:

🔵подменить DNS -> подменить итоговый IP сайта
🔵понизить соединение с https до http
🔵средиректить на произвольный url
🔵подменить публичный ключ шифрования (сертификат)


Естественно, все не так просто, и на произвольном сайте такое злодей не провернет. Нужно целое стечение обстоятельств, несколько допущенных дыр, чтобы любая из атак стала возможной. Но доступ к Wi-Fi, через который устанавливается соединение, повышает шанс этой атакой воспользоваться, ведь трафик льется через роутер как через прокси


А дальше начинается самое интересное — центры сертификации, разные версии SSL, шифрование трафика через VPN, дополнильные проверки IP браузером — огромный мир борьбы с мужиком в центре


Кстати проблема man in the middle справедлива и для мобильных приложений — существует не так уж много способов безопасно передать информацию между двумя приложеними, не дав кому-то посередине ее перехватить

@dolgo_polo_dev
24.03.2025, 20:31
t.me/dolgo_polo_dev/184
6
2
596
Что сейчас действительно важно для iOS-разработчиков?

SwiftUI уже в продакшене, но есть проблемы: тестирование, миграция, архитектура и интеграция с UIKit.

Разобраться с этими вопросами поможет Podlodka iOS Crew — профильная онлайн-конференция, новый сезон которой посвящен SwiftUI.

31 марта - 4 апреля разработчики из бигтеха и стартапов расскажут:

• Как перестроить мышление с UIKit на SwiftUI (Тёма Пстыго, Авито) 🎨

• Какие секреты скрывает SwiftUI под капотом (Александр Скворцов, Яндекс) 🔧

• Как внедрять SwiftUI в проекты с 7 млн пользователей (Роман Мирзоян, George Labs) 📊

• Какие подводные камни ждут, если минимальный таргет — iOS 14 (Борис Добрецов, Optima Bank) 🏦

Подключайтесь и получайте только применимые знания: https://podlodka.io/ioscrew

А мой промокод dolgo_polo15 дает скидку в 500р🥳

#реклама
23.03.2025, 10:01
t.me/dolgo_polo_dev/183
36
2
707
😄 Очепятка в стандарте

referer — стандартный хэдер для http-запросов

он показывает, откуда пользователь попал на страницу/в приложение

например, referer = google.com ознаечает, что пользователь попал на сайт/в приложение из гугла. полезная штука для аналитики


но забавно другое — слова referer не существует, правильное написание — referrer (с двумя rr)

вариант с опчаткой по ошибке добавили в стандарт в 1995 году, и с тех пор всем браузерам и сетевым клиентам приходится поддерживать оба варианта — с очрепяткой и без


например, Cronet (сетевой клиент от гугла для Android, iOS и не только) тупо вырезает хэдер referer 🧠 из запроса. При этом referrer спокойно дает отправить

@dolgo_polo_dev
22.03.2025, 18:01
t.me/dolgo_polo_dev/182
✂️ trim()

Функция String.trim() вырезает пробелы в начале и в конце строки:

" а " -> "a"

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


Последняя нервная клетка умирает, когда вбиваешь в поиск гитлаба название ветки, а её там нет

И только после микроинсульта понимаешь, что это из-за лишнего пробела в названии " epic/123"


Или ищешь печеньки 🍪 в онлайн-магазине, а " печеньки" там нет, есть только "печеньки"

Или логинишься с помощью логина и пароля, а для аккаунта "терминатор6200 " почему-то логин не найден

@dolgo_polo_dev
20.03.2025, 20:02
t.me/dolgo_polo_dev/181
12
3
776
Какая навигация в Compose лучшая? Может ли AI писать UI за вас? Как проходит переезд на Compose в большой компании?

С 24 по 28 марта на Podlodka Android Crew разберем всё, что накопилось за 3 года продакшн-использования Compose!

🔥 Дебаты по навигации в Compose — два эксперта - Аркадий Иванов (X (ex-Twitter) и Игорь Кареньков (HH ru), два подхода, одна истина. Кто окажется убедительнее, решат зрители!

🤖 Как AI пишет UI за вас — Павел Королев и Алексей Утепов (QazCode) на практике покажут генерацию верстки реального макета в Jetpack Compose.

🏗 Опыт Avito: переезд на Compose — изменения затрагивают дизайн-систему, архитектуру, перфоманс, процессы. Ребята из Авито делятся опытом и советами.

🔍 Публичное собеседование по Compose — реальный кандидат, реальный код, разбор ошибок и живой фидбек.

Главное — всё, что обсудим, можно сразу применять на практике! Билеты тут 👉 https://podlodka.io/droidcrew

А мой промокод dolgo_polo13 дает скидку в 500р🥳

#реклама
20.03.2025, 10:04
t.me/dolgo_polo_dev/180
23
20
593
🐌 Чек-лист замера перфа

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

🐌 Запуск приложения
🔵отдельный вопрос — откуда до куда мерить запуск, тут есть простор для творчества
🔵как минимум надо мерить Application.onCreate() и инициализацию библиотек

🐌 Открытие нового экрана
🔵момент от нажатия пользователем кнопки до отрисовки первого полезного UI-элемента
🔵часто включает в себя сетевой запрос на бэк — довольно рандомная по времени вещь
🔵желательно разбить эту метрику на подэтапы

🐌 Скорость сетевых запросов на бэк
🔵подготовка запроса и обработка респонса
🔵установка соединения (DNS/TCP/TLS)
🔵время отправки/чтения байтов по интернету
🔵время работы бэка (когда запрос уже отправлен, но ответ еще не начал считываться)
🔵загруженность установленных соединений (не пора ли увеличить connectionPool)
🔵процент попадания в кэш
🔵процент успешных запросов к упавшим
🔵размеры запросов

🐌 FPS — количество кадров, которые успевают отрисоваться в секунду
🔵интересны места, где идет просадка FPS

🐌 Видео-контент
🔵скорость отрисовки первого кадра
🔵процент подвисаний
🔵скорость загрузки чанков
🔵все вышеперечисленное для разных форматов и битрейтов

🐌 Картинки
🔵всё, как и для обычных сетевых запросов, но с разбиением по cdn-ам и форматам изображений

Еще что-то забыл?

@dolgo_polo_dev
18.03.2025, 18:34
t.me/dolgo_polo_dev/179
49
7
712
🧬 Стих

Осторожно, кринж 😳

Попросил нейросеть написать стих про Android-разработчика. Она выполнила задание с первого раза:


Fragment-осколки в ViewModel-реке,
LiveData танцует в Lifecycle-ручье.
Jetpack-крылами взлетает за грань,
Где Room хранит секреты, как древний талисман.

Dagger-остротой разрезает тьму,
Coroutines плетут асинхронную мглу.
RecyclerView — его ритмы-маски,
А в Stacktrace — тайный шифр Пизанской башни.

ANR-демоны грызут тишину,
Но Proguard-магия стирает войну.
CI/CD — его алхимия в бойне,
Чтоб APK стал цифровой иконой.

Flutter-соперник? Не страшен мираж —
Compose-канвасом он рисует пейзаж.
API-бездны покоряет в прыжке,
Где Firebase звёзды горят на песне.

Его Git-хроники — вечный полёт,
Где Merge Conflict — лишь тень на восход.
Android-магнат, в его коде — эпоха,
Сквозь NullPointer — к звёздам прорвётся вздох! 🚀

@dolgo_polo_dev
16.03.2025, 19:00
t.me/dolgo_polo_dev/178
18
2
612
#рекомендация

Есть такой канал про пока еще мобильную разработку – Everlasting Loops

В нём можно встретить как популярные вопросы с собеседований, так и неочевидные инсайты, особенности IDE-шного тулинга, контрибьют в Kotlin (ну… как-нибудь), или же просто фан-факты

А также почему ломается Unity, зачем котлину public и чего можно ожидать от лямбды

И сначала думаешь, что вроде бы шаришь, а потом хоп – и вот ты уже гуглишь, что это за guards

Если crossinline уже выучил
14.03.2025, 18:31
t.me/dolgo_polo_dev/177
28
1
633
😮 Топ вещей, которые нужны не всем

Топ #1 — минимально поддерживаемая версия приложения 🥇

Под каким предлогом это затащили вообще во все приложения? 🤯


Например, захожу в условный Вкуссвил раз в пару месяцев. И на кассе хочу пробить скидочную карту клиента, чтобы сэкономить 130 рублей

А вместо QR-кода вижу

"СРОЧНО! срочно! обнови приложение или тебя ждет 10 лет неудач!"

и встаю перед выбором:

🔵застопорить очередь на 10 минут, пока обновляю приложение на несчастном 2G, который еле ловит за толстыми стенами магазина

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


➡️ Кому нужна минимально поддерживаемая версия?

Приложениям, которые часто меняют/дополняют свой основной функционал. Например, к Яндекс.Картам или Телеграмму в этом плане ноль претензий


➡️ Помогает ли автообновление приложений?

Нет, ведь если не открывать приложение какое-то время, оно перестает автообновляться и архивируется


➡️ Компромисс

Если у вашего приложения 1-2 основные функции (например, показать штрихкод!), то не обязательно мучать пользователей принудительными обновлениями. Думаю, лояльность пользователей важнее time to market минорных фичей

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

@dolgo_polo_dev
11.03.2025, 19:03
t.me/dolgo_polo_dev/176
4
5
624
12 марта в 16:00
Онлайн-дискуссия: опыт работы с локальными, публичными и зарубежными мобильными фермами

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

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

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

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

Реклама. АО «Селектел», ИНН 7810962785, ERID: 2Vtzqxdatfx
7.03.2025, 15:04
t.me/dolgo_polo_dev/175
24
15
744
🧬 Запрещенка в хэдерах

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

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


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


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


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

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

сейчас это:

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

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

@dolgo_polo_dev
4.03.2025, 17:17
t.me/dolgo_polo_dev/174
40
20
767
запись докладов

📱 в VK Видео

📱 на YouTube

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

@dolgo_polo_dev
22.02.2025, 21:00
t.me/dolgo_polo_dev/173
🪩 митап

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

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

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

@dolgo_polo_d
ev
14.02.2025, 16:47
t.me/dolgo_polo_dev/172
☁️Оффлайн-встречи мобильных разработчиков уже в эти выходные!

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

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

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

🤖 Android | 📱 Mobile | 🍏 iOS

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

💃Также мы выкладываем интересные технические/полезные видосики в наш YouTube канал и записываем Подкаст! Ждем тебя на встречах!
14.02.2025, 10:01
t.me/dolgo_polo_dev/171
#️⃣ Кто виноват в том, что 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
11.02.2025, 20:01
t.me/dolgo_polo_dev/170
🤌 Опытный специалист

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

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

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

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

@doglo_po
lo_dev
31.01.2025, 20:04
t.me/dolgo_polo_dev/169
🥶 Как сохранить секрет в 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_de
v
30.01.2025, 20:02
t.me/dolgo_polo_dev/167
Результаты поиска ограничены до 100 публикаций.
Некоторые возможности доступны только премиум пользователям.
Необходимо оплатить подписку, чтобы пользоваться этим функционалом.
Фильтр
Тип публикаций
Хронология похожих публикаций:
Сначала новые
Похожие публикации не найдены
Сообщения
Найти похожие аватары
Каналы 0
Высокий
Название
Подписчики
По вашему запросу ничего не подошло