混淆类问题
问题描述:
为什么用proguard混淆后,【友盟+】AndroidSDK的一些功能不可用?
代码混淆前SDK工作正常,混淆后运行时报错,提示NoSuchMethod,如何解决此问题?
使用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);}