[SA10219]混淆类问题
关键字:
代码混淆、NoSuchMethod、混淆后运行报错
问题描述:
问法1: 为什么用proguard混淆后,【友盟+】AndroidSDK的一些功能不可用?
问法2: 代码混淆前SDK工作正常,混淆后运行时报错,提示NoSuchMethod,如何解决此问题?
问法3: 使用umeng-crash-vx.x.x.aar插件和OAID相关插件混淆如何设置?
解决方案:
- 使用umeng-crash-vx.x.x.aar插件和OAID相关插件,请您加入混淆设置,详细参考集成文档的混淆设置:查看文档
-keep class com.uc.** {*;}-keep class com.zui.** {*;}-keep class com.miui.** {*;}-keep class com.heytap.** {*;}-keep class a.** {*;}-keep class com.vivo.** {*;}
- 如果您的应用使用了proguard代码混淆, 请在您工程混淆配置文件中添加
-keepclassmembers class * {public <init>(org.json.JSONObject);}
这是由于SDK中的部分代码使用反射来调用构造函数, 如果被混淆掉, 在运行时会提示”NoSuchMethod”错误。
- 另外,由于SDK需要引用导入工程的资源文件,通过了反射机制得到资源引用文件R.java,但是在开发者通过proguard等混淆/优化工具处理 apk时,proguard可能会将R.java删除,如果遇到这个问题,请在proguard配置文件中添加keep命令如:
-keep public class [您的应用包名].R$*{public static final int *;}-keep class com.umeng.** {*;}
- 把[您的应用包名] 替换成您自己的包名,如com.yourcompany.example。如果您使用5.0.0及以上版本的SDK,请添加如下命令:
-keepclassmembers enum * {public static **[] values();public static ** valueOf(java.lang.String);}