Gradle Android Studio firma con un archivo de propiedades

Estoy intentando firmar mi aplicación con el archivo de compilación gradle. Cuando utilizo el signo signatureConfigs funciona (signedConfigs.release)! Pero si estoy tratando de leer las propiedades del archivo de propiedades no funcionará. (SigningConfigs.config)

Properties props = new Properties(); props.load(new FileInputStream(file(rootProject.file("signing.properties")))) android { signingConfigs { config { storeFile file(props["storeFile"]) storePassword props["storePassword"] keyAlias props["keyAlias"] keyPassword props["KeyPassword"] } release { storeFile file("..\\xyz.jks") storePassword "****" keyAlias "****" keyPassword "****" } } . . . buildTypes { release { runProguard false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' signingConfig signingConfigs.release } debug { applicationIdSuffix '.debug' versionNameSuffix '-SNAPSHOT' } } 

Archivo de propiedades:

 storeFile=xyz.jks storePassword=xyz keyAlias=xyz keyPassword=xyz 

Cuando ejecuto el proyecto, los estudios de android muestran un diálogo que dice:

Xyz.apk no está firmado. Configure la información de firma para el sabor seleccionado mediante el cuadro de diálogo Estructura del proyecto.

El archivo de propiedades se lee correctamente porque puedo registrar algunas propiedades del archivo lanzar la consola.

Algunos de los detalles de mi sistema:

Android Studio 0.8.6 Windows 8.1 x64 gradle 1.12

Espero que alguien me pueda ayudar. Si quieres saber más detalles, entonces pregúntame.

4 Solutions collect form web for “Gradle Android Studio firma con un archivo de propiedades”

Esto es lo que hago y funciona para mí:

 signingConfigs { release { def Properties localProps = new Properties() localProps.load(new FileInputStream(file('../local.properties'))) def Properties keyProps = new Properties() assert localProps['keystore.props.file']; keyProps.load(new FileInputStream(file(localProps['keystore.props.file']))) storeFile file(keyProps["store"]) keyAlias keyProps["alias"] storePassword keyProps["storePass"] keyPassword keyProps["pass"] } } 

Mi archivo local.properties contiene una ruta de acceso a un archivo "keystore.properties". Que contiene mi información sobre el keystore:

 store=*** alias=*** pass=*** storePass=*** 

Tal vez la carga de dos Propreties archivo es redundante, pero funciona para mí.

¡Encontré el error !!! El problema era sensible a mayúsculas y minúsculas. yo escribo

KeyPassword props ["KeyPassword"]

Pero el archivo contiene solamente

Palabra clave

¿Por qué gradle no me lo dice?

He aquí un paso a paso completo que tomé para usar un archivo de propiedades para mover ambas de mis claves fuera del archivo gradle.build en un archivo que no se incluirá en ninguna compilación o commit de repositorio.

1) Cree un gradle.properties (si no tiene uno).

La ubicación de este archivo depende de su sistema operativo:

  /home/<username>/.gradle/ (Linux) /Users/<username>/.gradle/ (Mac) C:\Users\<username>\.gradle (Windows) 

2) Agregue una entrada que apunte al archivo yourprojectname.properties . (Ejemplo para Windows)

 yourprojectname.properties=c:\\Users\\<username>\\signing\\yourprojectname.properties 

3) Cree el archivo yourprojectname.properties en la ubicación que especificó en el Paso 2 con la siguiente información:

 keystore=C:\\path\\to\\keystore\\yourapps.keystore keystore.password=your_secret_password 

4) Modifique su archivo gradle.build para que apunte al archivo yourprojectname.properties para usar las variables.

 if(project.hasProperty("yourprojectname.properties") && new File(project.property("yourprojectname.properties")).exists()) { Properties props = new Properties() props.load(new FileInputStream(file(project.property("yourprojectname.properties")))) android { signingConfigs { release { keyAlias 'release' keyPassword props['keystore.password'] storeFile file(props['keystore']) storePassword props['keystore.password'] } debug { keyAlias 'debug' keyPassword props['keystore.password'] storeFile file(props['keystore']) storePassword props['keystore.password'] } } compileSdkVersion 19 buildToolsVersion "20.0.0" defaultConfig { applicationId "your.project.app" minSdkVersion 16 targetSdkVersion 17 } buildTypes { release { } } } } dependencies { ... } 

5) Disfrute! Ahora todas tus claves estarán fuera de la raíz del directorio y todavía tienes las alegrías de la automatización para cada compilación.

Si obtiene un error en su archivo gradle.build sobre la variable "props", es porque no está ejecutando el bloque "android {}" dentro de la primera condición if donde se asigna la variable props , así que mueva todo el android {. ..} en la condición en la que está asignada la variable props y vuelva a intentarlo.

Reuní estos pasos juntos de la información encontrada aquí y aquí .

Una alternativa a las variables de malabares es incluir / aplicar un archivo gradle que contenga las configuraciones de firma.

Así que en su build.gradle

 android { // the part to include if (project.hasProperty("yourproject.signing") && new File(project.property("yourproject.signing")).exists()) { println 'apply yourproject signing property'; apply from: project.property("yourproject.signing"); } else { println 'no yourproject signing property'; } // the rest of the usual stuff compileSdkVersion etc. 

En el directorio .gradle (depende del sistema operativo donde esté) agregue un archivo gradle.properties o, si existe, agregue la línea siguiente

 yourproject.signing=*the full path to your magic file*signing.gradle 

En el archivo apuntado por la entrada anterior, incluye las configuraciones de firma como lo haría en el archivo build.gradle

 android { signingConfigs { release { keyAlias '*your release key alias*' keyPassword '*your key password*' storeFile file('*the full path to your keystore file*.jks') storePassword '*your keystore password*' } } } 

Sí, el envoltorio extra android tiene que estar allí. La ventaja es que lo anterior es un archivo gradle regular, por lo que puede hacer toda la magia que desee allí.

Agregue más signaturaConfigura según sea necesario, utilice la forma habitual, por ejemplo

 signingConfig signingConfigs.release 
  • AndroidManifest.xml para Gradle instrumentTest
  • Android ZIPALIGN finalizado con valor de salida distinto de cero -1
  • Gradle Javadoc tarea sin advertencias
  • No se pudieron determinar las dependencias para todas las tareas con robolectric gradle plugin
  • NoClassDefFoundError en Runtime en clase dentro de .AAR en Android Studio
  • Especificar firma de configuración para Gradle y Cordova 5
  • File: /// android_res / drawable no funciona cuando se usa sabor con otro nombre de paquete
  • Gradle Android plugin generar archivos R para diferentes sabores de productos?
  • Diferentes nombres de aplicación para diferentes sabores de creación?
  • Separar las pruebas de integración de las pruebas unitarias en Android Studio
  • Android apk - Cómo excluir un archivo .so de una dependencia de terceros utilizando gradle
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.