2013-10-07 11 views
11

Ich habe ein großes Problem, wenn ich gekommen, um meine Anwendung zu unterschreiben:„Die Unterzeichnung Konfiguration sollte in Gradle Build-Skripte angegeben werden“ ... Ich habe es

signingConfigs { 
    release { 
     storeFile file("lomapnew.keystore") 
     storePassword "myPassword" 
     keyAlias "myAlias" 
     keyPassword "Something...." 
    } 
} 
: Ich habe die Unterzeichnung Konfiguration in Übereinstimmung mit der doc gesetzt habe

Aber ich immer noch diese Fehlermeldung: „Die Unterzeichnung Konfiguration in Gradle angegeben werden sollte Build-Skripte“

enter image description here

+0

Haben Sie diese Signaturkonfiguration für den BuildType-Release festgelegt? – Krylez

+0

Ich vermute, dass die Nachricht bedeutet, dass Sie die signingConfigs in 'Buildscript {}' in der Gradle-Datei haben müssen. –

+1

@JBNizet Ich denke nicht, dass das stimmt, oder zumindest nicht für meine Konfiguration. – Krylez

Antwort

19

ich auf einem Bein gehen werde und denke, dass Sie nicht festgelegt haben die Signaturkonfiguration für den Release-Build-Typ . Der Debug-Build-Typ ist automatisch, daher ist es nicht offensichtlich, dass dies ein notwendiger Schritt für andere Build-Typen ist, einschließlich der Version.

Sie können die Unterzeichnung Config wie so gelten:

android { 
    signingConfigs { 
     // It's not necessary to specify, but I like to keep the debug keystore 
     // in SCM so all our debug builds (on all workstations) use the same 
     // key for convenience 
     debug { 
      storeFile file("debug.keystore") 
     } 
     release { 
      storeFile file("release.keystore") 
      storePassword "myPassword" 
      keyAlias "myAlias" 
      keyPassword "Something...." 
     } 
    } 

    buildTypes { 
     /* This one happens automatically 
     debug { 
      signingConfig signingConfigs.debug 
     } 
     */ 
     release { 
      signingConfig signingConfigs.release 
     } 
    } 
} 
+0

können Sie mir sagen, wo die Datei 'release.keystore' liegen soll, damit die Datei (" release.keystore ") funktioniert? – Bhargav

+0

@Bhargav Die Dateimethode ist relativ zum Projektstamm. Der Keystore lebt an einer beliebigen Stelle in Ihrem Projekt, solange Sie den Pfad in Ihrer Build-Datei aktualisieren. https://docs.gradle.org/current/javadoc/org/gradle/api/Project.html#file(java.lang.Object) – Krylez

+0

Ist es ratsam, Keystore-Dateien zusammen mit Ihrem Repository in Git privat zu sichern? – Bhargav

0

Antwort bereits gegeben, aber ich würde die anderen Möglichkeiten, wie auch markieren, können wir die Informationen manuell angeben, wie unten, wo wir voll angeben müssen Weg zu unserem Schlüsselspeicher Ort wie diese

signingConfigs { 
    release { 
     storeFile file('O:/Android/Projects/yourKeyStore.jks') 
     storePassword "qwerty" 
     keyAlias "yourProjectKeyAlias" 
     keyPassword "ProjectKeyPassword" 
    } 
} 

Dies kann auch in Signing Bericht angegeben werden, wenn Sie in

gehen

Datei -> Projektstruktur

Wählen Sie Ihr Projekt-App-Modul aus und wählen Sie den Signaturbericht aus, in dem Sie die Informationen ausfüllen können und automatisch frühere Versionsinformationen in die GRADLE-Datei einfügen.

Schließlich haben Sie gerade

signingConfig android.signingConfigs.release 

in den buildTypes {...} Abschnitt hinzuzufügen. Damit wird das Signierverfahren abgeschlossen.

0

Ich mag Passwörter aus meiner Build-Datei zu halten. Daher erstelle ich eine Properties-Datei, dass ich laden mit

def keystorePropertiesFile = rootProject.file("./local.properties") 
def keystoreProperties = new Properties() 
keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) 

Dann habe ich signingConfigs definieren wie folgt:

signingConfigs { 
    releaseSigning { 
     storeFile file(keystoreProperties['storeFile']) 
     storePassword keystoreProperties['keystore.live.storepassword'] 
     keyAlias = keystoreProperties['keystore.live.keyalias'] 
     keyPassword = keystoreProperties['keystore.live.keypassword'] 
    } 
    debugSigning { 
     storeFile file(keystoreProperties['storeFile']) 
     storePassword keystoreProperties['keystore.debug.storepassword'] 
     keyAlias = keystoreProperties['keystore.debug.keyalias'] 
     keyPassword = keystoreProperties['keystore.debug.keypassword'] 
    } 
} 

Das ist nicht gut mit der Menüoption funktioniert „Signed apk erstellen“ so ich Aromen schaffen :

productFlavors { 
    mydebug { 
     signingConfig signingConfigs.debugSigning 
    } 
    myrelease { 
     signingConfig signingConfigs.releaseSigning 
    } 
} 

und jetzt arbeiten die signingconfigs mit der Ausführen-Schaltfläche auf der Symbolleiste. Für einen Standardschlüsselspeicher sieht die local.properties wie

ndk.dir=/opt/sdk/ndk-bundle 
sdk.dir=/opt/sdk 
storeFile=/home/christine/.android/debug.keystore 
keystore.debug.storepasswd=android 
keystore.debug.keyalias=androiddebugkey 
keystore.debug.keypassword=android 
keystore.live.storepasswd=android 
keystore.live.keyalias=androiddebugkey 
keystore.livetest.keypassword=android 

In Ihrihre Jenkins bauen Skript, müssen Sie einen symbolischen Link von local.properties zu schaffen, in dem die Eigenschaften-Datei auf Ihrem Build-Server.