2013-04-01 11 views
19

Also ich versuche, alle meine Ameisen-Build-Skripte zu Gradle zu konvertieren, und ich habe in der Lage, reichlich Ressourcen und Dokumentation zu finden, außer wie die Signierung in konfigurieren Gradle.properties-Datei.Freigeben Signieren in Gradle.properties für Android

ant.properties tut es etwa so:

key.alias=alias 
key.store.password=password 
key.store=keystore.file 
key.alias.password=password 

Aber wie mache ich das gleiche in gradle?

Antwort

33

In Ihrem gradle.properties Datei speichern die gleichen Werte wie in der ant.properties Datei, ich glaube, Sie werden einfachere Namen zu tun haben, wie zum Beispiel keyAlias. Entfernen Sie einfach die Punkte, um sicher zu sein.

dann in Ihrer build.gradle Datei so etwas tun:

android { 
    signingConfigs { 
     release 
    } 
    buildTypes { 
     release { 
      signingConfig signingConfigs.release 
     } 
    } 
} 

if (project.hasProperty('keyAlias')) { 
    android.signingConfigs.release.keyAlias = keyAlias 
} 
// do the same for the three other properties 
// ... 

es auf diese Weise tun gibt Ihnen Flexibilität auf einem Computer zu bauen, der die gradle.properties Datei hat oder nicht. Die Eigenschaft "keyalias" wird nur gelesen, wenn sie existiert, damit der Code nicht fehlschlägt, wenn er nicht vorhanden ist.

Wenn alle Eigenschaften vorhanden sind, wird signingConfigs.release vollständig konfiguriert und wird verwendet, um die APK während des Builds zu signieren. Wenn es nicht dort ist, wird die APK gebaut, aber nicht signiert.

+0

danke, ich habe es behoben. –

+0

Immer noch Probleme? Beachten Sie, dass die Reihenfolge der Erscheinung wichtig, siehe http://StackOverflow.com/A/22791482/190599 – CodeReaper

22

Ich konnte es mit dem folgenden tun. Ich habe die Lösung von @ Xav ausprobiert, aber es würde sich während des Release-Validierungsschritts beschweren, wenn ich die Eigenschaften nicht eingestellt hätte. Ich bin mir sicher, dass dies eine Änderung der letzten Zeit ist, da sich das Framework stark verändert hat. Ich wollte nur helfen, indem ich darauf hinwies, dass ich mit der else ganz am Schluss die Freigabe signingConfig auf null setzen konnte. Jetzt erfolgen sowohl signierte als auch nicht signierte Releases in Abhängigkeit vom Vorhandensein der Gradle.properties.

signingConfigs { 
    release { 
     keyAlias = "blue_sleep" 
    } 
} 

buildTypes { 
    release { 
     signingConfig signingConfigs.release 
    } 
} 

if (project.hasProperty('storeFile') && 
     project.hasProperty('storePassword') && 
     project.hasProperty('keyPassword')) { 
    android.signingConfigs.release.storeFile = file(storeFile) 
    android.signingConfigs.release.storePassword = storePassword 
    android.signingConfigs.release.keyPassword = keyPassword 
} else { 
    android.buildTypes.release.signingConfig = null 
} 

Einige andere nützliche Hinweise, können Sie die gradle.properties in ~/.gradle/setzen, wenn Sie es im Projektordner sitzen nicht wollen. Sie können auch die storeFile-Eigenschaft mit einem absoluten Pfad wie folgt setzen: storePath=file:///Users/nick/Dropbox/mycompany.keystore

3

Gradle 1.9 erlaubt Ihnen nicht, Eigenschaften zu definieren. Sie können sie jetzt nur zu ext hinzufügen. Kleiner Zusatz zu vorherigen Antworten:

signingConfigs { 
    debug { 
     project.ext.loadSign = false 
    } 
    release { 
     project.ext.loadSign = true 
    } 
} 

buildTypes { 
    debug { 
     signingConfig signingConfigs.debug 
    } 
    release { 
     signingConfig signingConfigs.release 
    } 
} 

if (project.ext.loadSign) { 
    Properties p = new Properties() 
    p.load (new FileInputStream (rootProject.file ('keys/sign.properties'))) 

    android.signingConfigs.release.storeFile file (p.file) 
    android.signingConfigs.release.storePassword p.password 
    android.signingConfigs.release.keyAlias p.alias 
    android.signingConfigs.release.keyPassword p.keyPassword 
} 
4

Inspiriert von Eugens Lösung kam ich zu einer etwas kürzeren Varianz. Der Code muss in der android {} Task-Konfiguration sein.

File signFile = rootProject.file('sign.properties') 
if (signFile.exists()) { 
    Properties p = new Properties() 
    p.load(new FileInputStream(signFile)) 
    signingConfigs { 
     releaseConfig { 
      storeFile file(p.storeFile) 
      storePassword p.storePassword 
      keyAlias p.keyAlias 
      keyPassword p.keyPassword 
     } 
    } 
    buildTypes.release.signingConfig signingConfigs.releaseConfig 
} 
+0

Kurz, nützlich und funktioniert einfach. Danke – Meanman

0

Meine Anforderungen waren, dass jemand ohne den Schlüsselspeicher sollte richtig aufbauen können. Dies ist der sauberste Weg, den ich finden konnte:

android { 
    signingConfigs { 
     release //Filled in readSigningConfigIfAvailable() 
    } 

    buildTypes { 
     release { 
      minifyEnabled true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-xyz.txt' 
      readSigningConfigIfAvailable() 
     } 
    } 
} 

private void readSigningConfigIfAvailable() { 
    if (hasAllSigningProperties()) { 
     android.signingConfigs.release.storeFile = file(keystore_path) 
     android.signingConfigs.release.storePassword = keystore_password 
     android.signingConfigs.release.keyAlias = key_alias 
     android.signingConfigs.release.keyPassword = key_password 
     android.buildTypes.release.signingConfig = android.signingConfigs.release 
    } else { 
     android.buildTypes.release.signingConfig = null 
    } 
} 

private boolean hasAllSigningProperties() { 
    (hasProperty('keystore_path') 
    && hasProperty('keystore_password') 
    && hasProperty('key_alias') 
    && hasProperty('key_password')) 
} 
+0

welche Gradle Datei? der im cordova-Ordner? der eine, den ich in Android sehe, ist "generierte Datei" nicht bearbeiten. – FlavorScape