跳转到主要内容
PRODUCT DOCUMENTS

快速找到所需文档,高效完成接入与排障

浏览产品文档与友盟 Skill,展开目录并阅读正文。

混淆类问题

问题描述:

  • 为什么用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);}