由于項目中引用compile 'com.github.barteksc:android-pdf-viewer:2.4.0'用于加載pdf還有poi加載word,導致方法數劇增,超過65k后使用了google的解決方法:
第一步:
在 build.gradle中
defaultConfig {
/**添加多 dex分包支持*/
multiDexEnabled true
}
dependencies {
compile 'com.android.support:multidex:1.0.1'
}
第二步:
在AndroidManifest.xml中
application的name需要指定為android.support.multidex.MultiDexApplication
如果你的工程中已經含有Application類,那么讓它繼承android.support.multidex.MultiDexApplication類
如果你的Application已經繼承了其他類并且不想做改動,那么還有另外一種使用方式,覆寫attachBaseContext()方法:
@Override
protected void attachBaseContext(android.content.Context base) {
super.attachBaseContext(base);
android.support.multidex.MultiDex.install(this);
}
此時重新編譯打包后發現果然打包出多個dex文件,在安卓6.0上測試完美運行,
但是坑來了 :在4.4系統上一運行就奔潰!
log顯示無法找到application類:
java.lang.RuntimeException: Unable to instantiate application com.xx.xx java.lang.ClassNotFoundException: Didn't find class "com.xx.xx" on path: DexPathList[ xxxx]
后來知道在5.0系統上使用art 支持多dex,而低版本dalvik默認先加載主dex,如果啟動時需要的類不在主dex內就會報錯ClassNotFoundException。
解壓apk 發現里面有32個dex文件,一般不會拆分如此多,百度查閱后得知:
對于dex 的--multi-dex 選項設置與預編譯的library工程有沖突,如果你的應用中包含引用的lirary工程,需要將預編譯設置為false:
在 build.gradle中添加
dexOptions{
preDexLibraries = false
}
再次編譯打包后,apk內部只有2個dex文件,測試在4.4系統上完美運行!