我们的一位测试人员使用运行Android 4.4.4的T-mobile Galaxy S4遇到了非常奇怪的NoClassDefFoundError崩溃问题。我完全不知道为什么会发生这些事情。
最新的一个是在片段中的onCreateView
中调用静态方法时发生的。
MyCustomClass.getNumberOfItems(getActivity());
失败
致命异常:java.lang.NoClassDefFoundError com.mycompany.myapp.utilities.MyCustomClass $ 5'/ P>
以下是相关方法:
public static List<Item> getNumberOfItems(final Context context)
{
List<Item> allFinishedItems = getAllFinishedItems(context);
CollectionUtils.filter(allFinishedItems, new Predicate<Item>()
{
@Override
public boolean evaluate(Item item)
{
// TODO Auto-generated method stub
return isNonCustomItem(context, item);
}
});
return allFinishedItems;
}
1。)什么是&#34; $ 5&#34;课后名字? (回答:使用CollectionUtils.filter过滤匿名类的引用) 2.)这个用户有另一个类似性质的崩溃,但是在一个通过gradle包含的库中有一个完全不同的静态方法调用。我在这个问题中引用的崩溃来自于我自己的库项目中的代码,同样的静态方法调用也适用于应用程序中的其他位置。这个问题似乎正在蔓延,或者至少不包含在1个类或1个库中。
我们在build.gradle中定位以下Android版本:
minSdkVersion 14
targetSdkVersion 22 (android 5.1)
这可能会发生什么?另外需要注意的是,已签名的APK是使用Android Studio 2.0预览版4生成的。但是,该应用程序适用于20-30个其他测试版测试人员,所以我对使用预览版本的预览版本犹豫不决工作室。
答案 0 :(得分:6)
NoClassDefFoundError
s发生了,因为multidex只是在这个应用中部分实现了 - 出于某种原因,这在Android 5/6上工作正常,但在Android 4.x上它使你的应用程序崩溃{{1}在随机的地方。在我看来,Android Studio应该检测到这种情况,并且应该警告您已经不正确地实现了多索支持。
要解决此问题,请确保您的项目符合以下条件:
NoClassDefFoundError
部分中的 multiDexEnabled = true
defaultConfig
在应用类的compile 'com.android.support:multidex:1.0.0'
中致电MultiDex.install()
。
有关multidex的更多详情,请访问here.
答案 1 :(得分:0)
我没有完全实现MultiDex
支持,所以我的某些类不在正确的dex文件中。要解决此问题,您要做的不仅仅是在multiDexEnabled = true
块中设置defaultConfig
。并且:
'com.android.support:multidex:1.0.1'
MultiDexApplication
而不只是扩展Application
。或者,您可以在应用程序类的MultiDex.install()
中调用attachBaseContext()
。答案 2 :(得分:0)
确保按照其他人在此处指出的答案设置先决条件,如果仍然发生崩溃,您可能也想尝试这种方法https://developer.android.com/studio/build/multidex#keep
<块引用>为 multidex 应用构建每个 DEX 文件时,构建工具会执行复杂的决策,以确定主 DEX 文件中需要哪些类,以便您的应用可以成功启动。如果主 DEX 文件中未提供启动期间所需的任何类,则您的应用将崩溃并显示错误 java.lang.NoClassDefFoundError
编辑:
或者您可以尝试这种方法,以便在主 DEX 中注册您的课程