La risposta accettata utilizza un file per controllare quale keystore utilizzare per firmare l'APK che risiede nella stessa cartella principale del progetto. Quando utilizziamo vcs come Git , potrebbe essere una brutta cosa quando dimentichiamo di aggiungere il file delle proprietà per ignorare l'elenco. Perché riveleremo la nostra password al mondo. I problemi persistono ancora.
Invece di creare un file delle proprietà nella stessa directory all'interno del nostro progetto, dovremmo farlo all'esterno. Lo facciamo fuori usando il file gradle.properties.
Ecco i passaggi:
1.Modifica o crea gradle.properties sul tuo progetto root e aggiungi il seguente codice, ricordati di modificare il percorso con il tuo:
AndroidProject.signing=/your/path/androidproject.properties
2.Creare androidproject.properties in / your / path / e aggiungi il seguente codice, non dimenticare di cambiare /your/path/to/android.keystore nel percorso del tuo keystore:
STORE_FILE=/your/path/to/android.keystore
STORE_PASSWORD=yourstorepassword
KEY_ALIAS=yourkeyalias
KEY_PASSWORD=yourkeypassword
3.Nel modulo app build.gradle (non il root build.gradle del progetto) aggiungere il codice seguente se non esiste o modificarlo:
signingConfigs {
release
}
buildTypes {
debug {
debuggable true
}
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
4. Aggiungere il seguente codice sotto il codice nel passaggio 3:
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
}
}
Questo codice cercherà la proprietà AndroidProject.signing in gradle.properties dal passaggio 1 . Se la proprietà viene trovata, tradurrà il valore della proprietà come percorso del file che punta a androidproject.properties che creiamo nel passaggio 2 . Quindi tutto il valore della proprietà da esso verrà utilizzato come configurazione della firma per il nostro build.gradle.
Ora non dobbiamo preoccuparci di nuovo del rischio di esporre la nostra password del keystore.
Maggiori informazioni su Firma dell'apk Android senza inserire le informazioni sul keystore in build.gradle
build.gradle
, dovrai avere qualcosa di diverso dabuild.gradle
, indipendentemente dal fatto che è un adattamento alle variabili di ambiente (per una risposta), un file delle proprietà (per un'altra risposta) o altri mezzi. Se non sei disposto ad avere cose al di fuori dibuild.gradle
, allora per definizione tutte le informazioni sulla firma devono essere dentrobuid.gradle
.