APP中方法超过64K的解决办法
来源:互联网 发布:淮北淘宝家具安装 编辑:程序博客网 时间:2024/06/02 03:19
病症
Conversion to Dalvik format failed:Unable to execute dex: method ID not in [0, 0xffff]: 65536
trouble writing output:Too many field references: 131000; max is 65536.You may try using --multi-dex option.
有上述提示错误或者类似的字样时,你就很可能中招了。
65536是在一个单独的dex文件中,可以调用的引用(可以理解为方法数)的最大数目。
这些引用包括:安卓framework 方法,library 方法和你自己定义的方法。
方法
很显然一个dex可以允许65536的方法,使用多个不就结了吗?下面讲述一下mulitdex的配置方法。
- 在Android 5之前
在Android5之前,默认一个app中只有一个dex文件,我们可以通关过添加support包来完成。
1.修改build.gradle配置
android { compileSdkVersion 21 buildToolsVersion "21.1.0" defaultConfig { ... minSdkVersion 14 targetSdkVersion 21 ... // Enabling multidex support. multiDexEnabled true } ...}dependencies {//add multidex support library compile 'com.android.support:multidex:1.0.0'}
2.对Application进行调整
这里有三种方法
1.如果你没有定义你自己的Application
声明android.support.multidex.MultiDexApplication,作为你的Application
2.如果已经定义你的Application
这里有两种方法:
1.修改extends Application为 extends MultiDexApplication
2.在原来的Application中添加如下代码:
protected void attachBaseContext(Context base) {super.attachBaseContext(base);MultiDex.install(this);}
- 在Android5之后
api 21系统的运行环境ART,默认支持多dex文件。在APP安装时,ART将所有的dex文件,预编译成一个.oat文件供app调用。
精简代码,避免64K限制
虽然有multidex解决方案,仍然有许多不近人意的地方,所以,我们应该尽可能的避免64k问题。
1.删除没有用的代码&&相关类库中的代码
包含一个大的类库,仅仅使用一小部分的功能,尤其需要严格处理
2.使用Proguard工具,精简代码
Multidex support library限制
1.由于Dalvik linearAlloc bug (Issue 22586)问题,APP在android4一下,可能无法运行,需要做大量的测试;
2.在APP启动的时候,可能会引发ANR(Android Not Response);
3.会造成更多的内存开销,导致APP崩溃;
4.由于APP内代码调用的复杂性,可能导致某些功能无法使用。
在APP开发时,加快build
使用multidex打包时,需要对放入primary dex的class进行复杂计算,导致build时间显著增加。通过下面的配置,可以在开发中加快build过程。
android { productFlavors { // Define separate dev and prod product flavors. dev { // dev utilizes minSDKVersion = 21 to allow the Android gradle plugin // to pre-dex each module and produce an APK that can be tested on // Android Lollipop without time consuming dex merging processes. minSdkVersion 21 } prod { // The actual minSdkVersion for the application. minSdkVersion 14 } } ...}dependencies { compile 'com.android.support:multidex:1.0.0'}
在minSDK>=api 21,APP自动支持多dex文件,build时,仅仅需要将修改的dex进行更新一下即可。
翻译地址
https://developer.android.com/studio/build/multidex.html#dev-build
- APP中方法超过64K的解决办法
- Android 方法数超过64k限制的解决办法
- 配置方法数超过64k的解决办法
- Android 中配置方法数超过 64K 的应用
- Android Developer:构建超过65K方法的App
- Android Developer:构建超过65K方法的App
- 关于Android 方法数超过64K的解决办法,终究要知道
- 配置超过64K方法的应用程序
- Android开发方法数超过64k(65k)解决办法
- Android Studio 中方法数65536 或超过64K的解决方案
- Android打包编译超过64K 解决办法
- 使用ANT编译超过64K方法的Android工程
- Andorid 方法数超过64K的问题
- 如何配置方法数超过64K的应用
- 配置方法数超过 64K 的应用
- 配置方法数超过 64K 的应用
- Android配置方法数超过64K的限制
- Android配置方法数超过 64K 的应用
- MediaRecorder录制音频
- Spring定时任务的几种实现
- [学习笔记]函数的定义与调用
- Android中获取当前的Activity
- Jersey的RESTful小结
- APP中方法超过64K的解决办法
- 老人是真饿了
- 杭电 ACM 几道有关string的题目
- VC++6.0常用快捷键及对快捷键使用的看法(转)
- the Sum of Cube
- 关于Hibernate和mybatis的简单对比
- iOS开发:打包ipa
- NYOJ-16-矩形嵌套(动态规划)
- 知道这20个正则表达式,能让你少写1,000行代码