Android Studio: как сгенерировать подписанный apk с помощью Gradle?

90

Я искал в Google и SO, но не могу найти свой ответ.

Это первый раз, когда я работаю с системой Gradle, и сейчас я нахожусь на этапе создания подписанного APK для загрузки в Google Play (проект импортируется из eclipse).

Теперь я прочитал часть http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Building-and-Tasks, которую вы должны добавить signingConfigsв своиbuild.gradle

Я добавил эти строки, и теперь я увидел, что вам нужно запустить, ./gradlew assembleReleaseно запуск этого в моем cmd возвращает 'gradle' не распознается как внутренняя или внешняя команда, работающая программа или командный файл. Я также попытался щелкнуть правой кнопкой мыши по build.gradle и запустить его, сказав, что все прошло успешно, но как только я смотрю в папку build / apk только файл с именемapp-debug-unaligned.apk

Итак, как мне сгенерировать подписанный apk с помощью системы Gradle?

Липкий
источник
1
См. Stackoverflow.com/questions/20876069/…
Скотт Барта
@ScottBarta Частично сработал, как только я переключился в режим выпуска и запустил gradle, у меня все еще возникала ошибка, но с его помощью build> сгенерировать подписанный apk через меню это в конечном итоге сработало! Спасибо, я поддержал вас по предоставленной ссылке.
Gooey 04
подписать с версией v1 (подпись jar) или v2 (полная подпись apk) из файла gradle? решение здесь: stackoverflow.com/questions/57943259/…
user1506104

Ответы:

97

Существует три способа создания сборки в соответствии с buildType. (В вашем случае это релиз, но его можно назвать как угодно.)

  1. Перейдите в Gradle Task на правой панели Android Studio и найдите assembleReleaseили в assemble(#your_defined_buildtype)разделе Module Tasks.

  2. Перейдите к варианту сборки на левой панели и выберите сборку из раскрывающегося списка.

  3. Перейдите в корневой каталог проекта в File Explore, откройте cmd / terminal и запустите:

    Linux: ./gradlew assembleRelease or assemble(#your_defined_buildtype)

    Windows: gradlew assembleRelease or assemble(#your_defined_buildtype)

Если вы хотите создать (только) релизную сборку, вы можете использовать Build> Generate Signed apk. Для других типов сборки доступны только три указанных выше варианта.

Вы можете найти сгенерированный APK в своем module/buildкаталоге, указав в нем название типа сборки.

Pyus13
источник
4
Это создаст подписанный apk только в том случае, если у вас есть конфигурация сборки в build.gradle. Если вы храните это в инструментах управления исходным кодом или делитесь им с другими людьми, вам следует подумать об отделении учетных данных вашего ключа подписи от исходного кода.
Януш
Build> Generate Signed apk ... это так просто
Атул
61

Можно взять любой существующий проект Gradle Android Studio и построить / подписать его из командной строки без редактирования каких-либо файлов. Это очень удобно для хранения вашего проекта в системе управления версиями, при этом ваши ключи и пароли хранятся отдельно:

./gradlew assembleRelease -Pandroid.injected.signing.store.file=$KEYFILE -Pandroid.injected.signing.store.password=$STORE_PASSWORD -Pandroid.injected.signing.key.alias=$KEY_ALIAS -Pandroid.injected.signing.key.password=$KEY_PASSWORD
Уэйн Пекарски
источник
1
Поскольку нам нужно передать исходный код компаньону, это лучший способ сохранить в секрете информацию о нашем хранилище ключей. Благодарю.
Yeung
3
в любом случае узнать о существовании этих свойств android.injected.signing. * ?
Tixeon
Я получил эту информацию от Xav от команды Android Studio, и я не знаю, есть ли другие подобные переменные.
Wayne Piekarski
Я получаю java.lang.RuntimeException: com.android.ide.common.signing.KeytoolException: не удалось прочитать ключ XXXXXX из магазина «C: \ Users \ somedirectory \ Desktop \ someKey.jks»: нет ключа с псевдонимом 'XXXXXX' находится в хранилище ключей C: \ Users \ somedirectory \ Desktop \ someKey.jks. Это почему?
Archie G. Quiñones
40

Вы можете использовать этот код

android {
   ...
    signingConfigs {
        release {
            storeFile file("../your_key_store_file.jks")
            storePassword "some_password"
            keyAlias "alias_name"
            keyPassword "key_password"
        }
    }

    buildTypes {

        release {
            signingConfig signingConfigs.release
        }
    }
   ...
}

затем с вашего терминала запустите

./gradlew assembleRelease

вы получите apk по адресу

ваше-андроид-приложение / сборка / выходы / apk / ваш-андроид-приложение-релиз.apk

дроидшеф
источник
@ozcanovunc, пожалуйста, проверьте путь к хранилищу ключей еще раз, возможно, путь указан неверно.
бхавеш каила
При этом высока вероятность того, что вы build.gradleпроверены в системе контроля версий, как и ваши пароли! Если безопасность важна для вашего проекта, подумайте о выборе другого пути.
Marco7757,
1
gradle buildRelease не работает. Использовать вместо gradlew AssemblyRelease
Sathish Gadde
-3

меню сборки> создать подписанный apk

обманутый Дэвид
источник
Если вы запустите это, он скажет вам, что это не способ делать это. Кроме того, если я загружаю этот файл .apk, появляется сообщение об обнаружении ошибок или о чем-то еще.
Gooey 04
11
в нем говорится, что отладка включена ... в студии Android слева должна быть вкладка с надписью "варианты сборки" ... нажмите на нее и переключите все с "отладки" на "выпуск" ... после этого , снова сгенерируйте подписанный apk ...
trickedoutdavid 04
2
Это больше не работает! Например, для создаваемого APK-файла BuildConfig.DEBUG установлено значение true. Это доставило мне массу неприятностей, теперь вы должны использовать метод gradlew assemblyRelease.
Бен Клейтон
@BenClayton Вы совершенно правы! Я зря потратил из-за этого часы! Еще одна очень досадная «ошибка» в Android Studio - бедам не видно конца ...
sjkm
Интересно, почему этот простой шаг не может быть наиболее подходящим способом создания подписанного apk, как он четко упоминает. Этот шаг сгенерировал приложение и работает идеально для меня, без каких-либо проблем. Но многие другие ответы на все вопросы ТАК смущали меня, думая, что то, что я сделал, может не исправить или что-то еще.
Атул,