android 4.2 noclassdeffounderror,NoClassDefFoundError:Android 4.2.2上的android.support.design.internal...

我试图使用

Android支持设计库(版本23.0.1)和类NavigationMenu(我将这个类作为一个XML标签使用到布局中).

当我在Android 4.3或者Android 5.x或6.0上的一个Nexus上执行我的应用程序时,一切都很好,但是当我在Android 4.2.2上的Wiko Rainbow上执行应用程序时,它会崩溃,但出现以下异常:

java.lang.RuntimeException: Unable to start activity ComponentInfo{applicationId/package.MainActivity}: android.view.InflateException: Binary XML file line #11: Error inflating class

[...]

Caused by: android.view.InflateException: Binary XML file line #11: Error inflating class

Caused by: java.lang.reflect.InvocationTargetException

at java.lang.reflect.Constructor.constructNative(Native Method)

at java.lang.reflect.Constructor.newInstance(Constructor.java:417)

at android.view.LayoutInflater.createView(LayoutInflater.java:587)

[...]

Caused by: java.lang.NoClassDefFoundError: android.support.design.internal.NavigationMenu

at android.support.design.widget.NavigationView.(NavigationView.java:99)

at android.support.design.widget.NavigationView.(NavigationView.java:92)

at java.lang.reflect.Constructor.constructNative(Native Method)

at java.lang.reflect.Constructor.newInstance(Constructor.java:417)

at android.view.LayoutInflater.createView(LayoutInflater.java:587)

at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687)

at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)

at android.view.LayoutInflater.inflate(LayoutInflater.java:489)

[...]

这个错误让我想起了几个月前类似的开发者,在Android 4.2.2上的一些Wiko和Samsung手机上使用了appcompat-v7库.

错误是:

java.lang.NoClassDefFoundError: android.support.v7.internal.view.menu.MenuBuilder

at android.support.v7.app.ActionBarActivityDelegateBase.initializePanelMenu(ActionBarActivityDelegateBase.java:914)

at android.support.v7.app.ActionBarActivityDelegateBase.preparePanel(ActionBarActivityDelegateBase.java:964)

at android.support.v7.app.ActionBarActivityDelegateBase.doInvalidatePanelMenu(ActionBarActivityDelegateBase.java:1182)

at android.support.v7.app.ActionBarActivityDelegateBase.access$100(ActionBarActivityDelegateBase.java:79)

at android.support.v7.app.ActionBarActivityDelegateBase$1.run(ActionBarActivityDelegateBase.java:118)

at android.os.Handler.handleCallback(Handler.java:800)

at android.os.Handler.dispatchMessage(Handler.java:100)

at android.os.Looper.loop(Looper.java:194)

at android.app.ActivityThread.main(ActivityThread.java:5391)

at java.lang.reflect.Method.invokeNative(Native Method)

at java.lang.reflect.Method.invoke(Method.java:525)

at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)

解决方案是在项目中使用以下proguard文件:

-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod

-dontobfuscate

-dontoptimize

-keep class !android.support.v7.internal.view.menu.**,** { *; }

这个解决方案是伟大的,因为我不需要为我使用像Jackson这样的其他库添加特定的规则(只是一些-dontwarn行),或者为Android组件添加特定的规则.

因为NavigationMenu类继承了MenuBuilder类,我以为我们可以修改这样的proguard文件来解决这个问题:

-keepattributes Exceptions,EnclosingMethod

-dontobfuscate

-dontoptimize

-keep class !android.support.design.internal.**,** { *; }

不幸的是它不工作…所以我尝试了另一个解决方案:

-keepattributes Exceptions,EnclosingMethod

-dontobfuscate

-dontoptimize

-keep class !android.support.v7.internal.view.menu.*MenuBuilder*,android.support.v7.** { *; }

这个解决方案有效,但实际上我没有NoClassDefFoundError异常,但我有其他异常(发生在所有的Android版本),如:

>一些缺少的构造函数用于反射;

>在Jackson对象或片段上缺少一些空构造函数.

那么,你是否知道一个解决方案,让我可以在Android 4.2.2上的Wiko上执行我的应用程序,而我不需要为将来使用或将要使用的每个库添加特定的规则.

预先感谢您的帮助 !

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值