当前位置:   article > 正文

使用友盟组件,android混淆后程序报错解决方案_public(org.json.jsonobject);

public(org.json.jsonobject);

     这几天在对程序进行混淆处理测试时,在程序中使用了友盟组件的地方会报错,比如自动更新,报错异常如:

  1. java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example/com.umeng.update.UpdateDialogActivity}: java.lang.IllegalArgumentException: ResClass is not initialized. Please make sure you have added neccessary resources. Also make sure you have com.example.R$* configured in obfuscation. field=umeng_update_dialog
  2. at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
  3. at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
  4. at android.app.ActivityThread.access$600(ActivityThread.java:130)
  5. at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
  6. at android.os.Handler.dispatchMessage(Handler.java:99)
  7. at android.os.Looper.loop(Looper.java:137)
  8. at android.app.ActivityThread.main(ActivityThread.java:4745)
  9. at java.lang.reflect.Method.invokeNative(Native Method)
  10. at java.lang.reflect.Method.invoke(Method.java:511)
  11. at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
  12. at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
  13. at dalvik.system.NativeStart.main(Native Method)
  14. Caused by: java.lang.IllegalArgumentException: ResClass is not initialized. Please make sure you have added neccessary resources. Also make sure you have com.example.R$* configured in obfuscation. field=umeng_update_dialog
  15. at com.umeng.common.Res.a(Unknown Source)
  16. at com.umeng.common.Res.d(Unknown Source)
  17. at com.umeng.update.UpdateDialogActivity.onCreate(Unknown Source)
  18. at android.app.Activity.performCreate(Activity.java:5008)
  19. at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
  20. at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
     解决思路:

使用了混淆, 请添加

  1. -keepclassmembers class * {
  2. public <init>(org.json.JSONObject);
  3. }
这是由于SDK中的部分代码使用反射来调用构造函数, 如果被混淆掉, 在运行时会提示"NoSuchMethod"错误。 另外,由于SDK需要引用导入工程的资源文件,通过了反射机制得到资源引用文件R.java,但是在开发者通过proguard等混淆/优化工具处理apk时,proguard可能会将R.java删除,如果遇到这个问题,请在proguard配置文件中添加keep命令如:
  1. -keep public class [您的应用包名].R$*{
  2. public static final int *;
  3. }
把[您的应用包名] 替换成您自己的包名,如com.yourcompany.example。 如果您使用了双向反馈功能,还需要添加下面代码,以免我们自定义的UI被混淆:
  1. -keep public class com.umeng.fb.ui.ThreadView {
  2. }
      在proguadr-android.txt文件中,添加如下代码:
  1. -keepclassmembers class * {
  2. public <init>(org.json.JSONObject);
  3. }
  4. -keep public class com.example.R$*{
  5. public static final int *;
  6. }
    至此,问题解决

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/285523
推荐阅读
相关标签
  

闽ICP备14008679号