Android

Подготовка Android-приложения к релизу: пошаговое руководство

Это руководство поможет вам подготовить Android-приложение к релизу: настроить версии, подписать APK/AAB, оптимизировать и проверить сборку для публикации в Google Play.

Обновлено 16 февраля 2026 г.
15-30 мин
Средняя
FixPedia Team
Применимо к:Android SDK 33+Gradle 7.4+Android Studio Flamingo | 2022.2.1 или новее

Введение / Зачем это нужно

Подготовка к релизу — это ключевой этап перед публикацией Android-приложения в Google Play. Он гарантирует, что ваша сборка будет подписана, оптимизирована и соответствовать требованиям магазина. После выполнения этого руководства вы получите готовый к загрузке APK или AAB-файл, который корректно отображает версию и может быть установлен на устройства пользователей.

Требования / Подготовка

Перед началом убедитесь, что у вас установлено:

  • Android Studio (версия Flamingo | 2022.2.1 или новее) с Android SDK (API level 33+).
  • Gradle (версия 7.4+), интегрированный в проект.
  • Java Development Kit (JDK) 11 или выше для использования keytool.
  • Готовый проект Android, который вы хотите выпустить.
  • Доступ к компьютеру с правами администратора (для некоторых операций с keystore).

Если у вас уже есть keystore для подписания, подготовьте его расположение, alias и пароли. Если keystore нет — вы создадите его на одном из шагов.

Шаг 1: Настройте versionCode и versionName

Каждая публичная версия приложения в Google Play должна иметь уникальные versionCode (целое число) и понятный versionName (строка). Эти параметры задаются в файле build.gradle модуля app.

  1. Откройте файл app/build.gradle (или build.gradle.kts для Kotlin DSL).
  2. Найдите блок defaultConfig внутри android.
  3. Обновите значения:
    • versionCode: увеличьте на 1 относительно предыдущей публикации (например, с 1 на 2).
    • versionName: задайте читаемую версию, например "1.0.1" или "2.0 beta".

Пример для Groovy DSL:

android {
    defaultConfig {
        applicationId "com.example.myapp"
        minSdkVersion 21
        targetSdkVersion 33
        versionCode 2
        versionName "1.0.1"
    }
}

Для Kotlin DSL:

android {
    defaultConfig {
        applicationId = "com.example.myapp"
        minSdk = 21
        targetSdk = 33
        versionCode = 2
        versionName = "1.0.1"
    }
}

⚠️ Важно: versionCode должен быть целым числом и строго возрастать. Google Play не примет сборку с тем же или меньшим versionCode, чем у текущей версии.

Шаг 2: Создайте или используйте существующий keystore

Keystore — это файл, содержащий криптографический ключ для подписания APK/AAB. Без него вы не сможете обновлять приложение в Google Play. Если keystore уже есть, перейдите к шагу 3.

  1. Откройте терминал (в Android Studio или отдельный).
  2. Выполните команду keytool (входит в JDK). Пример для создания keystore с валидностью 25 лет:
    keytool -genkeypair -v -keystore my-release-key.jks -alias my-key-alias -keyalg RSA -keysize 2048 -validity 9125
    
    • -keystore my-release-key.jks — имя файла keystore (можно .keystore или .jks).
    • -alias my-key-alias — псевдоним ключа (запомните его).
    • -validity 9125 — срок действия в днях (25 лет ≈ 9125 дней).
  3. Следуйте инструкциям: введите пароль keystore, информацию о владельце (имя, организация, страна и т.д.). Подтвердите пароли.

💡 Совет: Храните keystore в надежном месте (не в проекте, не в облаке без шифрования). Создайте резервную копию. Потеря keystore означает невозможность обновлять приложение.

Шаг 3: Настройте подписание release-сборки

В build.gradle модуля app добавьте конфигурацию подписания для сборки release.

  1. В том же файле build.gradle внутри блока android добавьте signingConfigs:
    android {
        signingConfigs {
            release {
                storeFile file('path/to/my-release-key.jks')
                storePassword 'your_keystore_password'
                keyAlias 'my-key-alias'
                keyPassword 'your_key_password'
            }
        }
        buildTypes {
            release {
                signingConfig signingConfigs.release
                minifyEnabled true  // опционально: включите ProGuard/R8
                proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            }
        }
    }
    

    Замените 'path/to/my-release-key.jks', 'your_keystore_password', 'my-key-alias', 'your_key_password' на реальные значения.
  2. Для безопасности не храните пароли в открытом виде. Используйте переменные окружения или gradle.properties:
    • В gradle.properties (в корне проекта или ~/.gradle/):
      MY_KEYSTORE_PASSWORD=your_keystore_password
      MY_KEY_PASSWORD=your_key_password
      
    • В build.gradle:
      storePassword System.getenv("MY_KEYSTORE_PASSWORD")
      keyPassword System.getenv("MY_KEY_PASSWORD")
      

⚠️ Важно: Убедитесь, что release-сборка использует signingConfigs.release. Если вы пропустите это, сборка будет не подписана и не приметься в Google Play.

