2011-09-26 10 views
12

Ho un'applicazione Android che deve essere consegnata a più clienti. Per ogni cliente ho diversi file XML di grafica e configurazione che specificano funzionalità e URL.Configurazioni di build Android per più clienti

Al momento della compilazione dovremmo essere in grado di specificare il cliente per il quale l'applicazione deve essere costruita. Quindi le risorse (come le immagini e la configurazione di runtime) appropriate per il client specificato dovrebbero essere integrate nell'app.

Il progetto è stato creato con Maven.

Qualche idea?

risposta

14

Ho finito per utilizzare i profili Maven e le proprietà 'renameManifestPackage' e 'resourceOverlayDirectory' del plug-in Android di Maven.

La risorsa/directory predefinita è sovrascritta da 'resourceOverlayDirectory' specifica per ogni cliente.

Ha funzionato alla grande.

<!-- 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> 

e nella build che ho:

<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

esegue questa copia sopra la cartella 'res', oppure sono tutti copiati nella cartella' target'? –

+0

Grande. Hai problemi durante il tentativo di installare due applicazioni sullo stesso dispositivo? –

+0

@EugenMartynov no, i nomi dei pacchetti sono diversi. – peceps

2

Non so quanto questo sia supportato per i progetti Android, ma il modo usuale è definire un profilo per ogni cliente. In ogni profilo è necessario sovrascrivere le directory delle risorse pertinenti con quelle del cliente specificato.

+0

Sì, questo è il modo solito, ma perché le risorse Android sono collegate in modo statico non può essere fatto così facile. – peceps

+1

Quindi si esegue l'override dell'intero passaggio di "collegamento". Alla fine chiama solo aapt su un mucchio di file, quindi dovrebbe essere possibile. In caso contrario, ci sono sempre progetti di libreria per Eclipse o Ant. Controlla come lo fanno in Ant, dovrebbe darti qualche idea. –

+0

Ho finito per usare i profili Maven. Grazie. – peceps

Problemi correlati