Сборка релизного APK и подпись приложения
Короткий ответ: сгенерируйте keystore, настройте signingConfigs в модуле app (build.gradle), соберите release‑вариант через Android Studio или ./gradlew assembleRelease и проверьте подпись apksigner. Ниже — практические команды и шаблоны конфигурации.
Подготовка проекта и общие настройки
Перед сборкой:
- Проверьте versionCode/versionName в module:app/build.gradle.
- Убедитесь, что приложение протестировано и минифицировано (R8/ProGuard).
- Проверьте манифест на нужные разрешения и remove debug-only code/логирование.
Используйте R8/ProGuard только после проверки, добавьте правила для сохранения моделей/рефлексии.
Создание keystore и настройка Gradle
-
Создайте keystore (один ключ для всех обновлений в Google Play): keytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-key-alias Сохраните файл в защищённом месте (и в .gitignore, не коммитить!).
-
Безопаснее хранить пароли в gradle.properties (локально, не в репозитории): MYAPP_RELEASE_STORE_FILE=my-release-key.jks MYAPP_RELEASE_KEY_ALIAS=my-key-alias MYAPP_RELEASE_STORE_PASSWORD=your_store_password MYAPP_RELEASE_KEY_PASSWORD=your_key_password
-
Пример конфигурации в app/build.gradle: signingConfigs { release { storeFile file(MYAPP_RELEASE_STORE_FILE) storePassword MYAPP_RELEASE_STORE_PASSWORD keyAlias MYAPP_RELEASE_KEY_ALIAS keyPassword MYAPP_RELEASE_KEY_PASSWORD } } buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' signingConfig signingConfigs.release } }
Если потеряете keystore или пароли — вы не сможете обновлять приложение в Play Console. Делайте надёжный бэкап.
Сборка: Android Studio и командная строка
-
Через Android Studio: Build > Generate Signed Bundle / APK > выберите APK или Android App Bundle (AAB) > укажите keystore и соберите release. ААB рекомендуется для публикации в Play.
-
Через Gradle (CI/CD или без IDE): ./gradlew assembleRelease Выход: app/build/outputs/apk/release/app-release.apk (или app-release-unsigned.apk в зависимости от конфигурации).
-
Для Flutter: flutter build apk --release
-
Для React Native — аналогично через Gradle в android/ папке.
Проверка подписи и выравнивание
-
Проверить сертификат внутри APK: keytool -printcert -jarfile app-release.apk
-
Выровнять APK (zipalign) — ускоряет установку: zipalign -v -p 4 app-release-unsigned.apk app-release-aligned.apk
-
Проверка подписи apksigner: apksigner verify --verbose app-release.apk
Последовательность для Play: собрать AAB или подписанный, выровненный APK → проверить apksigner → загрузить в Play Console.
APK vs AAB — что выбрать
- APK: удобно для sideload и внутреннего теста.
- AAB: меньший конечный размер в Play, обязателен для новых приложений в некоторых случаях. Рекомендация: публикуйте через AAB, для внешнего распространения держите signed universal APK при необходимости.
Частые ошибки
- INSTALL_PARSE_FAILED_NO_CERTIFICATES — APK не подписан или подпись некорректна.
- "Certificate has expired" — неверная validity при генерации keystore.
- Передача паролей в репозиторий — компрометация ключа.
- Несовпадение alias/паролей в gradle.properties и build.gradle.
FAQ
- Как восстановить утраченный keystore? — Невозможно восстановить; придётся выпускать новое приложение с другим пакетом.
- Можно ли подписывать на CI? — Да. Храните keystore и пароли в защищённых секретах CI (не в репозитории).
- Нужен ли zipalign если использую apksigner? — zipalign рекомендуется до подписи; современный apksigner не заменяет выравнивание.
Следуя этим инструкциям, вы за пару шагов подготовите корректно подписанный релизный APK/AAB и избежите большинства ошибок при публикации.