How to disable all functions of Android ProGuard, except for obfuscation?

Google suggests that developers may need to obfuscate byte code:

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

I followed Google's instructions to get convoluted Android apps that, at first glance, worked. But some strange errors were introduced that are not found in untethered applications. I continued to disable ProGuard options to get to this configuration:

-dontoptimize -dontshrink -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -dontpreverify -verbose

There are still errors. Is there anything else I can disable to get pure obfuscation? Obfuscation will be enjoyable, but I'm ready to turn off other ProGuard features.

+7
android obfuscation proguard
source share
1 answer

This is what I use:

-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 

It confuses, but retains the public methods and class classes required by Android. As you requested, it does not optimize - optimization will most likely lead to the ruin of your program due to remote methods and constructors.

If you want to try including optimization, here what I do (do not forget to remove the -dontoptimize option above)

 #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 

I use proguard 4.5, but other versions probably work just as well.

+7
source share

All Articles