Android Studio: Wie erstelle ich signierte apk mit Gradle?

89

Ich habe bei Google und SO gesucht, kann aber meine Antwort nicht finden.

Dies ist das erste Mal, dass ich mit dem Gradle-System arbeite und ich bin gerade dabei, eine signierte APK zum Hochladen auf Google Play zu generieren (Projekt wird aus Eclipse importiert).

Jetzt habe ich den Teil hier gelesen http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Building-and-Tasks , den Sie signingConfigszu Ihren hinzufügen solltenbuild.gradle

Ich habe diese Zeilen hinzugefügt und jetzt habe ich gesehen, dass Sie ausgeführt werden müssen, ./gradlew assembleReleaseaber wenn Sie dies in meinem cmd ausführen, wird "gradle" nicht als interner oder externer Befehl, bedienbares Programm oder Batchdatei erkannt. Ich habe auch versucht, mit der rechten Maustaste auf das build.gradle zu klicken und es auszuführen. Es war erfolgreich, aber sobald ich in den build / apk-Ordner schaue, wird nur eine Datei namens aufgerufenapp-debug-unaligned.apk

Wie generiere ich die signierte apk mit dem Gradle-System?

Klebrig
quelle
@ScottBarta Teilweise hat es den Trick gemacht, als ich in den Release-Modus wechselte und den Gradle ausführte, bekam ich immer noch einen Fehler, aber mit dem Build> generierte signierte Apk über das Menü zu generieren, hat es schließlich geklappt! Danke, ich habe dich über den bereitgestellten Link positiv bewertet.
Gooey
mit v1 (jar Signatur) oder v2 (vollständige apk Signatur) Version aus Gradle-Datei signieren? Lösung hier: stackoverflow.com/questions/57943259/…
user1506104

Antworten:

97

Es gibt drei Möglichkeiten, um Ihren Build gemäß dem zu generieren buildType. (In Ihrem Fall handelt es sich um eine Veröffentlichung, die jedoch beliebig benannt werden kann.)

  1. Gehen Sie im rechten Bereich von Android Studio zu Gradle Task und suchen Sie nach assembleReleaseoder assemble(#your_defined_buildtype)unter Modulaufgaben

  2. Gehen Sie im linken Bereich zu Build-Variante und wählen Sie den Build aus der Dropdown-Liste aus

  3. Gehen Sie in File Explore zum Projektstammverzeichnis, öffnen Sie cmd / terminal und führen Sie Folgendes aus:

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

    Windows: gradlew assembleRelease or assemble(#your_defined_buildtype)

Wenn Sie (nur) einen Release-Build durchführen möchten, können Sie Build> verwenden Generate Signed apk. Für andere Build-Typen stehen nur die oben genannten drei Optionen zur Verfügung.

Sie finden die generierte APK in Ihrem module/buildVerzeichnis mit dem Namen des Build-Typs.

pyus13
quelle
4
Dies wird nur eine signierte apk erstellen, wenn Sie die Build-Konfiguration in Ihrem build.gradle haben. Wenn Sie dies in Quellcodeverwaltungstools speichern oder für andere Personen freigeben, sollten Sie darüber nachdenken, die Anmeldeinformationen Ihres Signaturschlüssels von Ihrem Quellcode zu trennen.
Janusz
Build> Generate Signed apk ... so einfach ist das
Atul
61

Es ist möglich, jedes vorhandene Android Studio-Gradle-Projekt über die Befehlszeile zu erstellen / zu signieren, ohne Dateien zu bearbeiten. Dies macht es sehr schön, Ihr Projekt in der Versionskontrolle zu speichern und gleichzeitig Ihre Schlüssel und Passwörter getrennt zu halten:

./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
Wayne Piekarski
quelle
1
Da wir den Quellcode an Companion übergeben müssen, ist dies der beste Weg, um unsere Keystore-Inhalte geheim zu halten. Vielen Dank.
Yeung
2
trotzdem diese android.injected.signing. * eigenschaften kennenlernen ?
Tixeon
Ich habe diese Informationen von Xav vom Android Studio-Team erhalten und weiß nicht, ob es andere Variablen wie diese gibt.
Wayne Piekarski
Ich erhalte java.lang.RuntimeException: com.android.ide.common.signing.KeytoolException: Fehler beim Lesen des Schlüssels XXXXXX aus dem Speicher "C: \ Users \ somedirectory \ Desktop \ someKey.jks": Kein Schlüssel mit dem Alias ​​'XXXXXX' gefunden im Schlüsselspeicher C: \ Users \ somedirectory \ Desktop \ someKey.jks. Warum ist das so?
Archie G. Quiñones
39

Sie können diesen Code verwenden

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

    buildTypes {

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

dann von Ihrem Terminal laufen

./gradlew assembleRelease

Sie werden die apk bekommen

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

droidchef
quelle
@ozcanovunc Bitte überprüfen Sie Ihren Keystore-Pfad erneut. Möglicherweise ist Ihr Pfad falsch definiert.
Bhavesh Kaila
Wenn Sie dies tun, besteht die Möglichkeit, dass Sie build.gradlein die Versionskontrolle eingecheckt werden, ebenso wie Ihre Passwörter! Ziehen Sie einen anderen Weg in Betracht, wenn Sicherheit in Ihrem Projekt wichtig ist.
Marco7757
1
gradle montierenFreigabe funktioniert nicht. Verwenden Sie anstelle von gradlew assembleRelease
Sathish Gadde
-3

Menü erstellen> signierte apk generieren

ausgetrickstdavid
quelle
Wenn Sie das ausführen, erfahren Sie, dass dies nicht der richtige Weg ist. Außerdem wird beim Hochladen dieser APK-Datei ein Fehler ausgegeben, der besagt, dass Fehlererkennungen oder ähnliches aktiviert sind.
Gooey
11
Es heißt, dass das Debuggen aktiviert ist. In Android Studio sollte auf der linken Seite eine Registerkarte mit der Aufschrift "Build-Varianten" angezeigt werden. Klicken Sie darauf und wechseln Sie danach von "Debug" zu "Release" , wieder signierte apk generieren ...
trickedoutdavid
2
Das funktioniert nicht mehr! Zum Beispiel hat BuildConfig.DEBUG für das von ihm erstellte APK den Wert true. Dies hat mir unermüdliche Probleme bereitet. Sie müssen jetzt die Methode gradlew assembleRelease verwenden.
Ben Clayton
@ BenClayton Du hast absolut recht! Ich habe deswegen Stunden verschwendet! Ein weiterer sehr nerviger "Bug" in Android Studio - Kein Ende in Sicht mit Problemen ...
sjkm
Ich frage mich, warum dieser einfache Schritt nicht der geeignetste Weg ist, signierte apk zu generieren, da er eindeutig erwähnt. Dieser Schritt generiert App und funktioniert perfekt für mich, ohne Probleme. Aber viele andere Antworten auf SO verwirrten mich und ich dachte, was ich getan habe, könnte nicht richtig sein oder was.
Atul