2016-03-14 6 views
5

Ich möchte meinen Keystore außerhalb das Projektverzeichnis speichern. Ich will nicht, Dateipfade speichern innerhalb des Repository, damit ich die Werte delegiert gradle Variablen in ~/.gradle/gradle.properties aneignen ich nicht gradle bekommen können einen absoluten Pfad zu akzeptieren, wie: /Users/username/.gradle/keystores/project/release.key oder ~/.gradle/keystores/project/release.keyGradle absoluten Pfadwert für eine Keystore-Datei

Ich habe versucht: storeFile file(RELEASE_STORE_FILE) und storeFile new File(RELEASE_STORE_FILE)

keiner von ihnen scheint aber zu funktionieren.

Wie kann ich einen absoluten Pfadwert an die Keystore-Datei über RELEASE_STORE_FILE Variable übergeben?

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

und die ~/.gradle/gradle.properties Datei:

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

Kurz gesagt: Ich möchte einen absoluten Pfad Wert zu übergeben Gradle.

+0

Was meinen Sie, Sie können nicht groß werden, s Pfad zu akzeptieren? Was passiert, wenn du es tust? – RaGe

+0

Entschuldigung für die Verwirrung - es war wahrscheinlich mein Konfigurationsfehler. Am Ende habe ich eine andere interessante Lösung von Tim Rose benutzt. –

+0

Ich bin mir wirklich sicher, dass es den absoluten Pfad verwenden wird, wenn Sie 'storeFile file (RELEASE_STORE_FILE)' verwenden. Bitte stellen Sie sicher, dass Sie vor und nach dem Pfad kein doppeltes oder einzelnes Zitat hinzugefügt haben. – iForests

Antwort

1

Ich endete mit einer interessanten Lösung von this Website.

Die Idee besteht darin, Variablen in einem separaten Ordner zu speichern, der in einem Remote-Repository gespeichert ist.

In ~/.gradle/gradle.properties Datei setzen:

Keys.repo=/Users/username/.signing 

wo Keys.repo zur Remote-Repository der lokale Pfad ist.

später in /Users/username/.signing/YourProjectName.properties Sie haben:

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

Sie müssen speichern release.keystore Datei in /Users/username/.signing/YourProjectName/release.keystore Pfad

Die Konfiguration in der folgenden Art und Weise verwendet wird:

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

Ich habe um dies unter Verwendung eines Symlink

  1. symlink erstellen keystore.lnk im APP-Modul

    ln -s [path-to-Schlüsselspeicher] keystore.lnk

  2. Dann keystore.lnk in benutzen gradle.properties

    RELEASE_STORE_FILE keystore.lnk = (Verwenden Sie keine Anführungszeichen)

Jetzt Ihre Größe Anweisungen werden funktionieren.

0

Gefunden Lösung gibt: https://gist.github.com/gabrielemariotti/6856974

Kurz gesagt, sollten Sie Datei analysieren, die Pfad richtig Keys enthält. Ändern Sie die Größe Ihres Moduls mit den nächsten Zeilen. Erstens, das ist, wie signingConfigs erstellen, basierend auf keystore.properties Dateiinhalt:

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 
     } 
    } 
} 

Und dann signingConfig hinzufügen Ihre buildType Mitteilung:

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

Beispiel keystore.properties Datei für diese Lösung:

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

Dies hat für mich funktioniert (Android Studio 3.0.1, Gradle 4.1, Windows 10).

Verwandte Themen