导入开源库 java.lang.NoClassDefFoundError: rx.plugins.RxJavaPlugins

问题:

在自己项目中新导入一个开源库的Library,编译也成功运行在手机上开始出现异常,不过当时手机版本高于或等于21时却正常。报错信息:

java.lang.NoClassDefFoundError: rx.plugins.RxJavaPlugins
  • 1

其实后面还有一些有关RXjava使用文件的提示显示,但是之前使用Rxjava都是正常的,而导入一个library后开始出错,错误肯定不在Rxjava上,所以真正错误是前面半句。

java.lang.NoClassDefFoundError
  • 1


原因:

问题的原因是项目没有初始化 MultiDex 选项!

官方文档中有说明:Multidex support for Android 5.0 and higher

Android 5.0 and higher uses a runtime called ART which natively supports loading multiple dex files from application APK files. ART performs pre-compilation at application install time which scans for classes(..N).dex files and compiles them into a single .oat file for execution by the Android device. For more information on the Android 5.0 runtime, see Introducing ART. This is the reason why your app is working fine on API level 21.

总体而言,Android 5.0及以上版本有使用一个名为ART的耗时操作,它支持从应用程序的APK文件中加载多个dex文件。 ART在应用程序安装时执行预编译,扫描类(.. N).dex文件,并将其编译为单个.oat文件,以供Android设备执行。

以上也就是应用程序可以API级别21上正常工作的原因。




解决方法:

Multidex support prior to Android 5.0

Versions of the platform prior to Android 5.0 use the Dalvik runtime for executing app code. By default, Dalvik limits apps to a single classes.dex bytecode file per APK. In order to get around this limitation, you can use the multidex support library, which becomes part of the primary DEX file of your app and then manages access to the additional DEX files and the code they contain.

以上是对于Android版本在5.0之前也就是低于5.0时的解决办法(3个步骤,缺一不可): 

  • 1 在app文件夹下的 build.gradle文件指定位置添加:
multiDexEnabled true
  • 1
  • 2 在app文件夹下的 build.gradle文件中添加multidex 包依赖
    compile ‘com.android.support:multidex:1.0.0‘
  • 1
  • 3 将项目自定义的Application继承MultiDexApplication,或者直接在自定义Application中重写方法,代码如下:
     @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }
  • 1
  • 2
  • 3
  • 4
  • 5

再次编译,问题即可解决。

此问题主要是由ART程序引发的版本问题,有关java.lang.NoClassDefFoundError的异常都可照此方法解决。

原文地址:https://www.cnblogs.com/zlj1992/p/8259815.html

时间: 2024-07-30 14:48:56

导入开源库 java.lang.NoClassDefFoundError: rx.plugins.RxJavaPlugins的相关文章

Android程序 依赖库引用Gson 报java.lang.NoClassDefFoundError: com/google/gson/Gson 解决方法

Android 程序所依赖一个Library程序B , B 程序中用到格式化json串,转换成标准json串的要求 public static String jsonFormatter(String uglyJSONString) { Gson gson = new GsonBuilder().setPrettyPrinting().create(); JsonParser jp = new JsonParser(); JsonElement je = jp.parse(uglyJSONStri

公司拷贝回家的工程用sts导入clean package报错java.lang.NoClassDefFoundError

从公司拷贝工程回家加班,用相同版本的sts和jdk但是run as    maven build   clean package 总是报错java.lang.NoClassDefFoundError:com/fasterxml/jackson/databind/ObjectMapper 等等很多NoClassDefFoundError等等错误,但是我在公司相同的代码相同的工程一点问题没有 后来猜测可能家里电脑maven下载相关的包是很久之前下载的,公司是最近半个月下载的,于是删除了C:\User

Android导包导致java.lang.NoClassDefFoundError

SDK 方法总数是不能超过 65k 的.是否也引入其他的三方库,导致总数超过限制.超出限制会导致部分class找不到,引发java.lang.NoClassDefFoundError. 解决方法: 近日,Android Developers在Google+上宣布了新的Multidex支持库,为方法总数超过65K的Android应用提供了官方支持. 如果你是一名幸运的Android应用开发者,正在开发一个前景广阔的应用,不断地加入新功能.添加新的类库,那么终有一天,你会不幸遇到这个错误: Conv

使用CGlib出现java.lang.NoClassDefFoundError: org/objectweb/asm/Type异常【补充】

援引:使用CGlib出现java.lang.NoClassDefFoundError: org/objectweb/asm/Type异常 援引:class net.sf.cglib.core.DebuggingClassWriter has interface org.objectweb.asm.ClassVisitor as super class 源环境: IDE:IntelliJ IDEA 项目目的:测试动态代理 -- CGLIB 项目属性:Java Application 项目结构: 被

eclipse启动错误:java.lang.NoClassDefFoundError: org/eclipse/core/resources/IContainer

转自:http://blog.csdn.net/niu_hao/article/details/9332521 eclipse启动时报错如下:java.lang.NoClassDefFoundError: org/eclipse/core/resources/IContainer解决方法:可能是丢失部分起动文件,解决... eclipse启动时报错如下: java.lang.NoClassDefFoundError: org/eclipse/core/resources/IContainer 解

(转)Android工程出现 java.lang.NoClassDefFoundError错误解决方法

在Eclipse中,导入Android工程,工程没有报错,运行时,出现 java.lang.NoClassDefFoundError类没有找到的错误.从问题上可以看出是导入包出错的原因.遂百度加谷歌. 问题出在:ADT高版本的原因 把引入的第三方包放在Referenced Libraries中,ADT升级到17后就出现了Android Dependencies,所以如果程序中引入的第三方包没有在Android Dependencies中时,就会报文章开头的错. 解决方法: 先移除之前的Refer

spring异常记录-----java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils

今天在练习怎样SSH中进行单元測试的时候出现下列异常: SEVERE: Exception starting filter Struts2 java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.register(XmlConfigurationProvider.java:211

关于java.lang.NoClassDefFoundError: org/apache/commons/collections/FastHashMap的错误解决办法

在JavaEE开发中,在把配置文件中的数据或用户表单提交上来的数据,封装在相应JavaBean的对象的对应属性中时:在实际开发中,使用第三方法工具包BeanUtils(commons-beanutils-xxx.jar 依赖于commons-logging-xx.jar). 如博主在JavaWeb工程中,导入的jar包:commons-beanutils-1.9.3.jar和commons-logging-1.2.jar 这是在运行时报错了:eption in thread "main"

Eclipse中使用recyclerview时出现Caused by: java.lang.NoClassDefFoundError: android.support.v7.recyclerview.R$styleable

转自: http://blog.csdn.net/chenleicpp/article/details/46848785 程序崩溃,错误提示: Caused by: java.lang.NoClassDefFoundError: android.support.v7.recyclerview.R$styleable 原因: 在eclipse中使用RecyclerView,编译没有问题,但是运行时候会出现如下错误,百思不得其解,又说v4包与v7包版本不一致,有说没有导入v7-compat包的,经反