621 Stimmen

Wie erstellt man eine signierte Release-APK-Datei mit Gradle?

Ich möchte, dass mein Gradle-Build eine signierte Release-APK-Datei unter Verwendung von Gradle erstellt.

Ich bin mir nicht sicher, ob der Code korrekt ist oder ob ich einen Parameter vermisse, wenn ich gradle build ausführe?

Dies ist ein Teil des Codes in meiner build.gradle/build.gradle.kts-Datei:

android {
    ...
    signingConfigs {
        release {
            storeFile(file("release.keystore"))
            storePassword("******")
            keyAlias("******")
            keyPassword("******")
        }
    }
}

Der Gradle-Build wird ERFOLGREICH abgeschlossen, und in meinem build/apk-Ordner sehe ich nur die Dateien ...-release-unsigned.apk und ...-debug-unaligned.apk.

Irgendwelche Vorschläge, wie man das lösen kann?

38voto

janpio Punkte 10084

Wenn Sie bereits die Keystore-Datei haben, kann es so einfach sein, nur wenige Parameter zu Ihrem Build-Befehl hinzuzufügen:

./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

Keine dauerhaften Änderungen an Ihrem Android-Projekt erforderlich.

Quelle: http://www.tinmith.net/wayne/blog/2014/08/gradle-sign-command-line.htm

36voto

Gal Bracha Punkte 16362

Wie @Destil sagte, aber erlauben Sie anderen, die den Schlüssel nicht haben, zu kompilieren: Ein einfacherer Weg als in vorherigen Antworten:

Fügen Sie dies in ~/.gradle/gradle.properties ein

RELEASE_STORE_FILE={Pfad zu Ihrem Keystore}
RELEASE_STORE_PASSWORD=*****
RELEASE_KEY_ALIAS=*****
RELEASE_KEY_PASSWORD=*****

Ändern Sie Ihr build.gradle wie folgt:

...    
if(project.hasProperty("RELEASE_STORE_FILE")) {
    signingConfigs {    
       release {
           storeFile file(RELEASE_STORE_FILE)
           storePassword RELEASE_STORE_PASSWORD
           keyAlias RELEASE_KEY_ALIAS
           keyPassword RELEASE_KEY_PASSWORD
       }
    }
}

buildTypes {
    if(project.hasProperty("RELEASE_STORE_FILE")) {
        release {
            signingConfig signingConfigs.release
        }
    }
}
....

Dann können Sie gradle assembleRelease ausführen ODER gradle build

28voto

jonbo Punkte 301

(In Antwort auf Benutzer672009 oben.)

Ein noch einfacherer Lösungsweg, wenn Sie Ihre Passwörter aus einem Git-Repository heraushalten möchten, aber trotzdem Ihre build.gradle darin einschließen möchten, das auch mit Produktvarianten hervorragend funktioniert, besteht darin, eine separate Gradle-Datei zu erstellen. Nennen wir sie 'signing.gradle' (nehmen Sie sie in Ihre .gitignore auf). Genauso als ob es Ihre build.gradle-Datei wäre, ohne alles darin, was nichts mit der Signierung zu tun hat.

android {
    signingConfigs {
        flavor1 {
            storeFile file("..")
            storePassword ".."
            keyAlias ".."
            keyPassword ".."
        }
        flavor2 {
            storeFile file("..")
            storePassword ".."
            keyAlias ".."
            keyPassword ".."
        }
    }
}

Dann fügen Sie in Ihrer build.gradle-Datei diese Zeile direkt unter "apply plugin: 'android'" ein

 apply from: 'signing.gradle'

Wenn Sie keine oder keine verschiedenen Varianten haben, benennen Sie "flavor1" oben in "release" um und Sie sollten fertig sein. Wenn Sie Varianten verwenden, fahren Sie fort.

Verknüpfen Sie schließlich Ihre Varianten mit dem entsprechenden signingConfig in Ihrer build.gradle-Datei und Sie sollten fertig sein.

  ...

  productFlavors {

      flavor1 {
          ...
          signingConfig signingConfigs.flavor1
      }

      flavor2 {
          ...
          signingConfig signingConfigs.flavor2
      }
  }

  ...

19voto

Egis Punkte 4642

Wenn Sie wie ich apk über die Befehlszeile erstellen, können Sie die Signaturkonfiguration als Argumente angeben.

Fügen Sie dies zu Ihrem build.gradle hinzu

def getStore = { ->
    def result = project.hasProperty('storeFile') ? storeFile : "null"
    return result
}

def getStorePassword = { ->
    def result = project.hasProperty('storePassword') ? storePassword : ""
    return result
}

def getKeyAlias = { ->
    def result = project.hasProperty('keyAlias') ? keyAlias : ""
    return result
}

def getKeyPassword = { ->
    def result = project.hasProperty('keyPassword') ? keyPassword : ""
    return result
}

Gestalten Sie Ihre signingConfigs so

signingConfigs {
    release {
        storeFile file(getStore())
        storePassword getStorePassword()
        keyAlias getKeyAlias()
        keyPassword getKeyPassword()
    }
}

Führen Sie dann gradlew wie folgt aus

./gradlew assembleRelease -PstoreFile="keystore.jks" -PstorePassword="password" -PkeyAlias="alias" -PkeyPassword="password"

19voto

sandalone Punkte 40194

In der neueren Android Studio-Version gibt es einen GUI-Weg, der sehr einfach ist und auch die Gradle-Datei ausfüllt.

  1. Datei -> Projektstruktur

  2. Modul -> Wählen Sie das Hauptmodul ('app' oder einen anderen benutzerdefinierten Namen)

  3. Registerkarte Signing -> Plus-Symbol, um eine neue Konfiguration hinzuzufügen

  4. Füllen Sie die Daten auf der rechten Seite aus

  5. OK und die Gradle-Datei wird automatisch erstellt

  6. Sie müssen manuell eine Zeile signingConfig signingConfigs.NameOfYourConfig innerhalb von builtTypes{release{}} hinzufügen

Bilder:

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

Zwei wichtige(!) Anmerkungen:

(BEARBEITEN 12/15)

  1. Um eine signierte APK zu erstellen, müssen Sie den Terminal-Tab von Android Studio öffnen (unten auf der Hauptoberfläche) und den Befehl ./gradlew assembleRelease eingeben

  2. Wenn Sie keyAlias vergessen haben (was mir oft passiert), müssen Sie Build -> Generate Signed APK initiieren, um den Prozess zu starten und den Namen des Alias-Schlüssels zu sehen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X