Сборка APK в Android Studio: быстро и без ошибок
Короткий ответ: для отладки используйте Build > Build APK(s) или ./gradlew assembleDebug; для релиза — Build > Generate Signed Bundle / APK → APK, укажите или создайте keystore, настройте signingConfig в build.gradle и экспортируйте app-release.apk из app/build/outputs/apk/release/.
Подготовка проекта
- В build.gradle (Module: app) проверьте compileSdk, minSdk и targetSdk.
- Добавьте R8/ProGuard для релиза: в buildTypes.release включите minifyEnabled true и proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'.
- Обновите Android Studio и Android Gradle Plugin (рекомендуется AGP 8.x+).
- Не храните пароли в репозитории — используйте gradle.properties (local) или переменные окружения и .gitignore для keystore.
Для быстрой отладки оставьте автоматическую подпись debug-ключом (~/.android/debug.keystore). Отключайте Instant Run/Apply Changes при подготовке релиза.
Сборка Debug APK
- Через GUI: Build > Build Bundle(s) / APK(s) > Build APK(s). Файл появится в app/build/outputs/apk/debug/app-debug.apk.
- Через терминал: ./gradlew assembleDebug
- Установка на устройство: Run > Run 'app' или adb install -r app/build/outputs/apk/debug/app-debug.apk Debug‑сборка не подходит для публикации: содержит отладочную информацию и автоматически подписана debug-ключом.
Сборка Release APK и подпись
Пошагово:
- Build > Generate Signed Bundle / APK → выберите APK.
- Если ключа нет — Create new: укажите имя файла keystore, alias, пароли и срок действия (рекомендуется >25 лет).
- Выберите build variant = release, включите нужные флаги ProGuard/R8.
- Finish — APK появится в app/build/outputs/apk/release/app-release.apk.
Пример signingConfigs в build.gradle (не храните пароли явно в репо):
android {
signingConfigs {
release {
storeFile file("keystore.jks")
storePassword System.getenv("STORE_PASS")
keyAlias "myAlias"
keyPassword System.getenv("KEY_PASS")
}
}
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
Генерация keystore через keytool: keytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-key-alias
Потеря keystore или пароля делает невозможным выпуск обновлений в Google Play. Храните файл и пароли в безопасном месте.
Проверка и экспорт
- Место файлов: app/build/outputs/apk/[debug|release]/.
- Анализ APK: Build > Analyze APK — проверяет подпись, размер и содержимое.
- Установка: adb install -r app-release.apk
- Для публикации в Google Play предпочтительнее AAB: Build > Generate Signed Bundle, Google оптимизирует APK для устройств.
Частые ошибки
- "Keystore was tampered with, or password was incorrect" — неверный пароль или повреждён файл keystore.
- Подписание debug-ключом вместо релизного — проверьте signingConfig.
- Забыт proguard-rules — апк может ломаться при минификации (добавьте правила для reflection/serializable).
- Хранение паролей в VCS — риск утечки.
FAQ
- Нужно ли подписывать debug‑APK? Нет, он подписан debug-ключом автоматически и не предназначен для публикации.
- Где хранить keystore? В безопасном хранилище (vault) или локально вне репозитория, с резервной копией.
- Как собрать через CI? Используйте ./gradlew assembleRelease с переменными окружения для паролей и защищённым хранением keystore.
Удачной сборки — следуйте шагам, храните ключи безопасно и проверяйте APK перед публикацией.