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