2013-04-01 12 views
19

Quindi sto provando a convertire tutti i miei script di form di ant per gradle, e sono stato in grado di trovare ampie risorse e documentazione su tutto questo eccetto come configurare la firma nel file gradle.properties.Rilasciare l'accesso in gradle.properties per Android

ant.properties lo fa in questo modo:

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

Ma come faccio a fare lo stesso in Gradle?

risposta

33

Nei tuoi gradle.properties archivio di file gli stessi valori nel file diant.properties, penso che dovrete fare i nomi più semplici, come keyAlias per esempio. Basta rimuovere i punti per essere sicuro.

poi nella vostra build.gradle file di fare qualcosa di simile:

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

Facendo in questo modo si dà la flessibilità di costruire su un computer che ha le gradle.properties file o meno. La proprietà "keyalias" viene letta solo se esiste, quindi il codice non fallisce se non c'è.

Se tutte le proprietà sono presenti, signingConfigs.release sarà completamente configurato e verrà utilizzato per firmare l'apk durante la creazione. Se non è presente, l'APK verrà creato ma non firmato.

+0

grazie, l'ho risolto. –

+0

Hai ancora problemi? Tieni presente che l'ordine dell'aspetto è importante, consulta http://stackoverflow.com/a/22791482/190599 – CodeReaper

22

Sono stato in grado di farlo con il seguente. Ho provato la soluzione di @ Xav, ma si lamentava durante la fase di convalida del rilascio, se non avessi impostato le proprietà. Sono sicuro che questo è un cambiamento recente a causa del fatto che il framework cambia molto. Volevo solo aiutare sottolineando che con lo else alla fine, ero in grado di forzare il rilascio signingConfig a null. Ora i rilasci sia firmati che non firmati avvengono in base alla presenza di 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 
} 

Alcune altre note utili, si può mettere le gradle.properties in ~/.gradle/se non si vuole che si siede nella cartella del progetto. Inoltre è possibile impostare la proprietà storeFile con un percorso assoluto come questo: storePath=file:///Users/nick/Dropbox/mycompany.keystore

3

Gradle 1.9 non consente di definire le proprietà. Puoi aggiungerli solo per ext adesso. Piccola aggiunta alle risposte precedenti:

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

Ispirato alla soluzione di Eugens, ho trovato una variante leggermente più breve. Il codice deve essere nella configurazione dell'attività di Android {}.

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

Breve, utile e funziona. Grazie – Meanman

0

miei requisiti erano che chiunque, senza la chiavi dovrebbe essere in grado di costruire in modo corretto. Questo è il modo più pulito che ho trovato:

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

quale file gradle? quello nella cartella Cordova? quello che vedo in Android è "file generato" non modificare. – FlavorScape

Problemi correlati