TGViewer
Мобильная разработка #1 Мобильная разработка #1 @developer_mobila · 3.81K subscribers
Post #1736 681
🍔 Приложение на диете: Как не заставлять пользователя удалять фото ради вашего кода

Знакомая ситуация: вы сделали простенькое приложение со списком задач, собираете релиз, а маркетплейс показывает размер - 80 МБ. Пользователь, стоя на улице с мобильным интернетом, видит эту цифру и думает: "Да ну его, скачаю потом (никогда)".

Почему приложения «толстеют»?
Новички обожают тащить огромные библиотеки ради одной функции. Подключили гигантский фреймворк ради красивой анимации кнопки? Добавили 15 шрифтов и картинки в формате PNG без сжатия? Поздравляю, у вас ожирение.

Взрослые проекты борются за каждый мегабайт. И главное оружие здесь - Minification & Shrinking (Минификация и удаление неиспользуемого).

🛠 Как худеют приложения:

🤖 Android (R8 / ProGuard):
В файле build.gradle у сеньоров всегда написано:

buildTypes {
release {
minifyEnabled true // Включает обфускацию и удаление мертвого кода
shrinkResources true // Удаляет неиспользуемые картинки и XML
}
}

Что это делает?

1. Shrinking: R8 анализирует ваш код. Если вы импортировали огромную библиотеку, но используете из нее один метод - R8 просто вырежет остальные 99% библиотеки из финального APK.

2. Obfuscation (Обфускация): R8 переименовывает ваши красивые классы NetworkUserRepository в a.b.c. Это не только уменьшает вес файла, но и усложняет жизнь хакерам (Reverse Engineering).

💥 Обряд посвящения:
Каждый разработчик хоть раз в жизни ловил краш на Релизе, потому что R8 переименовал классы для работы с сетью (JSON модели), и парсер сошел с ума. Решение: аннотация @Keep над data-классами.

🍏 iOS (App Thinning & Dead Code Stripping):
Apple делает много магии под капотом:

1. Dead Code Stripping: Компилятор LLVM автоматически вырезает функции и классы, которые нигде не вызываются (включается в Build Settings).

2. App Slicing: Когда пользователь скачивает приложение, App Store отдает ему не весь ваш бинарник со всеми картинками мира, а только те ресурсы, которые нужны для его конкретного устройства (например, только картинки @3x для iPhone 15 Pro, вырезая старые @2x). Главное - хранить всё в Assets.xcassets.

💡 Золотое правило:
Прогоняйте все растровые картинки через сервисы сжатия (TinyPNG), а лучше - переходите на вектор (SVG / PDF / ImageVectors). Вектор весит килобайты и идеально скейлится на любые экраны.

#appsize #optimization #proguard #r8 #android #ios #middle #performance

👉 @developer_mobila
  • 👍 2
  • ❤ 1
More from @developer_mobila
  1. Sep 14, 2026Как разрабатывать приложения для iPhone на iPad Звучит как противоречие: iPad стал вполне…
  2. Aug 24, 2026🧪 Как заставить XCUITest работать с интерфейсом глубиной более 100 уровней Инженеры Циана…
  3. Jul 25, 2026🚀 Подборка полезных IT каналов в Max Системное администрирование, DevOps 📌 https://max.r…
  4. Jul 8, 2026🕵️‍♂️ «Я спрятал ключ в константу»: Как Джуны дарят доступы хакерам Вы интегрировали крут…
  5. Jun 25, 2026👾 Androguard: Швейцарский нож для реверс-инжиниринга Android Если вы занимаетесь пентесто…
  6. Jun 22, 2026Живой космос на Metal: как я переписывал фон мобильной игры и поднимал FPS с 20 до 120 В м…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →