2011-09-26 11 views
12

Tengo una aplicación de Android que debe entregarse a varios clientes. Para cada cliente, tengo diferentes gráficos y archivos XML de configuración que especifican características y URL.Configuraciones de compilación de Android para clientes múltiples

En tiempo de compilación, deberíamos poder especificar el cliente para el que se debe construir la aplicación. Luego, los recursos (como imágenes y configuración en tiempo de ejecución) apropiados para el cliente especificado deberían integrarse en la aplicación.

El proyecto está construido con Maven.

¿Alguna idea?

Respuesta

14

Terminé utilizando los perfiles maven y las propiedades 'renameManifestPackage' y 'resourceOverlayDirectory' del complemento android maven.

El res/dir por defecto es reemplazado por 'resourceOverlayDirector' específico para cada cliente.

Funcionó muy bien.

<!-- profile for zurich --> 
<profile> 
    <id>zurich</id> 
    <properties> 
    <customer>zurich</customer> 
    <customerPackage>zurich.com</customerPackage> 
    <customerResources>customers/${customer}/res</customerResources> 
    <customerApkName>${customer}-${project.artifactId}</customerApkName> 
    </properties> 
</profile> 

y en la construcción que tienen:

<build> 
    <sourceDirectory>src</sourceDirectory> 

    <!-- the name of the generated apk and jar --> 
    <finalName>${customerApkName}-${project.version}</finalName> 

    <pluginManagement> 

    <plugins> 

    <!-- customer specific manifest and package --> 
    <plugin> 
    <groupId>com.jayway.maven.plugins.android.generation2</groupId> 
    <artifactId>maven-android-plugin</artifactId> 
    <configuration> 
     <renameManifestPackage>${customerPackage}</renameManifestPackage> 
     <resourceOverlayDirectory>${customerResources}</resourceOverlayDirectory> 
    </configuration> 
    </plugin> 

    </plugins> 

    </pluginManagement> 
+0

¿esto se copia sobre la carpeta real 'res', o todos se copian en la carpeta 'target'? –

+0

Genial. ¿Tiene problemas al intentar instalar dos aplicaciones en el mismo dispositivo? –

+0

@EugenMartynov no, los nombres de los paquetes son diferentes. – peceps

2

No sé qué tan bien esto es compatible con los proyectos de Android, pero la forma habitual es definir un perfil para cada cliente. En cada perfil, debe anular los directorios de recursos relevantes con los del cliente especificado.

+0

Sí, esa es la forma habitual, pero debido a los recursos de Android están enlazados estáticamente no se puede hacer así de fácil. – peceps

+1

Luego, anula todo el paso 'vincular'. Al final solo llama aapt en un montón de archivos, por lo que debería ser posible. Si no, siempre hay proyectos de biblioteca para Eclipse o Ant. Compruebe cómo lo hacen en Ant, debe darle algunas ideas. –

+0

Terminé usando perfiles maven. Gracias. – peceps

Cuestiones relacionadas