#R8 #Optimizations
R8 Optimization Part 3: Value Assumption
Jake Wharton не снижает обороты и радует нас новой статьей из серии об оптимизациях R8 с кодом. В последней части раскрывается анализ использования переменных.
Оптимизация которые стоит применять в таких случаях довольно логичны:
👉 удаление неиспользуемых переменных
👉 удаление веток кода в которых условия постоянны
В статье вы найдете подробности того, как такой анализ выполняется новым оптимизатором кода от Google, как можно избавиться от кучи кода из AndroidX если ваш minSdk выше 14 (спойлер R8 имеет возможность задания ограничения на возвращаемые значения методов).
R8 Optimization Part 3: Value Assumption
Jake Wharton не снижает обороты и радует нас новой статьей из серии об оптимизациях R8 с кодом. В последней части раскрывается анализ использования переменных.
Оптимизация которые стоит применять в таких случаях довольно логичны:
👉 удаление неиспользуемых переменных
👉 удаление веток кода в которых условия постоянны
В статье вы найдете подробности того, как такой анализ выполняется новым оптимизатором кода от Google, как можно избавиться от кучи кода из AndroidX если ваш minSdk выше 14 (спойлер R8 имеет возможность задания ограничения на возвращаемые значения методов).
Jake Wharton
R8 Optimization: Value Assumption – Jake Wharton
#AppBundle #Optimizations
Google Santa Tracker — Moving to an Android App Bundle
Кто слышал о приложение Google Santa Tracker? Это приложение, который каждый год позволяет миллионам пользователям следить за передвижением Санты, и чтобы сделать его лучше "Корпорация Добра" обновляет его, уже в 2017 году приложение весело 60 Мб 😢 (универсальное APK), что довольно много и является проблемой чтобы быстро насладиться главным функционалом приложения - трекером.
Чтобы решить эту проблем разработчики решили воспользоваться Android App Bundle (AAB). С помощью этого формата поставки приложения можно организовать динамическую загрузку функционала, который пользователь использует редко или вовсе не используется и не загружать ресурсы графики, строки и нативные библиотеки, которые не нужны на устройстве.
В результате проведенных оптимизаций с помощью AAB удалось сократить размер загружаемого APK при начальной установки до 9.21 MB (85% сокращение).
В статье описывается:
👉 Первые шаги с AAB
👉 Dynamic Delivery
👉 Реализация Feature модулей и как это изменило UI/UX
👉 Результаты оптимизации
Google Santa Tracker — Moving to an Android App Bundle
Кто слышал о приложение Google Santa Tracker? Это приложение, который каждый год позволяет миллионам пользователям следить за передвижением Санты, и чтобы сделать его лучше "Корпорация Добра" обновляет его, уже в 2017 году приложение весело 60 Мб 😢 (универсальное APK), что довольно много и является проблемой чтобы быстро насладиться главным функционалом приложения - трекером.
Чтобы решить эту проблем разработчики решили воспользоваться Android App Bundle (AAB). С помощью этого формата поставки приложения можно организовать динамическую загрузку функционала, который пользователь использует редко или вовсе не используется и не загружать ресурсы графики, строки и нативные библиотеки, которые не нужны на устройстве.
В результате проведенных оптимизаций с помощью AAB удалось сократить размер загружаемого APK при начальной установки до 9.21 MB (85% сокращение).
В статье описывается:
👉 Первые шаги с AAB
👉 Dynamic Delivery
👉 Реализация Feature модулей и как это изменило UI/UX
👉 Результаты оптимизации
Medium
Google Santa Tracker — Moving to an Android App Bundle
This post is the first in the series which explores the improvements made to the Google Santa Tracker Android app for 2018.
#Lite #Architecture #Optimizations
Expanding Access: Engineering Uber Lite
История того как в Uber пришли к тому что им надо разрабатывать Lite версию приложения из-за того что множество устройств, на которых используется приложения - это модели 2015 года и более раненого выпуска
Основные принципы которыми руководствовались разработчики:
👉 Компактный размер
👉 Минимизация расхода трафика и запросов на сервер
👉 Высокая отзывчивость UI (< 300 мс при переходе между экранами)
👉 1 DEX
Какие вопросы пришлось решать:
❓ Поиск компактных библиотек
❓ Выбор архитектуры приложения
❓ ProGuard, ReDex и Android App Bundle
❓ Настройка CI для проверок соблюдения ограничений
Expanding Access: Engineering Uber Lite
История того как в Uber пришли к тому что им надо разрабатывать Lite версию приложения из-за того что множество устройств, на которых используется приложения - это модели 2015 года и более раненого выпуска
Основные принципы которыми руководствовались разработчики:
👉 Компактный размер
👉 Минимизация расхода трафика и запросов на сервер
👉 Высокая отзывчивость UI (< 300 мс при переходе между экранами)
👉 1 DEX
Какие вопросы пришлось решать:
❓ Поиск компактных библиотек
❓ Выбор архитектуры приложения
❓ ProGuard, ReDex и Android App Bundle
❓ Настройка CI для проверок соблюдения ограничений
Uber Blog
Expanding Access: Engineering Uber Lite | Uber Blog
Many people around the world use Android phones based on hardware developed in 2015 and earlier. Uber engineers explain how they developed a lightweight rider app to serve this global audience.
#R8 #Optimizations #String
R8 Optimization: String Constant Operations
Продолжение серии статей от Jake Wharton о оптимизациях в R8. В новой статье рассказывает о оптимизация строковых констант:
👉 Операции со строками
👉 Встраивание
👉 Оценка эффективности оптимизаций
R8 Optimization: String Constant Operations
Продолжение серии статей от Jake Wharton о оптимизациях в R8. В новой статье рассказывает о оптимизация строковых констант:
👉 Операции со строками
👉 Встраивание
👉 Оценка эффективности оптимизаций
Jake Wharton
R8 Optimization: String Constant Operations – Jake Wharton
#JakeWharton #R8 #Optimizations
R8 Optimization: Class Constant Operations
Продолжение серии статей о оптимизация кода, которые реализованы в R8 от Jake Wharton. В новой статье рассказывается о оптимизации констант классов.
Рассмотрим частый пример классов в константах:
Такие константы очень часто используются для логирования. Если рассмотреть после компиляции кода, то
R8 получила такую оптимизацию кода и теперь неважно как вы будете создать
Android Studio 3.4 уже на подходе и R8 становится инструментом по умолчанию для оптимизации кода в ней.
R8 Optimization: Class Constant Operations
Продолжение серии статей о оптимизация кода, которые реализованы в R8 от Jake Wharton. В новой статье рассказывается о оптимизации констант классов.
Рассмотрим частый пример классов в константах:
private static final String TAG = "MyClass";
// or
private static final String TAG =
MyClass.class.getSimpleName();
Такие константы очень часто используются для логирования. Если рассмотреть после компиляции кода, то
MyClass.class.getSimpleName()
всегда будет возвращать одно и тоже значение - "MyClass"
. Фактически в оптимизированном байткоде можно делать подмену выполнения метода на простую строку. Важно понимать что это не работает для случая getClass().getSimpleName()
, т.е. когда класс получается динамически.R8 получила такую оптимизацию кода и теперь неважно как вы будете создать
LOG_TAG
для ваших логов 🎉Android Studio 3.4 уже на подходе и R8 становится инструментом по умолчанию для оптимизации кода в ней.
Jake Wharton
R8 Optimization: Class Constant Operations – Jake Wharton
#R8 #Optimizations #JackWharton
R8 Optimization: Method Outlining
Продолжение серии статей от Jake Wharton об оптимизациях, выполняемых R8.
R8 умеет избавляться от констант, коротких методов, или методов, которые вызываются в одном месте, вставкой этого кода в место вызова. Это называется method inlining.
R8 также умеет избавляться от дублирующегося кода выделением его в новый метод и заменой оригинального кода на новый метод 🔥. Это называется method outlining.
R8 Optimization: Method Outlining
Продолжение серии статей от Jake Wharton об оптимизациях, выполняемых R8.
R8 умеет избавляться от констант, коротких методов, или методов, которые вызываются в одном месте, вставкой этого кода в место вызова. Это называется method inlining.
R8 также умеет избавляться от дублирующегося кода выделением его в новый метод и заменой оригинального кода на новый метод 🔥. Это называется method outlining.
👍1
#Optimizations #AndroidGo #Memory #Yandex
Приложение в памяти на практике: наш опыт оптимизации Яндекс.Лончер
Продолжительность: 21:28 + 6:16 (QA)
В докладе рассматриваются следующие вопросы:
👉 Яндекс.Лончер: особенности приложения и почему необходимо его оптимизировать по потреблению памяти. 👉 Особенности работы на Android Go edition
👉 Как измерять расход памяти приложением? Android Studio Profiler, Memory Analyzer (MAT), dumpsys meminfo
👉 Уменьшение потребления памяти приложением: от простых (отказ от Enum-ов) к сложным (lazy inflate и программное создание View)
👉 Мониторинг расхода памяти: Android Lint, тестирование расхода на устройствах/эмуляторах
Также доклад доступен в виде статьи.
Приложение в памяти на практике: наш опыт оптимизации Яндекс.Лончер
Продолжительность: 21:28 + 6:16 (QA)
В докладе рассматриваются следующие вопросы:
👉 Яндекс.Лончер: особенности приложения и почему необходимо его оптимизировать по потреблению памяти. 👉 Особенности работы на Android Go edition
👉 Как измерять расход памяти приложением? Android Studio Profiler, Memory Analyzer (MAT), dumpsys meminfo
👉 Уменьшение потребления памяти приложением: от простых (отказ от Enum-ов) к сложным (lazy inflate и программное создание View)
👉 Мониторинг расхода памяти: Android Lint, тестирование расхода на устройствах/эмуляторах
Также доклад доступен в виде статьи.
YouTube
Droid Party: Яндекс.Телефон - Запись трансляции
Android-митап с командой Яндекс.Телефона.
Программа:
2:52 – Приложение в памяти на практике: наш опыт оптимизации
30:54 – Секреты API Android-устройств
1:20:21 – Как мы интегрировали голосового помощника Алису в Яндекс.Телефон
1:51:12 – Модификация системных…
Программа:
2:52 – Приложение в памяти на практике: наш опыт оптимизации
30:54 – Секреты API Android-устройств
1:20:21 – Как мы интегрировали голосового помощника Алису в Яндекс.Телефон
1:51:12 – Модификация системных…
👍1
#APK #Optimizations
Сжимаем APK, стараясь сохранить его работоспособность
Размер APK - важный показатель для вашего приложения. Более меньший размер позволяет доставить приложении быстрее, использовать Instant Run. Что стоит сделать чтобы убрать неиспользуемый файлы:
👉 Примените рекомендации от Google
👉 Используйте оптимизаторы/обфускаторы кода - ProGuard/R8
👉 Удаляйте лишние файлы из конечной APK
👉 На используйте библиотеки (зависимости) которые вам не нужны или которые вы используете минимально
👉 Удаляйте зависимости для отладки из релизных сборок. Например, Stetho, LeakCanary и пр.
👉 Удаляйте неиспользуемый ресурсы (Refactor -> Remove unused resources...)
👉 Правильно настраивайте ваш DI
Сжимаем APK, стараясь сохранить его работоспособность
Размер APK - важный показатель для вашего приложения. Более меньший размер позволяет доставить приложении быстрее, использовать Instant Run. Что стоит сделать чтобы убрать неиспользуемый файлы:
👉 Примените рекомендации от Google
👉 Используйте оптимизаторы/обфускаторы кода - ProGuard/R8
👉 Удаляйте лишние файлы из конечной APK
👉 На используйте библиотеки (зависимости) которые вам не нужны или которые вы используете минимально
👉 Удаляйте зависимости для отладки из релизных сборок. Например, Stetho, LeakCanary и пр.
👉 Удаляйте неиспользуемый ресурсы (Refactor -> Remove unused resources...)
👉 Правильно настраивайте ваш DI
Хабр
Сжимаем APK, стараясь сохранить его работоспособность
/ PxHere / PD Оптимизация веса APK — это нетривиальная, но очень актуальная во времена Instant App, задача. Включение proguard избавит вас от ненужного кода, ес...
#Gradle #Optimizations
Советы по оптимизации Gradle в Android проектах. Ревизия 2019 года
Советы по следам Google I/O 2019:
👉В многомодульных проектах предпочитайте Java/Kotlin модули вместо Android модулей. Они собираются быстрее и лучше работает инкрементальная сборка
👉Применяйте только необходимые плагины
👉Избегайте непонятных плагинов
👉Мигрируйте на Kotlin 1.3.30 и включайте инкрементальный kapt
👉Запускайте Android Lint только на App модулях
👉Правильно настраивайте зависимости (
👉Описывайте версии зависимостей в одном месте в проекте
👉Используйте папку
👉Кастомные плагины позволят сократить размер gradle файлов в проекте и ускорить сборку
👉Применяйте последние возможности Gradle API, например Lazy конфигурацию для тасков
👉Используйте Gradle Worker API
👉Создавайте таски кастомных типов
👉Не делайте длительных операций во время фазы конфигурации
👉Измеряйте скорость вашей сборки, чтобы искать узкие места. В этом вам помогут Build Scans, Gradle Profiler, Talaoit
Советы по оптимизации Gradle в Android проектах. Ревизия 2019 года
Советы по следам Google I/O 2019:
👉В многомодульных проектах предпочитайте Java/Kotlin модули вместо Android модулей. Они собираются быстрее и лучше работает инкрементальная сборка
👉Применяйте только необходимые плагины
👉Избегайте непонятных плагинов
👉Мигрируйте на Kotlin 1.3.30 и включайте инкрементальный kapt
👉Запускайте Android Lint только на App модулях
👉Правильно настраивайте зависимости (
api
и implementation
)👉Описывайте версии зависимостей в одном месте в проекте
👉Используйте папку
buildSrc
для описания зависимостей👉Кастомные плагины позволят сократить размер gradle файлов в проекте и ускорить сборку
👉Применяйте последние возможности Gradle API, например Lazy конфигурацию для тасков
👉Используйте Gradle Worker API
👉Создавайте таски кастомных типов
👉Не делайте длительных операций во время фазы конфигурации
👉Измеряйте скорость вашей сборки, чтобы искать узкие места. В этом вам помогут Build Scans, Gradle Profiler, Talaoit
#Resources #Optimizations #JakeWharton
Smaller APKs with resource optimization
В Android Gradle плагине 4.2 появится новая возможность.- оптимизация ресурсов. В статье Jake разбирает основы ее работы и результаты ее применения в популярных приложениях
Smaller APKs with resource optimization
В Android Gradle плагине 4.2 появится новая возможность.- оптимизация ресурсов. В статье Jake разбирает основы ее работы и результаты ее применения в популярных приложениях