fromhtml example android

example - Automatización para la compilación de Android



html fromhtml android example (5)

Tengo diez proyectos de Android en una carpeta. Para cada proyecto, puedo usar ant debug para construirlo. Por lo tanto, no es un problema escribir un script simple para compilar todos estos proyectos. Uso Hudson para construir estos proyectos diariamente, y funciona bien.

Pero ahora nuestro proyecto necesita ir a la fase de lanzamiento. Así que el comando compilar se convierte en ant release . Para compilar un proyecto de lanzamiento, tengo que ingresar la contraseña del certificado cada vez que se realiza la compilación. Así que no puedo hacer la automatización para el lanzamiento.

Este trabajo de compilación me mata, ya que tengo diez proyectos que deben interactuar con la introducción de la contraseña.

¿Cómo puedo hacer que la versión de lanzamiento sea automática?


Eche un vistazo a this artículo, especialmente cuando comienza a mencionar key.store.password . Lo he usado sin problemas.

Básicamente, debe crear un archivo secure.properties local para su máquina (compilación), que debe mantenerse relativamente seguro, por ejemplo, no accesible para todos o no almacenado para todos en el control de código fuente. Ese archivo almacena las contraseñas como propiedades con los nombres correctos, y se importa al archivo de compilación ANT del proyecto.


Puede definir su configuración de almacén de claves en su project.properties en su carpeta de proyecto. Como esta

key.store = / path / to / your / keystore

key.alias = yourkeyalias

key.store.password = yourkeystorepassword

key.alias.password = yourkeyaliaspassword


Solo una nota ... No quería establecer las contraseñas en un archivo de propiedades y, de forma predeterminada, su contraseña se reflejará en la línea de comandos, lo que también es una preocupación. Agregar el uso de SecureInputHandler a tu main_rules.xml funciona para que tu contraseña no esté expuesta en la línea de comandos.

<target name="-release-prompt-for-password" if="has.keystore" unless="has.password"> <!-- Gets passwords --> <input message="Please enter keystore password (store:${key.store}):" addproperty="key.store.password" > <handler classname="org.apache.tools.ant.input.SecureInputHandler" /> </input> <input message="Please enter password for alias ''${key.alias}'':" addproperty="key.alias.password" > <handler classname="org.apache.tools.ant.input.SecureInputHandler" /> </input> </target>


Suponiendo que está utilizando herramientas recientes de Android, digamos v9 o v10.

Si observa tools/ant/main_rules.xml en el directorio del SDK de Android:

<!-- called through target ''release''. Only executed if the keystore and key alias are known but not their password. --> <target name="-release-prompt-for-password" if="has.keystore" unless="has.password"> <!-- Gets passwords --> <input message="Please enter keystore password (store:${key.store}):" addproperty="key.store.password" /> <input message="Please enter password for alias ''${key.alias}'':" addproperty="key.alias.password" /> </target> <!-- called through target ''release''. Only executed if there''s no keystore/key alias set --> <target name="-release-nosign" unless="has.keystore"> <echo>No key.store and key.alias properties found in build.properties.</echo> <echo>Please sign ${out.unsigned.file} manually</echo> <echo>and run zipalign from the Android SDK tools.</echo> </target>

Buscando en el archivo XML para has.keystore revela:

<!-- properties for signing in release mode --> <condition property="has.keystore"> <and> <isset property="key.store" /> <length string="${key.store}" when="greater" length="0" /> <isset property="key.alias" /> </and> </condition> <condition property="has.password"> <and> <isset property="has.keystore" /> <isset property="key.store.password" /> <isset property="key.alias.password" /> </and> </condition>

Así que asumo que tiene que pasar cuatro definiciones al build.xml: key.store , key.alias , key.store.password , key.alias.password .

Y recuerde no pasar esas definiciones en la línea de comandos por razones de seguridad. :)


Construcciones basadas en Gradle

1) Cree un archivo secure.properties para contener sus contraseñas:

key.store.password=<your keystore password> key.alias.password=<your alias password>

Probablemente no lo quiera bajo el control de versiones, por lo que estamos colocando las contraseñas en un archivo *.properties separado. Si no le importa tener sus contraseñas bajo el control de versiones, puede ingresar sus contraseñas directamente en build.gradle , pero eso no es recomendable, así que no lo estoy mostrando directamente.

2) Configure su build.gradle siguiente manera:

Properties secureProperties = new Properties() secureProperties.load(new FileInputStream("secure.properties")) android { signingConfigs { release { storeFile file("<path to your keystore>") storePassword secureProperties[''key.store.password''] keyAlias "<alias name>" keyPassword secureProperties[''key.alias.password''] } } buildTypes { release { signingConfig signingConfigs.release } } }

Y eso es. ./gradlew assembleRelease ahora ./gradlew assembleRelease y firma mi APK sin ./gradlew assembleRelease mi contraseña.

Construcciones basadas en hormigas

1) Cree un archivo secure.properties para contener sus contraseñas:

key.store.password=<your keystore password> key.alias.password=<your alias password>

Probablemente no lo quiera bajo el control de versiones, por lo que no estamos colocando las contraseñas en uno de los archivos *.properties existentes. Si no le importa tener sus contraseñas bajo el control de versiones, coloque estas dos líneas en ant.properties y listo.

2) Cree un archivo custom_rules.xml para informar al sistema de compilación sobre su archivo secure.properties .

<?xml version="1.0" encoding="UTF-8"?> <project name="custom_rules" default="help"> <property file="secure.properties" /> </project>

No estoy familiarizado con este sistema de compilación, por lo que no estoy seguro sobre el name del elemento del project o las propiedades default , pero creo que lo que elegí debería funcionar para todos.

2b) Cualquier versión reciente de las herramientas del SDK de Android debería ser buena, pero si por alguna razón su archivo build.xml no contiene lo siguiente, debe agregarlo:

<import file="custom_rules.xml" optional="true" />

Y eso debería ser. ant release ahora compila y firma mi APK sin pedir mi contraseña.