APK混淆及proguard混淆错误解决

混淆个人开发的应用使用的proguard.cfg文件:

-libraryjars 'C:\Program Files\Java\jre7\lib\rt.jar'
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-ignorewarnings 
-dontwarn   
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*


-keep public class * extends android.app.Activity
-keep public class * extends com.martin.kuchi.RootActivity
-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 * extends android.widget.BaseAdapter
-keep public class * extends com.martin.utils.CommonBaseAdapter
-keep public class com.android.vending.licensing.ILicensingService


-keepclasseswithmembernames class * {
    native ;
}


-keepclasseswithmembers class * {
    public (android.content.Context, android.util.AttributeSet);
}


-keepclasseswithmembers class * {
    public (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 *;
}


-keep class com.martin.kuchi.R$*{
  public static final int *;
}


-keep class com.alipay.android.app.sdk.R$*{
  public static final int *;
}


-keep class org.apache.** {*;}
-keep class com.google.gson.** {*;}
-keep class org.json.** {*;}
-keep class com.alipay.** {*;}
 
-keepattributes Signature
-keep class sun.misc.Unsafe { *; }
-keep class com.google.gson.examples.android.model.** { *; }


-keep public class com.martin.bean.** {*;}



说明:

-libraryjars 'C:\Program Files\Java\jre7\lib\rt.jar'                       //导入第三方用到的库,此处用到Base64.Decoder类 ,不加此行export signed package application会报error   

-keep class org.apache.** {*;} //网络相关操作类,对该类不做混淆操作

-keep class com.google.gson.** {*;} //com.google.gson.reflect.TypeToken,对该类不做混淆操作
-keep class org.json.** {*;} //获取接口数据的模块中引用了org.json下的类,对这部分类做保留操作

-keep class com.martin.kuchi.R$*{       //对应用资源文件不做混淆操作,否则找不到layout文件
  public static final int *;
}

-keep class com.alipay.android.app.sdk.R$*{
  public static final int *;
}

错误解决方法:

在混淆使用后。APP报类似错误com a.a.c.a.a(Unknown Source),为了进一步证实,方法是对照查看混淆后生成的文件mapping.txt(当前工程proguard目录下)来找出混淆后的类com a.a.c.a.a对应的是程序中的哪个类,

com a.a.c.a.a确定是指向了com.google.gson.reflect.TypeToken


然后就在混淆文件里proguard-android.txt加上这句话:

-keep class com.google.gson.** {*;} 表示对该类不执行proguard操作


如果是报告某个类中的某个函数错误,也是逐步排查,对函数中的可疑元素,保留不做混淆,直至确认问题解决!


你可能感兴趣的:(Android)