解决Android 5.0以下出现 java.lang.NoClassDefFoundError,找不到类
来源:互联网 发布:php 获取远程图片 编辑:程序博客网 时间:2024/06/06 04:02
由于实际开发当中的需求不断变更,开源框架越来越多,大多都用第三方SDK,导致方法数很容易超出65536限制。出现错误java.lang.NoClassDefFoundError。
例如:
java.lang.NoClassDefFoundError:uk.co.senab.photoview.PhotoViewAttacher
测试6.0手机没问题,4.4上面就有问题了。导致出现以上错误崩溃。
当我跟进去走debug的时候 ,其实发现这个类并没有什么毛病。
这个错误是Android应用的方法总数限制造成的。Android平台的Java虚拟机Dalvik在执行DEX格式的Java应用程序时,使用原生类型short来索引DEX文件中的方法。这意味着单个DEX文件可被引用的方法总数被限制为65536。通常APK包含一个classes.dex文件,因此Android应用的方法总数不能超过这个数量,这包括Android框架、类库和你自己开发的代码。而Android 5.0和更高版本使用名为ART的运行时,它原生支持从APK文件加载多个DEX文件。在应用安装时,它会执行预编译,扫描classes(..N).dex文件然后将其编译成单个.oat文件用于执行. 通熟的讲,就是分包。
那么Android5.0以下怎么分包.解决超出方法数限制问题?
解决方法:
一、配置build.gradle (app)
android { compileSdkVersion 25 buildToolsVersion "25.0.2" defaultConfig { applicationId "" minSdkVersion 15 targetSdkVersion 25 versionCode 1 versionName "1.0.0" multiDexEnabled true }
dependencies { compile 'com.android.support:multidex:1.0.0' }
二、使用自定义的Application继承MultiDexApplication这个类,或者重写Application的方法attachBaseContext(),并调用MultiDex.install();
@Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(base); }
三、到项目的根目录下执行 ./gradlew clean build
关于使用android-support-multidex解决Dex超出方法数的限制问题,还可以参考:
作者:时之沙
Android 使用android-support-multidex解决Dex超出方法数的限制问题,让你的应用不再爆棚
本文为记录Android开发当中的一些坑.希望能帮到大家
再次感谢作者:泡在简书的日子_Knight
文章链接:http://www.jianshu.com/p/8b4f711da0bb
以上就是解决Android 5.0以下出现 java.lang.NoClassDefFoundError,找不到类的全文介绍,希望对您学习Android应用开发有所帮助.
- 解决Android 5.0以下出现 java.lang.NoClassDefFoundError,找不到类
- 解决Android 5.0以下出现 java.lang.NoClassDefFoundError,找不到类
- 解决 Android 5.0以下出现 java.lang.NoClassDefFoundError
- Android 5.0以下出现 java.lang.NoClassDefFoundError
- Android 5.0以下出现 java.lang.NoClassDefFoundError:
- Android 5.0以下出现 java.lang.NoClassDefFoundError:
- 出现 java.lang.NoClassDefFoundError: 在Android 5.0以下
- Android 5.0以下出现java.lang.NoClassDefFoundError错误
- 解决eclipse引入第三包提示出现找不到类文件java.lang.NoClassDefFoundError: net/sf/json/
- 解决Eclipse中Android导入第三方jar所引起的找不到类,Java.lang.NoClassDefFoundError
- Android studio 出现java.lang.NoClassDefFoundError错误的一种解决方案 5.0以下机型无法运行应用报错
- Android 运行时找不到类:java.lang.NoClassDefFoundError
- Android 运行时找不到类:java.lang.NoClassDefFoundError:...
- Android 运行时找不到类:java.lang.NoClassDefFoundError:
- 使用ClassLoader时出现以下错误:java.lang.NoClassDefFoundError
- java java.lang.NoClassDefFoundError 报第三方jar中类找不到(android4.*以下报错5.*以上不报)
- android表单上传出现java.lang.NoClassDefFoundError
- android调试出现 java.lang.NoClassDefFoundError:
- Error:Execution failed for task ':inferentdemo:processDebugResources'. finished with non-zero exit v
- M1卡做电子钱包结构
- 二维码扫描的手势调焦
- 类和数据抽象
- React创建table
- 解决Android 5.0以下出现 java.lang.NoClassDefFoundError,找不到类
- sqlite3 表里插入系统时间(时间戳)
- React-native 热更新之pushy!
- 数据库(1NF,2NF,3NF)
- Linux_用户、组和权限问题
- Word文档到Asciidoc转换
- mac本拿到手的那几天我做了什么
- Oracle ASM故障数据恢复方法和数据恢复过程详解
- 手机、平板也能构建APP(安装篇)