2010-10-01 13 views
7

Google suggère que les développeurs pourraient vouloir obscurcir le code octet:Comment désactiver toutes les fonctionnalités Android ProGuard, à l'exception de l'obfuscation?

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

J'ai suivi les instructions de Google pour obtenir une application Android obfuscation qui, à première vue, semblait fonctionner. Mais il y avait quelques bogues étranges présentés qui ne sont pas dans l'application non-obfusquée. Je continuais de désactiver les options ProGuard pour obtenir cette configuration:

-dontoptimize -dontshrink -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -dontpreverify verbose

encore les bugs sont là. Y a-t-il autre chose que je puisse éteindre pour obtenir seulement de l'obfuscation pure? L'obscurcissement serait bien, mais je suis prêt à désactiver les autres fonctionnalités de ProGuard.

+0

Salut! Avez-vous trouvé une solution à votre question? J'ai aussi fait face au même problème. https://stackoverflow.com/questions/47716524/proguard-android-execution-failed-for-task-presentationtransformclasseswith – yozhik

Répondre

7

C'est ce que j'utilise:

-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 

Il obscurcit mais conserve publique les méthodes publiques et le nom de classe des classes nécessaires par Android. Comme vous l'avez demandé, il n'est pas optimisé - les optimisations sont plus susceptibles de casser votre programme en raison de méthodes et de constructeurs supprimés.

Si vous voulez essayer, y compris les optimisations voici ce que je ne (rappelez-vous de supprimer l'option -dontoptimize ci-dessus)

#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 

J'utilise proguard 4.5, mais d'autres versions travaille probablement tout aussi bien.