Как собирается Android-приложение?
Сборка Android-приложения состоит из следующих шагов:
1. Компилирование Java/Kotin-исходников.
Компилятор создает .class-файлы, содержащие java-байткод.
2. Конвертация Java-байткода в Dalvik-байткод.
Для конвертации используется утилита
3. Сборка ресурсов и .dex-файлов в APK.
Этот шаг выполняется утилитой aapt (Android Asset Packaging Tool).
4. Оптимизация и подпись .apk-файла.
Для оптимизации APK используется утилита zipalign. APK является zip-архивом.
Подпись приложения выполняется утилитой apksigner.
До Build Tools v24.0.3 подпись APK выполнялась утилитой
#Build
@android_its
Сборка Android-приложения состоит из следующих шагов:
1. Компилирование Java/Kotin-исходников.
Компилятор создает .class-файлы, содержащие java-байткод.
.java source -> javac compiler -> .class files
.kt source -> kotlinc compiler -> .class files2. Конвертация Java-байткода в Dalvik-байткод.
Для конвертации используется утилита
dx. На вход подаются .class-файлы, скомпилированные на предыдущем шаге, и .jar/.aar-файлы скомпилированных библиотек. dx создает файлы формата .dex, которые содержат Dalvik-байткод..class, .jar, .aar -> dx -> classes.dex3. Сборка ресурсов и .dex-файлов в APK.
Этот шаг выполняется утилитой aapt (Android Asset Packaging Tool).
classes.dex, resource files -> aapt -> .apk file4. Оптимизация и подпись .apk-файла.
Для оптимизации APK используется утилита zipalign. APK является zip-архивом.
zipalign выравнивает файлы в архиве определенным образом, что уменьшает использование RAM, при работе приложения.Подпись приложения выполняется утилитой apksigner.
.apk file -> zipalign -> apksigner -> signed .apk fileДо Build Tools v24.0.3 подпись APK выполнялась утилитой
jarsigner, которая была создана для подписи .jar-файлов, и zipalign применялся к уже подписанному APK..apk file -> jarsigner -> zipalign -> signed .apk file#Build
@android_its
Android Developers
AAPT2 | Android Studio | Android Developers
AAPT2 is a build tool used by Android Studio and Android Gradle Plugin to compile and package app resources, optimizing them into a binary format for the Android platform.
👍8
Опишите структуру APK-файла
APK (Android Package) – это формат файла, который используется для распространения и установки мобильных приложений в операционной системе Android.
APK представляет собой архив, который содержит следующие файлы:
• Папка
•
• Сертификат приложения;
• Файлы с дополнительной метаинформацией.
•
•
•
•
•
•
#Build
APK (Android Package) – это формат файла, который используется для распространения и установки мобильных приложений в операционной системе Android.
APK представляет собой архив, который содержит следующие файлы:
• Папка
META-INF:•
MANIFEST.MF – манифест-файл, который содержит SHA-хэши всех файлов в APK-пакете;• Сертификат приложения;
• Файлы с дополнительной метаинформацией.
•
lib – папка, содержащая скомпилированный код платформенно-зависимых библиотек. lib содержит подкаталоги для соответствующих платформ: armeabi, armeabi-v7a, arm64-v8a, x86, x86_64, mips.•
res – папка, в которой лежат андроид-ресурсы в Binary XML формате.•
assets – папка, содержащая ассеты приложения.•
AndroidManifest.xml – манифест Андроид-приложения. Этот файл хранится в скомпилированном Binary XML формате.•
classes.dex – один или несколько файлов, которые представляют собой код приложения, скомпилированный в Dalvik-байткод.•
resources.arsc – файл, в котором хранится таблица маппинга id ресурсов в соответствующие файлы.#Build
👍8
Как собирается Android-приложение?
Сборка Android-приложения состоит из следующих шагов:
1. Компилирование Java/Kotin-исходников.
Компилятор создает .class-файлы, содержащие java-байткод.
2. Конвертация Java-байткода в Dalvik-байткод.
Для конвертации используется утилита
3. Сборка ресурсов и .dex-файлов в APK.
Этот шаг выполняется утилитой aapt (Android Asset Packaging Tool).
4. Оптимизация и подпись .apk-файла.
Для оптимизации APK используется утилита zipalign. APK является zip-архивом.
Подпись приложения выполняется утилитой apksigner.
До Build Tools v24.0.3 подпись APK выполнялась утилитой
#Build
@android_its
Сборка Android-приложения состоит из следующих шагов:
1. Компилирование Java/Kotin-исходников.
Компилятор создает .class-файлы, содержащие java-байткод.
.java source -> javac compiler -> .class files
.kt source -> kotlinc compiler -> .class files2. Конвертация Java-байткода в Dalvik-байткод.
Для конвертации используется утилита
dx. На вход подаются .class-файлы, скомпилированные на предыдущем шаге, и .jar/.aar-файлы скомпилированных библиотек. dx создает файлы формата .dex, которые содержат Dalvik-байткод..class, .jar, .aar -> dx -> classes.dex3. Сборка ресурсов и .dex-файлов в APK.
Этот шаг выполняется утилитой aapt (Android Asset Packaging Tool).
classes.dex, resource files -> aapt -> .apk file4. Оптимизация и подпись .apk-файла.
Для оптимизации APK используется утилита zipalign. APK является zip-архивом.
zipalign выравнивает файлы в архиве определенным образом, что уменьшает использование RAM, при работе приложения.Подпись приложения выполняется утилитой apksigner.
.apk file -> zipalign -> apksigner -> signed .apk fileДо Build Tools v24.0.3 подпись APK выполнялась утилитой
jarsigner, которая была создана для подписи .jar-файлов, и zipalign применялся к уже подписанному APK..apk file -> jarsigner -> zipalign -> signed .apk file#Build
@android_its
👍5
В чем разница между jar и aar?
JAR – Java Archive. Содержит файлы классов, java-ресурсы, зависимые библиотеки, и другие необходимые для приложения файлы. JAR может использоваться как в Android-приложении, так и в приложении на чистой Java.
AAR – Android Archive. Так же как и JAR является zip-архивом, но может использоваться только в Android-приложении. AAR содержит скомпилированный исходный код в файле
#Build
jar и aar являются расширениями файлов-архивов, которые содержат части программ и используются в качестве библиотек в Android-приложениях.JAR – Java Archive. Содержит файлы классов, java-ресурсы, зависимые библиотеки, и другие необходимые для приложения файлы. JAR может использоваться как в Android-приложении, так и в приложении на чистой Java.
AAR – Android Archive. Так же как и JAR является zip-архивом, но может использоваться только в Android-приложении. AAR содержит скомпилированный исходный код в файле
classes.jar, Android-ресурсы, AndroidManifest, и другие файлы, входящие в состав APK.#Build
👍6
Что такое Proguard?
Proguard – это инструмент обфускации и оптимизации Java-кода. Proguard может использоваться как на чистом Java-, так и на Android-приложении, но в мире Андроида Proguard популярнее по двум причинам.
Во-первых, Proguard удаляет неиспользуемые классы и методы из уже скомпилированного приложения. Это позволяло решать проблему 64К методов до появления MultiDex.
Во-вторых, Java- и Dalvik-байткод легко декомпилировать. Для серверного Java-приложения это не проблема, а вот к байткоду приложения под Android доступ имеет любой пользователь.
Proguard обфусцирует код, что усложняет задачу декомпиляции.
#Build
@android_its
Proguard – это инструмент обфускации и оптимизации Java-кода. Proguard может использоваться как на чистом Java-, так и на Android-приложении, но в мире Андроида Proguard популярнее по двум причинам.
Во-первых, Proguard удаляет неиспользуемые классы и методы из уже скомпилированного приложения. Это позволяло решать проблему 64К методов до появления MultiDex.
Во-вторых, Java- и Dalvik-байткод легко декомпилировать. Для серверного Java-приложения это не проблема, а вот к байткоду приложения под Android доступ имеет любой пользователь.
Proguard обфусцирует код, что усложняет задачу декомпиляции.
#Build
@android_its
👍7
Как Proguard удаляет неиспользуемый код?
Одна из функций Proguard – это удаление неиспользуемого кода программы.
При подключении сторонних библиотек, часто используется только часть предоставляемой функциональности. Классы, которые не используются в приложении, могут быть безопасно удалены, что уменьшает конечный размер приложения.
Proguard запускается после компиляции исходного кода и получения
Proguard строит граф использования классов, методов и полей, начиная от входных точек программы, как показано на картинке.
Входные точки программы задаются в файлах конфигурации правилом
Если класс, метод или поле используется только через Reflection, Proguard пометит этот компонент как неиспользуемый и удалит. Это является частой причиной крэшей
Для сохранения таких компонентов нужно добавить правила
После сборки приложения с Proguard, генерируется файл
#Build
@android_its
Одна из функций Proguard – это удаление неиспользуемого кода программы.
При подключении сторонних библиотек, часто используется только часть предоставляемой функциональности. Классы, которые не используются в приложении, могут быть безопасно удалены, что уменьшает конечный размер приложения.
Proguard запускается после компиляции исходного кода и получения
.class файлов, но до конвертации в dex.Proguard строит граф использования классов, методов и полей, начиная от входных точек программы, как показано на картинке.
Входные точки программы задаются в файлах конфигурации правилом
-keep. Android Gradle Plugin генерирует дефолтный файл c правилами для сохранения базовых компонент и специфичных для андроида классов, таких как View.Если класс, метод или поле используется только через Reflection, Proguard пометит этот компонент как неиспользуемый и удалит. Это является частой причиной крэшей
ClassNotFoundException при использовании Proguard.Для сохранения таких компонентов нужно добавить правила
-keep в файл конфигурации.После сборки приложения с Proguard, генерируется файл
usage.txt, в котором хранится список всех удаленных компонентов.#Build
@android_its
👍6
Как уменьшить APK?
• Подключить к своему приложению Proguard;
• Избавиться от неиспользуемых ресурсов с помощью атрибута
• Избавиться от ресурсов сторонних библиотек, которые не подходят под вашу локаль, с помощью атрибута
• Сконвертировать все картинки в формат webp или VectorDrawable.
Подробнее об этих советах можно почитать в статье.
#Build
• Подключить к своему приложению Proguard;
• Избавиться от неиспользуемых ресурсов с помощью атрибута
shrinkResources;• Избавиться от ресурсов сторонних библиотек, которые не подходят под вашу локаль, с помощью атрибута
resConfigs;• Сконвертировать все картинки в формат webp или VectorDrawable.
Подробнее об этих советах можно почитать в статье.
#Build
👍7🔥1
Ускоряем сборку за счёт миграции с kapt на ksp
#android #build #kapt #ksp #performance
https://habr.com/ru/companies/hh/articles/755952/
#android #build #kapt #ksp #performance
https://habr.com/ru/companies/hh/articles/755952/
Хабр
Ускоряем сборку за счёт миграции с kapt на ksp
Всем привет, меня зовут Катя Гущина, я Android-разработчик hh.ru. Хочу поделиться нашим опытом отказа от kapt в пользу ksp для обработки аннотаций и ускорения скорости сборки в большом проекте. В этой...
👍4🔥1