2010-10-01 8 views
7

Google sta suggerendo che gli sviluppatori potrebbero voler offuscare il codice byte:Come disattivare tutte le funzionalità di Android ProGuard ad eccezione dell'offuscamento?

http://android-developers.blogspot.com/2010/09/proguard-android-and-licensing-server.html

ho seguito le istruzioni di Google per ottenere un app Android offuscato che, a prima vista, sembrava funzionare. Ma ci sono stati alcuni strani bug introdotti che non si trovano nell'app non nascosta. Continuavo a spegnere le opzioni Proguard per arrivare a questa configurazione:

-dontoptimize -dontshrink -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -dontpreverify verbose

Ancora gli insetti ci sono. C'è qualcos'altro che posso disattivare per ottenere solo una totale offuscazione? L'offuscamento sarebbe bello, ma sono disposto a disattivare le altre funzionalità di ProGuard.

+0

Ciao! Hai trovato una soluzione alla tua domanda? Ho anche affrontato lo stesso problema. https://stackoverflow.com/questions/47716524/proguard-android-execution-failed-for-task-presentationtransformclasseswith – yozhik

risposta

7

Questo è quello che uso:

-libraryjars ${android.jar} 
-injars  temp.jar 
-outjars proguard.jar 

#-printseeds: Prints the un-obfuscated filenames 
-printseeds 
-printmapping mapping-used-to-retrace-exceptions.txt 
-verbose 

#-dontusemixedcaseclassnames: Necessary when building on windows where x.class and X.class is the same file 
-dontusemixedcaseclassnames 

#-repackageclasses: Adds further obfuscation, Counter-indication: classes that look for resource files in their package directories will no longer work properly if they are moved elsewhere. When in doubt, just leave the packaging untouched by not using this option. 
-repackageclasses '' 

#-dontskipnonpubliclibraryclasses: Counter-indication: you probably shouldn't use this option when processing code that is to be used as a library, since classes and class members that weren't designed to be public in the API may become public. 
-dontskipnonpubliclibraryclasses 

-keep public class * extends android.app.Activity 
-keep public class * extends android.app.Service 
-keep public class * extends android.content.BroadcastReceiver 
-keep public class * extends android.content.ContentProvider 
-keep class * extends android.view.View { 
    public <init>(android.content.Context); 
    public <init>(android.content.Context, android.util.AttributeSet); 
    public <init>(android.content.Context, android.util.AttributeSet, int); 
    public void set*(...); 
} 
-keep class * extends android.preference.Preference { 
    public <init>(android.content.Context); 
    public <init>(android.content.Context, android.util.AttributeSet); 
    public <init>(android.content.Context, android.util.AttributeSet, int); 
    public void set*(...); 
}  
# LVL License binder class 
-keep class com.android.vending.licensing.ILicensingService  
# This is necessary for LVL among others. According to proguard doc java accesses enum fields by introspection. 
-keepclassmembers enum * { 
    public static **[] values(); 
    public static ** valueOf(java.lang.String); 
} 
#Optimization settings 
-dontoptimize 

Si offusca, ma mantiene pubblico i metodi pubblici e il nome della classe di classi necessarie da Android. Come richiesto, non ottimizza: le ottimizzazioni hanno maggiori probabilità di interrompere il programma a causa di metodi e costruttori rimossi.

Se si vuole provare, tra cui ottimizzazioni qui è quello che faccio (ricordarsi di rimuovere l'opzione -dontoptimize sopra)

#Optimization settings  
# Keep (ie. don't remove) all public constructors of all public classes, but still obfuscate+optimize their content. This is necessary because optimization removes constructors which I use through reflection. 
-keepclassmembers class * { 
    <init>(...); 
} 

-optimizationpasses 7 
-allowaccessmodification 
# The -optimizations option disables some arithmetic simplifications that Dalvik 1.0 and 1.5 can't handle. 
-optimizations !code/simplification/arithmetic 

Io uso Proguard 4,5, ma altre versioni probabilmente funzionerà altrettanto bene.