Android Studio: як згенерувати підписаний apk за допомогою Gradle?


89

Я шукав у 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?



@ScottBarta Частково зробив трюк, як тільки я перейшов у режим звільнення та запустив gradle, я все одно отримав помилку, але використовуючи he build> згенерувати підписаний apk через меню, це врешті-решт вийшло! Дякую, я підтримав вас за наданим посиланням.
Gooey

підписати версію v1 (підпис jar) або v2 (повний підпис apk) з файлу gradle? Рішення тут: stackoverflow.com/questions/57943259 / ...
user1506104

Відповіді:


97

Існує три способи створення вашої збірки відповідно до buildType. (У вашому випадку це випуск, але його можна назвати як завгодно.)

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

  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каталозі, маючи в ньому назву типу збірки.


4
Це створить підписаний apk, лише якщо у вашій build.gradle є конфігурація збірки. Якщо ви зберігаєте це в інструментах управління вихідним кодом або ділитесь ним з іншими людьми, вам слід подумати про відокремлення облікових даних ключа підписання від вихідного коду.
Януш

Будувати> Створювати підписаний 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

2
у будь-якому випадку знайомство з цими властивостями 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

39

Ви можете використовувати цей код

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 на

your-android-app / build / outputs / apk / your-android-app-release.apk


@ozcanovunc, будь ласка, ще раз перевірте шлях до вашого магазину ключів, можливо, ваш шлях визначений неправильно.
bhavesh kaila

Роблячи це, є ймовірність того, що ви build.gradleперевірили контроль версій, а також ваші паролі! Подумайте про інший шлях, коли безпека важлива у вашому проекті.
Marco7757

1
gradle assembleВипуск не працює. Використовуйте замість gradlew assembleRelease
Sathish Gadde


-3

меню побудови> згенерувати підписаний apk


Якщо ви запускаєте це, це говорить вам, що це не спосіб це зробити. Окрім того, якщо я завантажую цей файл .apk, то виникає помилка, яка говорить про те, що виявлення помилок чи щось інше.
Gooey

11
там написано, що налагодження увімкнено ... в андроїд-студії, ліворуч, повинна бути вкладка з написом "варіанти побудови" ... клацніть на ній і переключіть все з "налагодження" на "випуск" ... після цього , згенерувати підписаний apk знову ...
trickedoutdavid

2
Це вже не працює! Наприклад, у побудованому ним файлі .apk встановлено значення TrueConfig.DEBUG. Це не призвело до кінця проблем, тепер ви повинні використовувати метод gradlew assembleRelease.
Бен Клейтон,

@BenClayton Ви абсолютно праві! Я даремно витратив години на це! Ще одна дуже неприємна "помилка" в Android Studio - не видно кінця з проблемами ...
sjkm

Цікаво, чому цей простий крок не може бути найбільш підходящим способом для створення підписаного apk, як це чітко згадується. Цей крок створив додаток і працює ідеально для мене без жодних проблем. Але багато інших відповідей на ТО збентежили мене, думаючи, що я зробив, можливо, не правильно чи що.
Атул
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.