Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using Proguard with Android without obfuscation

I am getting an error "Conversion to Dalvik format failed with error 1" when using the -dontobfuscate flag. Otherwise my app exports fine. I don't want to obfuscate because I am using BugSense for error tracking and they charge $99 a month if you need to de-obfuscate your stack traces. I still want to get the file size and optimization benefits of proguard.

If I comment out -dontobfuscate every thing works great. Except for the unreadable stack traces.

my progaurd.cfg file:

-dontobfuscate -optimizationpasses 5 -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -dontpreverify -verbose -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*  -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 *; } 

I will also accept an answer that points me in the right direction. Is there a log file I should be looking at?

like image 799
theJosh Avatar asked Mar 11 '12 01:03

theJosh


People also ask

Does ProGuard obfuscate code?

You can obfuscate Android code to provide security against reverse engineering. You can use the Android ProGuard tool to obfuscate, shrink, and optimize your code.

Should I use R8 or ProGuard?

R8 is having a faster processing time than Proguard which reduces build time. R8 gives better output results than Proguard. R8 reduces the app size by 10 % whereas Proguard reduces app size by 8.5 %. The android app having a Gradle plugin above 3.4.


1 Answers

Add !code/allocation/variable is workaround for ProGuard bug when -dontobfuscate is set to your -optimizations

For example

-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*,!code/allocation/variable 
like image 141
Phil Avatar answered Oct 08 '22 20:10

Phil