Подготовка сборки к выпуску
Пакеты приложения и уменьшение размера
«Подготовка сборки к выпуску» — бесплатный урок Android Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Android Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Android Academy содержит 4 уроков всего.
От отладки к выпуску
Каждый день Вы запускаете отладочную сборку из Android Studio. Но Google Play нужна выпускная сборка: меньшая по размеру, более быстрая и не помеченная как предназначенная для отладки.
Выпускная сборка отличается по трём основным параметрам: она подписана ключом выпуска, в ней указано debuggable false, и обычно она оптимизирована по размеру за счёт удаления неиспользуемого кода и ресурсов.
В этом уроке Вы подготовите правильную выпускную сборку и создадите файл, который нужен Google Play: Android App Bundle (.aab).
Типы сборок в Gradle
По умолчанию Gradle определяет два типа сборок: debug и release. Вы настраиваете их в файле модуля build.gradle.kts.
Блок release предназначен для включения оптимизаций. Обратите внимание на параметры isMinifyEnabled и isShrinkResources ниже — именно они уменьшают размер приложения.
android {
buildTypes {
release {
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
}AAB и APK
Google Play требует Android App Bundle (.aab), а не обычный .apk.
- .apk содержит код и ресурсы для каждого устройства: все плотности экрана, архитектуры CPU и языки.
- .aab загружается в Play, после чего Play создаёт небольшой оптимизированный APK для конкретного устройства каждого пользователя.
В результате пользователи скачивают меньше данных, а приложение занимает меньше места после установки. APK по-прежнему используется для непосредственного тестирования на телефоне, но публиковать нужно AAB.
Что такое R8 и уменьшение размера?
Когда установлено значение isMinifyEnabled = true, Android Studio запускает R8. R8 выполняет три задачи за один проход:
- Уменьшение размера — удаляет классы и методы, которые приложение никогда не вызывает.
- Обфускация — переименовывает классы и методы в короткие имена, например
a,b,c, чтобы сэкономить место и затруднить обратную разработку. - Оптимизация — встраивает и переписывает код для более быстрого выполнения.
Уменьшение ресурсов (isShrinkResources = true) дополнительно удаляет неиспользуемые изображения, макеты и строки.
Правила сохранения для ProGuard
R8 иногда удаляет или переименовывает код, на который ссылаются только через отражение (например, Gson, Retrofit или механизм сериализации). Защитить такой код можно с помощью правил сохранения в файле proguard-rules.pro.
Правило сохранения сообщает R8: «не переименовывай и не удаляй эти классы».
# proguard-rules.pro
# Keep data classes used with Gson reflection
-keep class com.example.app.model.** { *; }
# Keep Retrofit interface methods
-keepattributes Signature
-keepattributes *Annotation*
# Keep Kotlin metadata used by libraries
-keep class kotlin.Metadata { *; }Версионирование приложения
Для каждого выпуска в build.gradle.kts необходимы два значения версии:
versionCode— целое число, которое должно увеличиваться при каждой загрузке. Play использует его, чтобы определить, какая сборка новее.versionName— понятная пользователю строка, например"1.4.0", отображаемая для пользователей.
Если забыть увеличить versionCode, Play отклонит загрузку как дубликат.
android {
defaultConfig {
applicationId = "com.example.app"
minSdk = 24
targetSdk = 35
versionCode = 12
versionName = "1.4.0"
}
}Сборка пакета в Android Studio
Чтобы создать подписанный пакет выпуска через интерфейс:
- Откройте Build → Generate Signed Bundle / APK.
- Выберите Android App Bundle.
- Выберите или создайте хранилище ключей и ключ.
- Выберите вариант сборки release.
Android Studio запускает R8, подписывает пакет и помещает .aab в app/release/. Именно этот единственный файл вы загружаете в Play.
Сборка из командной строки
Для CI/CD или сценариев собирайте пакет непосредственно с помощью Gradle. Имя задачи соответствует шаблону bundle<Variant>.
bundleRelease создаёт AAB. Файл помещается в app/build/outputs/bundle/release/.
# Build a release App Bundle (.aab)
./gradlew bundleRelease
# Output:
# app/build/outputs/bundle/release/app-release.aab
# Build a release APK instead (for direct install/testing)
./gradlew assembleReleaseПроверка и тестирование AAB
Нельзя напрямую установить .aab на телефон. Чтобы протестировать именно те APK, которые создал бы Play, используйте bundletool от Google.
Этот инструмент создаёт из вашего пакета APK для конкретного устройства и устанавливает их на подключённое устройство — это наиболее близкий вариант к настоящей загрузке из Play.
# Generate APKs from the bundle for the connected device
java -jar bundletool.jar build-apks \
--bundle=app-release.aab \
--output=app.apks \
--connected-device
# Install them on the device
java -jar bundletool.jar install-apks --apks=app.apksУдаление отладочного кода из выпуска
В сборке выпуска не следует записывать в журнал конфиденциальные данные или оставлять включёнными функции, предназначенные только для отладки. Используйте BuildConfig.DEBUG, чтобы выбирать поведение. Значение true оно имеет только в отладочных сборках.
R8 может даже удалить блоки, выполнение которых защищено константой false, поэтому это также уменьшает размер приложения.
fun setupLogging() {
if (BuildConfig.DEBUG) {
// Verbose logging only in debug builds
Log.d("App", "Debug logging enabled")
Timber.plant(Timber.DebugTree())
} else {
// Release: send to crash reporting only, no console spam
Timber.plant(CrashReportingTree())
}
}Контрольный список готовности к выпуску
Перед сборкой итогового пакета убедитесь, что:
versionCodeувеличен, аversionNameобновлён.- Для выпуска включены
isMinifyEnabledиisShrinkResources. - Для всех библиотек, использующих отражение, добавлены правила сохранения.
targetSdkсоответствует текущему требованию Play.- В коде выпуска нет отладочного журналирования или конечных точек для тестирования.
- Вы протестировали AAB на реальном устройстве с помощью bundletool.
После выполнения этих условий файл .aab готов к загрузке.
Быстрая проверка
Вы установили isMinifyEnabled = true, и в выпуске приложение завершается с ошибкой «класс не найден», которую выдаёт анализатор JSON, хотя в режиме отладки всё работает. Какова наиболее вероятная причина?
Итоги: подготовка сборки выпуска
Теперь вы знаете, как превратить отладочное приложение в сборку, готовую к публикации:
- Play требует подписанный .aab и создаёт из него APK для каждого устройства.
- Тип сборки
releaseвключает R8 с помощьюisMinifyEnabledиisShrinkResources, чтобы уменьшить размер, обфусцировать и оптимизировать приложение. - Правила сохранения защищают код, использующий отражение, от удаления.
- Всегда увеличивайте
versionCodeи обновляйтеversionName. - Собирайте приложение с помощью
./gradlew bundleRelease, а результат тестируйте с помощью bundletool.
Далее: как на самом деле работает подпись, благодаря которой этой сборке можно доверять.
Часто задаваемые вопросы
Урок «Подготовка сборки к выпуску» бесплатный?
Да — полный текст урока «Подготовка сборки к выпуску» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Android Academy, подпишись на CoddyKit PRO. Курс Android Academy содержит 4 уроков всего.
Чему я научусь в уроке «Подготовка сборки к выпуску»?
Пакеты приложения и уменьшение размера Ты практикуешь Android Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Android Academy?
Предыдущий опыт не требуется. Android Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Подготовка сборки к выпуску»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Android Academy?
Да. Каждый урок Android Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Подготовка сборки к выпуску
- Подписание приложения
- Play Console и страница приложения
- Поэтапные выпуски и обновления