2010-07-16 13 views
11

Tengo una aplicación de Android que distribuyo a diferentes proveedores del mercado; la aplicación es funcionalmente la misma para cada uno, pero requiere ciertos parámetros de configuración distintos. Idealmente, me gustaría producir todos los APK individuales en un solo paso de compilación. ¿Hay una manera "oficial" de lograr esto?¿Cómo inyectas la configuración específica de construcción en un APK?

Estoy considerando un enfoque en el que tengo un archivo de plantilla en la estructura del proyecto, y en tiempo de compilación uso para interpolar valores en un archivo de salida como res/xml/config.xml.

¡Gracias de antemano!

Respuesta

0

Uso un script ant, que lee algunos parámetros de compilación y genera el APK adecuado para mí (appname-1.1_ggl, appname-1.1_amz.apk que contiene enlaces a Google Market o Amazon Market, respectivamente) . Manualmente ejecutarlo dos veces no es gran cosa.

Puede que no sea realista, dependiendo de la cantidad de permutaciones que tenga (no lo mencione), pero podría usar subant. Usando un buildpath diferente y build.properties subsiguiente para cada permutación que necesita llamar.

1

Puede configurar una compilación basada en el complemento Maven Android para su apk que utiliza filtrado de recursos y perfiles para sus diferentes configuraciones. Consulte el ejemplo de morseflash del proyecto de muestras oficiales para ver cómo se hace todo en detalle.

Una vez que haya configurado los perfiles, puede usar el complemento maven invoker para ejecutarlo todo en un solo barrido. Y si quiere tenerlo automatizado, simplemente coloque la construcción en Hudson.

http://code.google.com/p/maven-android-plugin/

http://code.google.com/p/maven-android-plugin/wiki/Samples

http://www.simpligility.com/2010/11/release-version-management-for-your-android-application/

0

utilizo un proyecto de biblioteca que tiene toda la dos (o más) proyectos que hacen referencia a la biblioteca de código y.

El proyecto de biblioteca tiene un archivo de recursos llamado config.xml en su carpeta res y este archivo se reemplaza en los otros proyectos. de esa manera puedo tener diferentes configuraciones de aplicaciones y cada compilación tiene su propio manifest.xml por lo que realmente puede configurar las cosas de manera diferente para cada tipo de compilación.

Esto también le permite tener código específico/permisos/... que solo es requerido por una compilación específica y hace que el proceso de compilación sea muy fácil.

3

Hay un par de maneras de abordar esto:

1) instalación de una aplicación Android Biblioteca (diseñado para Eclipse)

Este es el método sugerido en la documentación de Android. Con este método, configuraría su aplicación como "Library Project".

Luego, para cada compilación específica que desee producir, configuraría un nuevo proyecto de Android que references el Proyecto de biblioteca creado anteriormente. Este proyecto necesitaría tener su propio AndroidManifest que declare los componentes utilizados desde la aplicación de la biblioteca. Como cada aplicación tiene su propio manifiesto, se puede hacer casi cualquier tipo de personalización intercambiando componentes o cambiando la información.Sin embargo, si bien permite diferencias complejas, esto crea cierta redundancia en el mantenimiento si hay pocas diferencias.

2) incorporado un script ANT u otra escritura de la estructura para manipular la configuración

un script Ant podría en tiempo de compilación manipular las fuentes o archivos XML para permitir la configuración personalizada. La forma más fácil de hacerlo sería utilizar el unix sed o un script de python/ruby ​​para realizar la personalización. Esto es ideal cuando la personalización se limita a pequeños cambios y/o solo reemplazos de texto. Esta es mi ruta de elección en la mayoría de los casos.

Recomiendo copiar el árbol de fuentes a un directorio temporal antes de realizar las manipulaciones de modo que se pueda borrar en una "limpieza de hormigas" y no afecte la copia de trabajo de la fuente. Una advertencia con esto es que diseñaría las modificaciones de modo que la fuente siga construyendo sin ejecutar el script (es decir, puede hacer construcciones estándar mientras se desarrolla en eclipse o en cualquier otro entorno sin necesidad de ejecutar el script especial).

Cuestiones relacionadas