2016-03-14 9 views
5

Vorrei salvare il mio keystore all'esterno della directory di progetto. Non voglio per memorizzare filepaths all'interno del repository così ho delegato i valori di appropriarsi variabili Gradle in ~/.gradle/gradle.properties Non riesco Gradle di accettare un percorso assoluto come: /Users/username/.gradle/keystores/project/release.key o ~/.gradle/keystores/project/release.keygradle imposta il valore assoluto del percorso per un file di keystore

ho provato: storeFile file(RELEASE_STORE_FILE) e storeFile new File(RELEASE_STORE_FILE)

nessuno di loro sembra funzionare, però.

Come posso passare un valore assoluto del percorso al file del keystore tramite la variabile RELEASE_STORE_FILE?

android { 
    signingConfigs { 
     release { 
      storeFile file(RELEASE_STORE_FILE) 
      storePassword RELEASE_STORE_PASS 
      keyAlias RELEASE_ALIAS 
      keyPassword RELEASE_KEY_PASS 
     } 
    } 
} 

e il file ~/.gradle/gradle.properties:

RELEASE_STORE_FILE=/Users/username/.gradle/keystores/project/release.key 
RELEASE_STORE_PASS=****** 
RELEASE_ALIAS=****** 
RELEASE_KEY_PASS=****** 

In breve: voglio passare un valore percorso assoluto per Gradle.

+0

Che cosa vuoi dire che non puoi ottenere gradle per accettare il percorso s? Cosa succede quando lo fai? – RaGe

+0

scusa per la confusione - è stato probabilmente il mio errore di configurazione. Ho finito per usare un'altra soluzione interessante di Tim Rose. –

+0

Sono davvero sicuro che userà il percorso assoluto se si usa il file 'storeFile (RELEASE_STORE_FILE)'. Assicurati di non aver aggiunto una virgoletta o una virgoletta singola prima e dopo il percorso. – iForests

risposta

1

Ho finito per utilizzare una soluzione interessante dal sito this.

L'idea è di mantenere le variabili in una cartella separata che è memorizzata su un repository remoto.

In ~/.gradle/gradle.properties file che si mettono:

Keys.repo=/Users/username/.signing 

dove Keys.repo è il percorso locale al repository remoto.

Più tardi nel /Users/username/.signing/YourProjectName.properties avete:

RELEASE_STORE_FILE=/YourProjectName/release.keystore //in fact it's a relative path 
RELEASE_STORE_PASS=xxxxx 
RELEASE_ALIAS=xxxxx 
RELEASE_KEY_PASS=xxxxx 

è necessario memorizzare release.keystore file in /Users/username/.signing/YourProjectName/release.keystore percorso

La configurazione è utilizzata nel modo seguente:

android { 
    signingConfigs { 
     debug { /* no changes - usual config style */ } 
     release { 
      if (project.hasProperty("Keys.repo")) { 
       def projectPropsFile = file(project.property("Keys.repo") + "/YourProjectName.properties") 
       if (projectPropsFile.exists()) { 
        Properties props = new Properties() 
        props.load(new FileInputStream(projectPropsFile)) 

        storeFile file(file(project.property("Keys.repo") + props['RELEASE_STORE_FILE'])) 
        storePassword props['RELEASE_STORE_PASS'] 
        keyAlias props['RELEASE_ALIAS'] 
        keyPassword props['RELEASE_KEY_PASS'] 
       } 
      } else { 
       println "=======================================================" 
       println "[ERROR] - Please configure release-compilation environment - e.g. in ~/.signing directory" 
       println "=======================================================" 
      } 
     } 
    } 
} 
2

ho ottenuto intorno questo utilizzando un symlink

  1. Creare link simbolico keystore.lnk nel modulo di applicazione

    ln -s [path-to-chiavi] keystore.lnk

  2. Quindi utilizzare keystore.lnk in gradle.properties

    RELEASE_STORE_FILE = keystore.lnk (non utilizzare le virgolette)

Ora il tuo gradle le istruzioni funzioneranno.

0

soluzione trovata lì: https://gist.github.com/gabrielemariotti/6856974

In breve, si dovrebbe analizzare il file che contiene il percorso a Keystore correttamente. Modifica il gradle del tuo modulo con le righe successive. In primo luogo, questo è come creare signingConfigs in base al contenuto del file keystore.properties:

signingConfigs 
    { 
     release 
     { 
      def Properties props = new Properties() 
      def propFile = new File('path/to/your/keystore.properties') //absolute path to keystore.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 
      { 
       println 'keystore.properties found but some entries are missing' 
       android.buildTypes.release.signingConfig = null 
      } 
     } 
     else 
     { 
      println 'keystore.properties not found' 
      android.buildTypes.release.signingConfig = null 
     } 
    } 
} 

e quindi aggiungere signingConfig al tuo rilasciare buildtype:

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

Esempio di file keystore.properties per questa soluzione:

STORE_FILE=absolute//path//to//store 
STORE_PASSWORD=yourPass 
KEY_PASSWORD=keysPass 
KEY_ALIAS=aliasName 

Questo ha funzionato per me (Android Studio 3.0.1, Gradle 4.1, Windows 10).

Problemi correlati