Шаг 4: Соберите release APK или AAB

Вы можете сгенерировать подписанную сборку через Android Studio или командную строку.

Способ A: Через Android Studio (рекомендуется для новичков)

  1. В меню выберите Build → Generate Signed Bundle / APK.
  2. В мастере:
    • Выберите Android App Bundle (AAB) или APK. Для новых приложений Google требует AAB.
    • Нажмите Next.
    • Выберите модуль (обычно app).
    • В разделе Key store path укажите путь к keystore или создайте новый.
    • Введите пароли и alias.
    • Выберите release в Build Variant.
    • Нажмите Finish.
  3. Готовый файл будет в app/build/outputs/bundle/release/ (для AAB) или app/build/outputs/apk/release/ (для APK).

Способ B: Через Gradle (для автоматизации)

  • Для AAB:
    ./gradlew bundleRelease
    
  • Для APK:
    ./gradlew assembleRelease
    

Файлы появятся в тех же директориях, что и при сборке через Android Studio.

💡 Совет: Если сборка завершилась с ошибкой, проверьте логи в BuildBuild Output в Android Studio или в терминале. Распространенные ошибки: неверный пароль keystore, отсутствие keystore-файла.

Шаг 5: Проверьте и оптимизируйте сборку

После сборки убедитесь, что APK (если выбран APK) оптимизирован с помощью zipalign. AABB автоматически оптимизируются Google Play, но для APK это обязательно.

  1. Для APK: Если вы использовали assembleRelease, APK может быть не выровнен. Выполните:
    zipalign -v -p 4 app/build/outputs/apk/release/app-release-unsigned.apk app-release-aligned.apk
    

    Затем подпишите, если еще не подписано (но в шаге 3 мы настроили подписание, поэтому app-release.apk уже подписан и выровнен, если в build.gradle включен zipAlignEnabled — он включен по умолчанию для release). Проверьте:
    zipalign -c -v 4 app/build/outputs/apk/release/app-release.apk
    

    Если вывод Verification successful, APK готов.
  2. Для AAB: Проверьте целостность:
    jarsigner -verify -verbose -certs app/build/outputs/bundle/release/app-release.aab
    

    Должно быть jar verified..
  3. Тестирование: Установите сборку на устройство или эмулятор:
    adb install -r app/build/outputs/apk/release/app-release.apk
    

    Или для AAB используйте внутреннее тестирование в Google Play Console (см. связанный гайд).

Проверка результата

После выполнения всех шагов убедитесь, что:

  • Файл существует: APK или AAB находится в указанной директории.
  • Подпись верна: Выполните jarsigner -verify -verbose -certs ваш_файл.apk (для APK) или aab (для AAB). Должны быть указаны ваши данные сертификата.
  • Zipalign для APK: zipalign -c -v 4 ваш_файл.apk возвращает Verification successful.
  • versionCode и versionName: Откройте AndroidManifest.xml в скомпилированном APK (можно через aapt dump badging ваш_файл.apk) и проверьте versionCode и versionName.
  • Установка: Приложение устанавливается на устройство без ошибок и запускается.

Возможные проблемы

Ошибка: "Keystore was tampered with, or password was incorrect"

  • Причина: Неверный пароль keystore или alias при сборке.
  • Решение: Проверьте пароли в build.gradle или в переменных окружения. Убедитесь, что используете правильный alias.

Ошибка: "Version code must be greater than previous"

  • Причина: versionCode не увеличен или совпадает с предыдущей версией в Google Play.
  • Решение: Увеличьте versionCode в build.gradle (например, на 1) и пересоберите.

Ошибка: "Execution failed for task ':app:validateSigningRelease'. > Keystore file not found"

  • Причина: Указан неверный путь к keystore в build.gradle.
  • Решение: Используйте абсолютный путь или file('relative/path'). Проверьте, что файл существует.

Проблема: AAB или APK не оптимизированы, большой размер

  • Причина: Не включен minifyEnabled или shrinkResources для release-сборки.
  • Решение: В build.gradle для release добавьте:
    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    
    Пересоберите. Размер уменьшится, но протестируйте приложение после обфускации.

Проблема: Установка release-сборки падает с ошибкой "App not installed"

  • Причина: Несовместимость подписи (например, пытаетесь установить поверх debug-сборки), или поврежденный APK.
  • Решение: Удалите debug-версию с устройства. Проверьте zipalign и подпись. Убедитесь, что minSdkVersion соответствует устройству.

Если проблема не решена, проверьте логи adb logcat при установке или обратитесь к другим гайдам по ошибкам установки.

Часто задаваемые вопросы

Что такое versionCode и versionName в Android?
Как создать keystore для подписания APK?
В чем разница между APK и AAB для релиза?
Как протестировать release-сборку перед загрузкой?

Полезное

Настройте versionCode и versionName
Создайте или используйте существующий keystore
Настройте подписание release-сборки
Соберите release APK или AAB
Проверьте и оптимизируйте сборку