MultiDex ,出现java.lang.NoClassDefFoundError Dex异常

 E/AndroidRuntime: java.lang.NoClassDefFoundError: com.tdxd.talkshare.othercenter.activity.OtherCenterActivity
                                                                        at com.tdxd.talkshare.home.fragment.LocationOrFlowPostFragment.headClick(LocationOrFlowPostFragment.java:364)
                                                                        at com.tdxd.talkshare.home.adapter.HomeRecycleAdapter$1.onClick(HomeRecycleAdapter.java:286)
                                                                        at android.view.View.performClick(View.java:4448)
                                                                        at android.view.View$PerformClick.run(View.java:18461)
                                                                        at android.os.Handler.handleCallback(Handler.java:733)
                                                                        at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                        at android.os.Looper.loop(Looper.java:136)
                                                                        at android.app.ActivityThread.main(ActivityThread.java:5072)
                                                                        at java.lang.reflect.Method.invokeNative(Native Method)
                                                                        at java.lang.reflect.Method.invoke(Method.java:515)
                                                                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
                                                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
                                                                        at dalvik.system.NativeStart.main(Native Method)

详情描述:小米4.4.0手机上出现。没有将class文件打包dex文件中。

经过各方面排查最后锁定到@TargetApi(Build.VERSION_CODES.M) 这段代码上。由于使用的api高于4.4.0版本的api使得,并且将注解给了Activity对象,导致在分包的时候未将类打包给dex文件。具体代码如下:

 


解决:去掉给Activity的注解

在项目钟出现的java.lang.NoClassDefFoundError Dex异常 的一种情况

在此之前搜遍其他大大的博客,也没发现这种情况,在这里记上一笔给诸位提个醒。

其他可能出现的情况:

1.混淆

2.multidex没有compileapplication配置造成的,5.0以下容易出现,因为5.0自动配置支持了multidex          

Multidex可能出现的问题:          

   1.DEX文件安装到设备的过程非常复杂,如果第二个DEX文件太大,可能导致应用无响应。此时应该使用ProGuard减小DEX文件的大小。
    2.由于Dalvik linearAlloc的Bug,应用可能无法在Android 4.0之前的版本启动,如果你的应用要支持这些版本就要多执行测试。
    3.同样因为Dalvik linearAlloc的限制,如果请求大量内存可能导致崩溃。Dalvik linearAlloc是一个固定大小的缓冲区。在应用的安装过程中,系统会运行一个名为dexopt的程序为该应用在当前机型中运行做准备。dexopt使用LinearAlloc来存储应用的方法信息。Android 2.2和2.3的缓冲区只有5MB,Android 4.x提高到了8MB或16MB。当方法数量过多导致超出缓冲区大小时,会造成dexopt崩溃。
    4.Multidex构建工具还不支持指定哪些类必须包含在首个DEX文件中,因此可能会导致某些类库(例如某个类库需要从原生代码访问Java代码)无法使用。

如果以上没有解决你所遇到的问题,推荐 Android MultiDex实践:如何绕过那些坑?




Java.lang.NoClassDefFoundError异常通常发生在Java程序中,表示在运行时找不到某个的定义。这个异常通常是由于路径配置错误或者缺少相关的依赖库引起的。要解决这个异常,可以尝试以下几种方法: 1. 检查路径:确保路径配置正确,包括检查环境变量、路径参数和项目构建工具(如Maven或Gradle)中的依赖配置。确保所需的文件或JAR包在路径中可用。 2. 检查依赖库:如果程序依赖于其他库或框架,确保这些依赖库已正确添加到路径中。可以检查项目的构建配置文件(如pom.xml或build.gradle)来确认依赖项是否正确配置。 3. 检查名和包名:确保名和包名的大小写和拼写与代码中的定义一致。Java是区分大小写的,所以名和包名必须精确匹配。 4. 检查编译和运行环境:确保代码在正确的编译和运行环境中执行。例如,如果代码是使用较新版本的Java编译的,但在较旧版本的Java运行时中执行,可能会导致NoClassDefFoundError异常。 5. 检查加载器:如果使用自定义加载器加载,确保加载器能够正确找到和加载所需的。可以检查加载器的实现和配置,以确保它们按预期工作。 6. 检查文件或JAR包是否损坏:如果文件或JAR包损坏或不完整,可能会导致NoClassDefFoundError异常。可以尝试重新下载或替换这些文件来解决题。 这些方法可以帮助您解决Java.lang.NoClassDefFoundError异常。如果题仍然存在,请提供更多的上下文信息,以便我能够提供更具体的帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值