Gradle define el valor de la ruta absoluta para un archivo de almacén de claves

Me gustaría guardar mi almacén de claves fuera del directorio del proyecto. No quiero almacenar caminos de archivos dentro del repositorio así que delegé los valores a las variables gradle apropiadas en ~/.gradle/gradle.properties No puedo conseguir gradle para aceptar una ruta absoluta como: /Users/username/.gradle/keystores/project/release.key o ~/.gradle/keystores/project/release.key

He intentado: storeFile file(RELEASE_STORE_FILE) y storeFile new File(RELEASE_STORE_FILE)

Ninguno de ellos parece funcionar, sin embargo.

¿Cómo puedo pasar un valor de ruta absoluta al archivo del almacén de claves a través de la variable RELEASE_STORE_FILE ?

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

Y el archivo ~/.gradle/gradle.properties :

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

En resumen: Quiero pasar un valor de trayectoria absoluta al gradle.

Terminé usando una solución interesante de este sitio.

La idea es mantener variables en una carpeta separada que se almacena en un repositorio remoto .

En el archivo ~/.gradle/gradle.properties se coloca:

 Keys.repo=/Users/username/.signing 

Donde Keys.repo es la ruta local a su repositorio remoto.

Más adelante en /Users/username/.signing/YourProjectName.properties tienes:

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

Necesita almacenar el archivo /Users/username/.signing/YourProjectName/release.keystore en la ruta /Users/username/.signing/YourProjectName/release.keystore

La configuración se utiliza de la siguiente manera:

 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 - eg in ~/.signing directory" println "=======================================================" } } } } 

Conseguí alrededor de esto usando un enlace simbólico

  1. Crear keylink.lnk de enlace simbólico en el módulo de aplicación

    Ln -s [path-to-keystore] keystore.lnk

  2. Luego use keystore.lnk en gradle.properties

    RELEASE_STORE_FILE = keystore.lnk (no use comillas)

Ahora las instrucciones de gradle funcionarán.

  • gradle: ejecuta código dependiendo del tipo de construcción (o variante)
  • Gradle buildType / productFlavor utilizando inesperado buildConfigField
  • Agregue dependencia de tareas a la tarea de complemento existente en Gradle?
  • Gradle no genera una cadena con comillas
  • Utilizar JSON para crear un objeto en Groovy / Grails
  • Grails C2DM - Android
  • Groovy Android y libgdx
  • Depuración de archivos de compilación de Gradle en Intellij / Android Studio
  • Tarea personalizada de Android Gradle por variante
  • Resolver Etiqueta de aplicación para cada tipo de compilación
  • Ejecución de scripts de Groovy incrustados en Java en tiempo de ejecución para Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.