我正在MotoG(棒棒糖5.1)上测试我的项目,XperiaT2(KitKat 4.4)上没有问题。错误日志是:
java.lang.NoClassDefFoundError: android.support.design.internal.NavigationMenuItemView
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:309)
我使用的是android.support:设计库但没有安装NavigationView,我尝试使用
compile 'com.android.support:design:22.2.1'
和
compile 'com.android.support:design:23.1.1'
但没有解决。也许问题与以前的支持问题:appcompat库,当我尝试使用23.1.1更低版本的时发生了这个错误
NoClassDefFoundError: android.support.v4.hardware.fingerprint.FingerprintManagerCompatApi23$1
我的实际Gradle配置是:
android {
compileSdkVersion 23
buildToolsVersion '23.0.1'
defaultConfig {
minSdkVersion 19
targetSdkVersion 21
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.google.android.gms:play-services:8.1.0'
compile 'com.android.support:design:22.2.0'
compile 'com.android.support:cardview-v7:23.0.1'
compile 'com.android.support:recyclerview-v7:23.0.1'
请帮忙。
更新
当我尝试使用时
buildToolsVersion '23.0.2'
'com.android.support:appcompat-v7:23.1.1'
'com.android.support:design:23.1.1'
我有错误在安卓工作室上渲染预览
Exception Details java.lang.IllegalArgumentException: You need to use a Theme.AppCompat theme (or descendant) with the design library.
甚至以这种方式使用我的主题
<style name="MyTheme" parent="Theme.AppCompat.Light">
也许您可以尝试以下代码并重试:
./gradlew clean
或者这个:
gradle clean
根据我搜索到的一些链接,也许这些可以为你做一些技巧。
尝试来自以下位置的解决方案(我在下面添加了):NoClassDefFoundError:android.support.v7.internal.view.menu.MenuBuilder
编辑:
对我有效的解决方案是(使用Proguard)取代这个:
-keep class android.support.v4.** { *; } -keep interface android.support.v4.** { *; } -keep class android.support.v7.** { *; } -keep interface android.support.v7.** { *; }
这个:
# Allow obfuscation of android.support.v7.internal.view.menu.** # to avoid problem on Samsung 4.2.2 devices with appcompat v21 # see https://code.google.com/p/android/issues/detail?id=78377 -keep class !android.support.v7.internal.view.menu.**,android.support.** {*;}
归功于谷歌集团:https://code.google.com/p/android/issues/detail?id=78377#138
老答案(临时解决方法):它发生在我使用的项目中
ActionBar中的微调器。我的解决方案是检查条件并更改应用程序流:public static boolean isSamsung_4_2_2() { String deviceMan = Build.MANUFACTURER; String deviceRel = Build.VERSION.RELEASE; return "samsung".equalsIgnoreCase(deviceMan) && deviceRel.startsWith("4.2.2"); }
然后在活动的onCreate方法中:
if (isSamsung_4_2_2()) { setContentView(R.layout.activity_main_no_toolbar); } else { setContentView(R.layout.activity_main); }
正如所指出的,这不是一个最终的解决方案,它只是一种方法允许用户访问有限的功能,同时找到了永久解决方案。
这似乎是一个类似的问题,所以尝试一下,让我知道它是否有效
编辑:根据这个Gihub问题,https://github.com/JoanZapata/android-iconify/issues/93你可以在哪里找到线索:
当我使用com.android时没有错误。支持:设计:22.2.0
错误只发生在我使用com.android.支持:设计:22.2.1
将你构建的工具降级到22.2.0-这可能是安卓系统的问题。