首先說下安卓項目的方法數是不能超過65k限制的,不然編譯的時候就會有報錯提示,這也是很大一部分使用Eclipse轉向Android Studio 的原因之一,很不幸的我也中獎了,因為舊項目的各種開源各種lib,導致方法數爆炸了只能轉向AS。
下面僅僅記錄下使用AS編譯器Gradle進行Multidex分包的過程,看到的可以少走彎路;
1.gradle 里面加上如下腳本,會自動在External Libraries 下加上multidex的lib
defaultConfig {
multiDexEnabledtrue
}
2.繼承MultiDexApplication或者繼承Application并且重寫attachBaseContext() 加上MultiDex.install(this),或者xml修改application:
android:name="android.support.multidex.MultiDexApplication">
@Override
protected voidattachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
到這邊其實就可以了,但是最近發現不同gradle版本差分dex的方式并不一樣
com.android.tools.build:gradle:1.3.0 拆分是自動達到首個class.dex 方法數滿65k后才去拆分第二個class1.dex
com.android.tools.build:gradle:1.5.0及以上版本差分的方式都是任意,因為解壓出來有十幾個class.dex文件,所以
1.3.0以上的gradle版本最好再加上控制腳本,以下;
afterEvaluate {
tasks.matching {
it.name.startsWith('dex')
}.each { dx ->
if(dx.additionalParameters==null) {
dx.additionalParameters= ['--multi-dex']
}else{
dx.additionalParameters+='--multi-dex'
}
// optional
//dx.additionalParameters += ‘–main-dex-list=main-dex-list.txt’.toString()用于指定第一個包中必需包含的類,存放在 main-dex-list.txt中文件名可自行修改
//dx.additionalParameters += ‘–minimal-main-dex’最小化主包,與–main-dex-list配合使用,則主包中只含有文件中指定的類
dx.additionalParameters= ['--set-max-idx-number=65000']//用于指定每個dex包中最多的函數數量,多余此數量則自動進行分包
}
}
最近切換到AS2.0進行開發,增加的及時運行功能也就是快速構建容易出問題,記錄下
Note:When using Instant Run with a project configured forLegacy Multidex,i.e.build.gradleis configured withminSdkVersion 20(or lower) andmultiDexEnabled true, build performance may decrease when deploying a clean build to target devices running Android 5.0 (API level 21) or higher. After the initial clean build, incremental builds will be significantly faster, and Instant Run will deploy code and resource changes as normal. To improve clean build performance during development, considercreating a product flavorwithminSdkVersion 21.
快速構建只能在5.0或以上的真機設備或者自帶模擬器才可以,真是苦了Genymotion一直報奇怪的錯誤
以上僅僅是自己的記錄,有錯誤的可以幫我改正,謝謝,另外網上說的其他幾種會出現的比如ANR異常并未出現就不做詳細記錄。