Posted on Leave a comment

Android compilers, AOT, JIT, performance, etc

Android CPU, Compilers, D8 & R8 [ ]

Android app startup time: why we care [ ]

Сжимаем APK, стараясь сохранить его работоспособность [ ]

Increasing performance in an Android application [ ]

How to optimize memory consumption when using Glide [ ]

The internals of Android APK build process — Article
Understanding the flow of the Android APK build process, the execution environment, and code compilation

Going Deep on JetPack Benchmark

Optimize the build speed for your Android project

Инструменты для запуска и разработки Java приложений, компиляция, выполнение на JVM
[] []

Android изнутри: сравнение Dalvik и ART
[] []

Android Runtime — How Dalvik and ART work?

Android Vitals — Разбираем холодный запуск
Android Vitals — Сколько времени?
Android Vitals — Почему запустился мой процесс?

Загрузка и сборка AOSP

«Холодный» запуск Android-приложения

Отрисовка первого кадра Android-приложения

Бесшовные A/B-обновления в Android: как они устроены

Comparison of ProGuard vs. R8: October 2019 edition [ ]

Shrinking Your App with R8

R8 Shrinking in Android

How to break your Android App with proguard / R8

R8 Optimization: Lambda Groups

Что такое Android Lint и как он помогает писать поддерживаемый код [ ]

Support for newer Java language APIs
14.07.2020 []

Everything you need to know about Memory Leaks in Android. [ ]

Android Internals: ART vs DVM deep dive [ ]

Exploring the Android build process: Caching [ ]

Exploring the Android build process: demystifying Gradle flags [ ]

Android Internals 101: How Android OS Starts You Application [ ]

Android Permissions System Vulnerabilities and Possible Workarounds [ ]

Making Android Lint Theme Aware — Part 1 [ ]

Is there a unique Android device ID? [ ]

Top 12 Ways to Reduce Android App Size During App Development Lifecycle [ ]

R8 Optimization: Class Reflection and Forced Inlining [ ]

Feature Flags – How to use [ ]

Фантастические плагины, vol. 1. Теория [ ]

Dealing with Large Memory Requirements on Android [ ]

Speed up your Android Studio [ ]

TimingLogger: An idiomatic Android approach to measuring execution time [ ]

Memory Management
Android Memory Management, Garbage collection, DDMS, How to Improve Memory Usage, How to Avoid Memory Leaks, Android Profiling Tools [ ]

Android third party tools to increase the performance of your app. [ ]

Your Android Application Silently Skips Frames [ ]

The battle for jank*-less UI on Android [ ]

Virtual Machine in Android: Everything you need to know [ ]

Инструменты для запуска и разработки Java приложений, компиляция, выполнение на JVM [ ]

A tool used to obfuscate aab resources [ ]

Is Your Kotlin Code Really Obfuscated?

Как Java 8 поддерживается в Android [ ] [ ]

Facebook proguard r8 [ ]

D8 Library Desugaring [ ]

Shrinking Kotlin Libraries and Applications using Kotlin Reflection with R8
15.07.2020 []

Измерение производительности андроид приложений []
Performance Improvements for Search on The Yelp Android App

Instagram: Improving performance with background data prefetching

Kotlin performance on Android []

Android performance by Google [–ud825]

Зачем инженерам тратить время на перформанс
15.07.2020 []

Android Internals for Rendering a View []

Developer Options in Android [ ]

System App In Android [ ]

Как перестать бояться Proguard и начать жить [ ]

Debugging Proguard configuration issues
18.01.2021 []

ADB-The Most useful tool in Android [ ]

Diving deep into Android Dex bytecode R8 [ ]

How to make Android Studio Lightning Fast? [ ]

Smaller APKs with resource optimization
by Jake Wharton []

Android Vitals – What time is it?

Android Vitals – Rising to the first drawn surface

Android Vitals – Diving into cold start waters

Collecting the Garbage: A brief history of GC over Android versions

Reverse engineering an Android Application

Энергопотребление Android-приложений

Maximizing OkHttp connection reuse

Practical Guide To Solve OutOfMemoryError in Android Application

Android Battery Testing at Microsoft YourPhone

App size reduction at Microsoft SwiftKey

Analyze and improve Android app performance with System Tracing

High refresh rate rendering on Android

R8 changes “protected” methods of abstract class to “public” without -allowaccessmodification flag

R8 does not resolve dependencies from maven. You need to add to gradle.

 metadataSources {    mavenPom()    artifact() } 

VSyncs or Vertical Sync — Never heard of it or did you?

how to force update R8

buildscript {
  repositories {
    maven {url ''}
  dependencies {
    classpath ''
    classpath ''

Android’s Java 9, 10, 11, and 12 Support

Возможности языка Java 8

Use Java 8 language features and APIs

Как работает программа «Hello World!»?

Как работает виртуальная машина Java — взгляд изнутри

Фреймворк Executor в Java

Оптимизируем скорость сборки приложения

Сборка приложения — это извечная тема для споров, докладов и постоянных улучшений. И, как бы смешно это ни было, от неё зависит то, какое количество фич мы можем сделать в определённый отрезок времени.
Некоторые полагаются на стандратные настройки проекта и начинают добавлять улучшения только тогда, когда сборка становится до невозможности долгой.

Но есть советы, которые можно попробовать применить сразу после старта проекта.
Для начала выполните следуюущую команду, чтобы понять текущую скорость сборки:
./gradlew –profile –offline –rerun-tasks assembleDebug

Начнём улучшать:
🔹применим org.gradle.configureondemand=true — флаг включает конфигурацию проектов по запросу, что позволяет собирать только то, что участвует в сборке.

🔹увеличим Java heap при помощи org.gradle.jvmargs=-Xmx1536m, если позволяет ваша оперативная память.

🔹задействуем kapt.use.worker.api=true. Флаг задействует worker API для стадии annotation processing в kapt, а также перемещает выполнение этой стадии отдельно от Kotlin Compile Daemon.

🔹включим параллельную сборку мультимодульных проектов при помощи org.gradle.parallel=true.

🔹если в проекте есть room, то добавим room.incremental = true. Начиная с версии 2.3.0, флаг включен по умолчанию.

🔹добавим Работает флаг так: чтобы gradle мог определить, надо выполнять задачу или нет, ему необходимо проверить, был ли изменён файл с момента последней сборки. Daemon хранит эту информацию в памяти, если задействован данный флаг. Иначе — он собирает её для каждой сборки. Больше деталей можно узнать тут (

🔹можно включить конфигурационный кэш при помощи org.gradle.unsafe.configuration-cache=true.

🔹если у вас есть png в проекте, то можно выключить автоматическое сжатие png-файлов для сборок, отличных от debug, где оно автоматически выключено при помощи crunchPngs false.

🔹посмотрите, чтобы у вас везде в проекте были указаны точные названия версий, избегайте названий в виде 1.+.

Конечно, это далеко не полный список возможных улучшений, но даже эти флаги ускорят сборку вашего проекта. Чуть больше информации о них можно почитать в статье (

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.