2012-07-02 14 views
8

Continuo a tornare a questo problema, poiché non sembra esserci una soluzione pulita. Qualcuno ha una buona strategia per escludere le risorse da un progetto figlio in Android?Inclusione/esclusione di risorse condizionali per Android apk build

Ho due scenari:

1 - progetto di libreria di base ha file di localizzazione per en, es, ecc

progetto --Child 1 utilizza tutte le localizzazioni, e tutto è buono

- -Il progetto figlio 2 è localizzato solo in inglese, ma il file .apk finale avrebbe una localizzazione parziale a causa delle risorse padre (anche se ADT19 o così ha aggiunto regole Lint per avvisare/impedire di farlo).

L'unica soluzione che ho in questo momento è quello di avere una libreria genitore separato per la localizzazione, e solo includerla nel progetto figlio 1. Questo è un grande dolore se hai un sacco di progetti di libreria.

2 - Esclusione di risorse specifiche della build. Ho alcune immagini che sono necessarie solo per le mie build Nook specifiche delle mie app, che sono attivate da una bandiera. Il codice condizionale funziona alla grande, ma le risorse sono sempre incluse.

Preferirei non creare ancora un altro progetto figlio per OGNI delle mie app. C'è un modo per impostare un flag di compilazione/compilazione per potare le risorse immagine specifiche in modo che non entrino nel .apk finale?

Il secondo problema potrebbe essere specifico per me, ma sono sorpreso che non riesca a trovare una buona discussione sul primo punto. Non ci sono altri sviluppatori che localizzano solo alcune app? O la maggior parte della gente sta semplicemente ignorando il problema?

+0

Ho visto parlare di aggiungere file a un.apk, ma sto cercando qualcosa di un po 'più simile a ProGuard - automatico e integrato negli strumenti piuttosto che hackerare l'apk finale. – ProjectJourneyman

+0

I tuoi scenari sono fattibili usando strumenti di build esterni come Ant o Maven, entrambi forniscono capacità di controllare ogni singolo passaggio durante il processo di compilazione (compilazione, dex, packaging e così via). se si utilizza Maven, l'esclusione delle risorse è piuttosto semplice tramite [maven-resource-plugin] (http://maven.apache.org/plugins/maven-resources-plugin/resources-mojo.html). – yorkw

+0

Potrei aver bisogno di andare in quel modo. Speravo in una soluzione più pulita (e idealmente più semplice), però. – ProjectJourneyman

risposta

3

1 - progetto di libreria di base ha file di localizzazione per en, es, ecc

Hai due progetti che utilizzano questa libreria, e solo uno di loro ha bisogno di tutte le traduzioni. Quindi, quelle traduzioni potrebbero essere nel progetto usando la libreria e necessitando delle traduzioni, non nella libreria stessa. Questo non è diverso da qualsiasi altro progetto che personalizza le risorse di una libreria (ad esempio, sostituendo le icone, sostituendo i layout).

Ora, una volta che inizi a entrare in mix più complicati (ad esempio, due progetti necessitano delle traduzioni e un terzo no), allora inizi a incorrere in problemi.

Esclusione di risorse specifiche della build. Ho alcune immagini che sono necessarie solo per le mie build Nook specifiche delle mie app, che sono attivate da una bandiera. Il codice condizionale funziona alla grande, ma le risorse sono sempre incluse.

Xav e ho chiacchierato un po 'di risorse condizionali in this issue. Il suo focus è sul debug rispetto alla produzione (risorsa equivalente a BuildConfig.DEBUG), ma sembra che qualcosa di più flessibile sia una possibilità.

Entrambe queste cose possono essere gestite da uno script di build di rilascio personalizzato. Nelle normali build di debug, lasceresti tutto da solo; in una build di produzione, fare in modo che uno script Ant esegua una copia del progetto, eliminando le directory non necessarie prima di compilare, firmare e firmare zip.

+0

Ecco cosa ho fatto per project3, che ha una traduzione una tantum in italiano (e quindi alcuni file string_libx.xml corrispondenti alle librerie padre). Il mio albero di librerie e app sta diventando sempre più complesso, e non mi piace aggiungere complessità (complessità di manutenzione dovuta a file di stringhe duplicati o complessità del workspace con LibX per dividere le risorse linguistiche). Penso che la scrittura possa essere sul muro - ho bisogno di scavare più a fondo negli strumenti e scrivere alcune azioni per potare l'output. – ProjectJourneyman

+0

Non ho ancora trovato il tempo di creare alcuni script Ant, ma sto iniziando a pensare che sia davvero la soluzione giusta. Poiché le mie esigenze diventano più complesse, non c'è alternativa alla flessibilità dei miei script. Non credo che il flag DEBUG offrirà abbastanza capacità di configurazione. Inoltre, se aspetto abbastanza a lungo, il nuovo sistema di build Android con Gradle sarà finalizzato e posso solo imparare che: http://tools.android.com/tech-docs/new-build-system – ProjectJourneyman

Problemi correlati