Die akzeptierte Antwort verwendet eine Datei, um zu steuern, welcher Schlüsselspeicher zum Signieren der APK verwendet werden soll, die sich im selben Stammordner des Projekts befindet. Wenn wir VCS wie Git verwenden , kann dies eine schlechte Sache sein, wenn wir vergessen, die Eigenschaftendatei hinzuzufügen, um die Liste zu ignorieren. Weil wir unser Passwort der Welt mitteilen werden. Die Probleme bestehen weiterhin.
Anstatt die Eigenschaftendatei in demselben Verzeichnis innerhalb unseres Projekts zu erstellen, sollten wir sie außerhalb erstellen. Wir schaffen es nach draußen, indem wir die Datei gradle.properties verwenden.
Hier die Schritte:
1.Bearbeiten oder erstellen Sie gradle.properties in Ihrem Stammprojekt und fügen Sie den folgenden Code hinzu. Denken Sie daran, den Pfad mit Ihrem eigenen zu bearbeiten:
AndroidProject.signing=/your/path/androidproject.properties
2.Erstellen Sie androidproject.properties in / your / path / und fügen Sie den folgenden Code hinzu. Vergessen Sie nicht, /your/path/to/android.keystore in Ihren Keystore-Pfad zu ändern:
STORE_FILE=/your/path/to/android.keystore
STORE_PASSWORD=yourstorepassword
KEY_ALIAS=yourkeyalias
KEY_PASSWORD=yourkeypassword
3. Fügen Sie in Ihrem App-Modul build.gradle (nicht in Ihrem Projekt root build.gradle) den folgenden Code hinzu, falls nicht vorhanden, oder passen Sie ihn an:
signingConfigs {
release
}
buildTypes {
debug {
debuggable true
}
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
4. Fügen Sie den folgenden Code unter dem Code in Schritt 3 hinzu:
if (project.hasProperty("AndroidProject.signing")
&& new File(project.property("AndroidProject.signing").toString()).exists()) {
def Properties props = new Properties()
def propFile = new File(project.property("AndroidProject.signing").toString())
if(propFile.canRead()) {
props.load(new FileInputStream(propFile))
if (props!=null && props.containsKey('STORE_FILE') && props.containsKey('STORE_PASSWORD') &&
props.containsKey('KEY_ALIAS') && props.containsKey('KEY_PASSWORD')) {
android.signingConfigs.release.storeFile = file(props['STORE_FILE'])
android.signingConfigs.release.storePassword = props['STORE_PASSWORD']
android.signingConfigs.release.keyAlias = props['KEY_ALIAS']
android.signingConfigs.release.keyPassword = props['KEY_PASSWORD']
} else {
println 'androidproject.properties found but some entries are missing'
android.buildTypes.release.signingConfig = null
}
} else {
println 'androidproject.properties file not found'
android.buildTypes.release.signingConfig = null
}
}
Dieser Code sucht ab Schritt 1 in gradle.properties nach der Eigenschaft AndroidProject.signing . Wenn die Eigenschaft gefunden wird, wird der Eigenschaftswert als Dateipfad übersetzt, der auf androidproject.properties verweist, die wir in Schritt 2 erstellt haben . Dann wird der gesamte Eigenschaftswert daraus als Signaturkonfiguration für unser build.gradle verwendet.
Jetzt müssen wir uns nicht mehr um das Risiko kümmern, unser Keystore-Passwort preiszugeben.
Lesen Sie mehr bei Signing Android apk, ohne Keystore-Informationen in build.gradle zu setzen
build.gradle
sind, müssen Sie etwas anderes haben alsbuild.gradle
, ob Dies ist eine Anpassung an Umgebungsvariablen (pro Antwort), einer Eigenschaftendatei (pro Antwort) oder auf andere Weise. Wenn Sie nicht bereit sind, Dinge außerhalb von zu habenbuild.gradle
, müssen per Definition alle Signaturinformationen innerhalb seinbuid.gradle
.