您的位置:首页 > 产品设计 > UI/UE

[置顶] Android 修改multiDexEnabled true后友盟显示java.lang.IncompatibleClassChangeError的一种解决方案

2017-03-20 19:24 671 查看
今天遇见了一个比较坑的问题,我会把问题描述一下,供以后查阅。

因为自己的项目方法超过了65536个,我必须在项目里加入multiDexEnabled true,才可以继续编包,但是这个时候,发现友盟分享的时候出现了如下的错误:

java.lang.IncompatibleClassChangeError: Expected 'java.lang.String com.umeng.socialize.a.b.a.o' to be a instance field rather than a static field (declaration of 'java.lang.reflect.ArtMethod' appears in /system/framework/core-libart.jar)
at com.umeng.socialize.a.b.a.q(a.java)
at com.umeng.socialize.a.b.g.onClick(g.java)
at com.umeng.socialize.bean.a.c(a.java)
at com.umeng.socialize.controller.impl.b$7.aa(b.java)
at com.umeng.socialize.controller.impl.b$7.q(b.java)
at com.umeng.socialize.controller.impl.c.postShare(c.java)
hasShareContent(c.java)
at com.android.app.activity.share.ShareActivity.share(ShareActivity.java)
at com.android.app.activity.share.ShareActivity.onClick(ShareActivity.java)
at android.view.View.performClick(View.java:4909)
at android.view.View$PerformClick.run(View.java:20390)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:192)
at android.app.ActivityThread.main(ActivityThread.java:5865)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1021)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:816)


但是经过反复的测试,我发现当我的代码使用了混淆的时候,才会出现如上的问题;而项目没有使用混淆的时候,相应的友盟的代码没有崩溃。

那么我来总结一下我遇到的问题:当我没有使用multiDexEnabled true的时候,项目没有出现如上的java.lang.IncompatibleClassChangeError;当我使用multiDexEnabled true的时候,当项目没有混淆的时候,也是没有出现这个问题,但是当项目混淆的时候,友盟那部分代码就会报java.lang.IncompatibleClassChangeError的问题导致崩溃。

但是我已经按照友盟的文档做了相应的混淆处理,但还是会有这个问题。最后,我只能自己在项目中加入混淆,在proguard-rules.pro文件中加入如下代码:

-keep class com.umeng.socialize**{*;}


发现这个问题消失了。这个方案可能是一种遇到这种问题的解决方案,大家如果遇到类似的问题可以尝试一下,我也是摸索着才采用了这个方案。如果大家知道原理或者有更好的方案麻烦告知我一下(同时吐槽一下,第三方SDK还是需要更完备的文档啊)~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: