9

In Gradle per Android sembra essere comuni pratica per definire la configurazione della firma per il rilascio a costruire in questo modo:Android Gradle - carico firma di configurazione da file esterno

android { 
    signingConfigs { 
     debug { 
      storeFile file("debug.keystore") 
     } 

     myConfig { 
      storeFile file("other.keystore") 
      storePassword "android" 
      keyAlias "androiddebugkey" 
      keyPassword "android" 
     } 
    } 

    buildTypes { 
     foo { 
      debuggable true 
      jniDebugBuild true 
      signingConfig signingConfigs.myConfig 
     } 
    } 
} 

Cosa è, voglio mantenere la mia build. file gradle nel controllo della versione e non ha la sensazione di avere la password per il mio keystore (che è lo stesso che uso per altre cose, stupido, lo so) su alcuni server git.

C'è un modo per caricare signingConfig da un file esterno da qualche parte sul mio disco rigido?

+0

L'ultima volta che ho controllato, questo non era possibile , che ha reso gradle inutilizzabile per molti progetti per me. Spero che abbiano finalmente implementato questa funzione ... – tknell

risposta

21

Io uso qualcosa di simile.

Ho un signing.properties nella cartella principale dell'app.

STORE_FILE=xxxx 
STORE_PASSWORD=xxx 
KEY_ALIAS=xxx 
KEY_PASSWORD=xxx 

Questo file non è in sotto controllo di versione. Ovviamente è possibile cambiare cartella.

Poi, nel tuo build.gradle si può usare qualcosa di simile:

android { 

     signingConfigs { 
      release 
     } 

     buildTypes { 
       release { 
        signingConfig signingConfigs.release 
       }  
     } 
    } 

    def Properties props = new Properties() 
    def propFile = file('../signing.properties') 
    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 { 
      android.buildTypes.release.signingConfig = null 
     } 
    }else { 
     android.buildTypes.release.signingConfig = null 
    } 

Se si modifica la cartella, è necessario modificare questa riga:

def propFile = file('../signing.properties') 
+0

Sto provando lo stesso, ma invece di codificare a fatica il percorso che sto seguendo da 'local.properties' può leggere il file ma mostra' Errore: (33, 0) Codifica \ uxxxx non corretta. Nella riga 'properties.load (new FileInputStream (propFile))' Ho persino codificato il percorso e provato, ma inutilmente. Qualsiasi aiuto? –