Сборка 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/.

Подготовка проекта

  1. В build.gradle (Module: app) проверьте compileSdk, minSdk и targetSdk.
  2. Добавьте R8/ProGuard для релиза: в buildTypes.release включите minifyEnabled true и proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'.
  3. Обновите Android Studio и Android Gradle Plugin (рекомендуется AGP 8.x+).
  4. Не храните пароли в репозитории — используйте 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 и подпись

Пошагово:

  1. Build > Generate Signed Bundle / APK → выберите APK.
  2. Если ключа нет — Create new: укажите имя файла keystore, alias, пароли и срок действия (рекомендуется >25 лет).
  3. Выберите build variant = release, включите нужные флаги ProGuard/R8.
  4. 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 перед публикацией.