2013-04-17 6 views
6

Ho diversi progetti di applicazione che utilizzano un progetto di libreria comune. Recentemente ho provato a spostare alcune dichiarazioni di attività comuni da AndroidManifest.xml di ogni progetto di applicazione nel manifest della libreria e l'unione di manifest attivata con manifestmerger.enabled=true in project.properties.Proguard offusca i nomi delle attività in un manifest della libreria unita

Tutto funziona correttamente in una build di debug, ma i build di rilascio (offuscati da Proguard) non riescono con uno ActivityNotFoundException. Questo perché Proguard sta offuscando i nomi delle attività dichiarate nel manifest della libreria, ma non quelle nel manifest dell'applicazione.

Ho esaminato il file bin/AndroidManifest.xml unito per il progetto di applicazione e ha correttamente i nomi di attività elencati.

Qualcuno può suggerire una soluzione alternativa?

risposta

2

Il processo di generazione di form standard richiama lo strumento aapt per creare una configurazione di ProGuard (bin/proguard.txt) che conserva le classi necessarie (ad esempio tutte le attività che essa ritiene utilizzate). Se questo non funziona per la vostra struttura del progetto (forse un bug o un caso non supportato), è possibile conservare le classi voi stessi nel vostro Proguard-project.txt:

-keep public class * extends android.app.Activity 
-keep public class * extends android.app.Application 
-keep public class * extends android.app.Service 
-keep public class * extends android.content.BroadcastReceiver 
-keep public class * extends android.content.ContentProvider 

Se l'applicazione risultante è ancora mancante altre classi , è possibile trovare più configurazioni manuali nel manuale di ProGuard> Esempi>A complete Android application.

+0

@ Eric, penso che sia un bug nel sistema di compilazione (https://code.google.com/p/android/issues/detail?id=36077). Avete qualche soluzione o suggerimento? – user802421

+0

@ user802421 L'aggiunta esplicita delle righe di mantenimento sopra dovrebbe aggirarla. –

+0

@ Eric, aggiungendo esplicitamente ancora non ha funzionato. È stata mantenuta solo la definizione della classe nel manifesto del progetto apk. In questo momento ho bisogno di disattivare la fusione e copiare tutto dal progetto lib. :( – user802421