Ho un'applicazione che utilizza una libreria con riferimenti esterni (ovvero, la directory della libreria si trova nello stesso livello dell'applicazione - non è copiata all'interno della cartella dell'applicazione). La libreria fa riferimento all'applicazione e sia la libreria che l'applicazione includono i file proguard. Tutto funziona bene fino a quando non costruisco l'applicazione. Quando ho creato l'app, tutti i riferimenti alle classi definite nella libreria non sono stati trovati - ottengo errori "non riesco a trovare la classe di simboli ..." su tutte le importazioni di classi di libreria. Come ho scoperto, questo è dovuto al fatto che durante la ricostruzione dell'applicazione, proguard nasconde tutte le classi e le variabili e quindi l'applicazione non può fare riferimento a esse. Ho aggiunto il seguente al mio file build.gradle,Gestione proguard per Android Studio in progetti multi-libreria
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
}
debug {
minifyEnabled false
}
}
ma sembra che quando si costruisce l'applicazione, quanto sopra non viene preso in considerazione (o l'edificio è fatto in modalità di rilascio). Se cambio sopra di seguito (cioè disabilitare proguard in modalità di rilascio),
buildTypes {
release {
**minifyEnabled false**
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
}
debug {
minifyEnabled false
}
}
l'applicazione compila bene.
C'è una soluzione a questo? Posso abilitare proguard solo quando creo un'applicazione firmata?
Ecco il file Proguard libreria:
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-optimizations !method/marking/static
-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
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-keepclasseswithmembernames class * {
native <methods>;
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
-dontwarn **CompatHoneycomb
-keep class android.support.v4.** { *; }
-keep class * extends java.util.ListResourceBundle {
protected Object[][] getContents();
}
-keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable {
public static final *** NULL;
}
-keepnames @com.google.android.gms.common.annotation.KeepName class *
-keepclassmembernames class * {
@com.google.android.gms.common.annotation.KeepName *;
}
-keepnames class * implements android.os.Parcelable {
public static final ** CREATOR;
}
-keep class com.google.android.gms.** { *; }
-keep public class com.google.ads.** { public *; }
-keep public class com.google.gson.** { public protected *; }
-keep public class com.google.ads.internal.** {*;}
-keep public class com.google.ads.internal.AdWebView.** {*;}
-keep public class com.google.ads.internal.state.AdState {*;}
-keep public class com.google.ads.mediation.** { public *; }
-keep public class com.google.ads.searchads.** {*;}
-keep public class com.google.ads.util.** {*;}
-keep class com.google.ads.**
-dontwarn com.google.ads.**
-keepattributes *Annotation*
E 'un problema che sto utilizzando Proguard sia la biblioteca e l'applicazione?
OMG Ho la stessa situazione e ho perso una settimana intera cercando una soluzione. Mi sentivo così perso. Fino ad ora. Grazie mille! Grazie!! – Simon
Interessante - Ho importato un progetto da eclipse e ha portato in tutti i suoi progetti di libreria, ma non è riuscito a modificare i file build.gradle per specificare consumerProguardFiles. – Carl
Aggiungendo questo - proguard-project.txt di consumerProguardFiles - nel mio plug-in sperimentale mi viene restituito un "Sincronizzazione graduale non riuscita: Nessuna firma del metodo: org.gradle.model.ModelMap.consumerProguardFiles() è applicabile per i tipi di argomenti: (java.lang.String) valori: [proguard-project.txt] ". Hai un'idea del motivo per cui si lamenta? Grazie – Loebre