Android Multidex 遇到的问题
http://blog.csdn.net/wangbaochu/article/details/51178881
Android 使用android-support-multidex解决Dex超出方法数的限制问题,让你的应用不再爆棚
http://blog.csdn.net/t12x3456/article/details/40837287
apply plugin: 'com.android.application' //设置编译android项目的参数 android { compileSdkVersion 22 buildToolsVersion "22.0.1" defaultConfig { // 应用的包名 applicationId "me.storm.niaa" minSdkVersion 9 // maxSdkVersion 23 targetSdkVersion 22 //versionCode 229 //versionName "2.2.9" // versionCode rootProject.ext.versionCode // versionName rootProject.ext.versionName multiDexEnabled true } afterEvaluate { tasks.matching { it.name.startsWith('dex') }.each { dx -> if (dx.additionalParameters == null) { dx.additionalParameters = [] } dx.additionalParameters += '--multi-dex' // enable multidex } } dexOptions { javaMaxHeapSize "4g" //java虚拟机堆内存最大值设为4g,避免oom preDexLibraries = false //设置对第三方lib不做preDex处理 additionalParameters = //每个dex包方法数限制在4000以内 ['--multi-dex', '--set-max-idx-number=40000'] }
1.配置您的应用进行Dalvik 可执行文件分包
将您的应用项目设置为使用 Dalvik 可执行文件分包配置需要对您的应用项目进行以下修改,具体取决于应用支持的最低 Android 版本。
1.1 如果您的 minSdkVersion
设置为 21 或更高值,您只需在模块级 build.gradle
文件中将 multiDexEnabled
设置为 true
,如此处所示:
android {
defaultConfig {
...
minSdkVersion 21
targetSdkVersion 25
multiDexEnabled true
}
...
}
但是,如果您的 minSdkVersion
设置为 20 或更低值,则您必须按如下方式使用 Dalvik 可执行文件分包支持库:
-
修改模块级
build.gradle
文件以启用 Dalvik 可执行文件分包,并将 Dalvik 可执行文件分包库添加为依赖项,如此处所示:android {
defaultConfig {
...
minSdkVersion 15
targetSdkVersion 25
multiDexEnabled true
}
...
}
dependencies {
compile 'com.android.support:multidex:1.0.1'
}
- 1.2 根据是否要替换
Application
类,执行以下操作之一:-
如果您没有替换
Application
类,请编辑清单文件,按如下方式设置<application>
标记中的android:name
:<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<application
android:name="android.support.multidex.MultiDexApplication" >
...
</application>
</manifest> -
如果您替换了
Application
类,请按如下方式对其进行更改以扩展MultiDexApplication
(如果可能):public class MyApplication extends MultiDexApplication { ... }
-
或者,如果您替换了
Application
类,但无法更改基本类,则可以改为替换attachBaseContext()
方法并调用MultiDex.install(this)
来启用 Dalvik 可执行文件分包:public class MyApplication extends SomeOtherApplication {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(context);
Multidex.install(this);
}
}
-
构建应用后,Android 构建工具会根据需要构建主 DEX 文件 (classes.dex
) 和辅助 DEX 文件(classes2.dex
和 classes3.dex
等)。然后,构建系统会将所有 DEX 文件打包到您的 APK 中。
运行时,Dalvik 可执行文件分包 API 使用特殊的类加载器来搜索适用于您的方法的所有 DEX 文件(而不是仅在主 classes.dex
文件中搜索)。
2.测试 Dalvik 可执行文件分包应用
编写面向 Dalvik 可执行文件分包应用的仪器测试时,无需进行其他配置。AndroidJUnitRunner
直接支持 Dalvik 可执行文件分包,前提是您使用MultiDexApplication
或替换您的自定义 Application
对象中的 attachBaseContext() 方法,并调用
MultiDex.install(this)
以启用 Dalvik 可执行文件分包。
或者,您可以替换 AndroidJUnitRunner 中的 onCreate()
方法:
public void onCreate(Bundle arguments) {
MultiDex.install(getTargetContext());
super.onCreate(arguments);
...
}
注:目前不支持使用 Dalvik 可执行文件分包来创建测试 APK。
ref:
配置方法数超过 64K 的应用 | Android Studio
https://developer.android.com/studio/build/multidex.html、
Android 解决65535的限制 使用android-support-multidex解决Dex超出方法数的限制问题,让你的应用不再爆棚
http://blog.csdn.net/x_i_a_o_h_a_i/article/details/46544341