Multidex Android DEX手動(dòng)拆包

隨著業(yè)務(wù)規(guī)模發(fā)展到一定程度蜂嗽,不斷地加入新功能、添加新的類庫止毕,代碼在急劇的膨脹,相應(yīng)的apk包的大小也急劇增加漠趁, 那么終有一天扁凛,你會(huì)不幸遇到這個(gè)錯(cuò)誤:

Conversion to Dalvik format failed:Unable to execute dex: method ID not in [0, 0xffff]: 65536

具體原因如下:

http://tech.meituan.com/mt-android-auto-split-dex.html?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io

1.修改Gradle配置文件,啟用MultiDex并包含MultiDex支持:

android {

defaultConfig {

? ? ? ? multiDexEnabled true

? ? }

}

dependencies {

? ? ? ? compile'com.android.support:multidex:1.0.1'

}

在AndroidManifest.xml的application中聲明android.support.MultiDex.MultiDexApplication闯传;

如果你已經(jīng)有自己的Application類谨朝,讓其繼承MultiDexApplication;

如果你的Application類已經(jīng)繼承自其它類甥绿,你不想/能修改它字币,那么可以重寫attachBaseContext()方法:

@Override

protected void attachBaseContext(Context base) {

? ? super.attachBaseContext(base);

? ? MultiDex.install(this);

}

MultiDex自動(dòng)拆包帶來的問題:

1.在冷啟動(dòng)時(shí)因?yàn)樾枰惭bDEX文件,如果DEX文件過大時(shí)共缕,處理時(shí)間過長洗出,很容易引發(fā)ANR(Application Not Responding);

2.采用MultiDex方案的應(yīng)用可能不能在低于Android 4.0 (API level 14) 機(jī)器上啟動(dòng)图谷,這個(gè)主要是因?yàn)镈alvik linearAlloc的一個(gè)bug ;

3.采用MultiDex方案的應(yīng)用因?yàn)樾枰暾堃粋€(gè)很大的內(nèi)存翩活,在運(yùn)行時(shí)可能導(dǎo)致程序的崩潰,這個(gè)主要是因?yàn)镈alvik linearAlloc 的一個(gè)限制便贵,這個(gè)限制在 Android 4.0 (API level 14)已經(jīng)增加了, 應(yīng)用也有可能在低于 Android 5.0 (API level 21)版本的機(jī)器上觸發(fā)這個(gè)限制菠镇;

MultiDex手動(dòng)拆包:

Android Studio 中提供了相應(yīng)的手動(dòng)拆包的方法:

1.multiDexKeepFile:手動(dòng)加入要放到Main.dex中的類。

例:

android/support/multidex/MultiDex.class

2.multiDexKeepProguard:以Proguard的方式手動(dòng)加入要放到Main.dex中的類承璃。

例:

-keep class android.support.multidex.** {

? ? *;

}

使用

build.gradle中配置:

android {

? ? defaultConfig {

? ? ? ? multiDexEnabled true

? ? ? ? // 'multidex.pro'和build.gradle同一個(gè)目錄

? ? ? ? multiDexKeepProguard file('multidex.pro')

? ? }

}

dependencies {

? ? compile'com.android.support:multidex:1.0.1'

}

multidex.pro加入:

-keep class android.support.multidex.** {

*;

}


編譯時(shí)利耍,相應(yīng)的文件文件會(huì)加入到

build/intermediates/multi-dex/***/maindexlist.txt

build/intermediates/multi-dex/***/manifest_keep.txt

總結(jié)

上面是我在使用MultiDex過程中發(fā)現(xiàn)的DEX手動(dòng)拆包的方案。由于時(shí)間倉促,項(xiàng)目要趕進(jìn)度堂竟,所以直接貼代碼了,關(guān)于后續(xù)的MultiDex.install(this)異步加載方法和出現(xiàn)ClassNotFoundException的異常玻佩,以后再詳細(xì)的去寫吧出嘹。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市咬崔,隨后出現(xiàn)的幾起案子税稼,更是在濱河造成了極大的恐慌,老刑警劉巖垮斯,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件郎仆,死亡現(xiàn)場離奇詭異,居然都是意外死亡兜蠕,警方通過查閱死者的電腦和手機(jī)扰肌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來熊杨,“玉大人曙旭,你說我怎么就攤上這事【Ц” “怎么了桂躏?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長川陆。 經(jīng)常有香客問我剂习,道長,這世上最難降的妖魔是什么较沪? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任鳞绕,我火速辦了婚禮,結(jié)果婚禮上尸曼,老公的妹妹穿的比我還像新娘猾昆。我一直安慰自己,他們只是感情好骡苞,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布垂蜗。 她就那樣靜靜地躺著,像睡著了一般解幽。 火紅的嫁衣襯著肌膚如雪贴见。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天躲株,我揣著相機(jī)與錄音片部,去河邊找鬼。 笑死霜定,一個(gè)胖子當(dāng)著我的面吹牛档悠,可吹牛的內(nèi)容都是我干的廊鸥。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼辖所,長吁一口氣:“原來是場噩夢啊……” “哼惰说!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起缘回,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤吆视,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后酥宴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體啦吧,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年拙寡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了授滓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,834評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡肆糕,死狀恐怖褒墨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情擎宝,我是刑警寧澤郁妈,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站绍申,受9級特大地震影響噩咪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜极阅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一胃碾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧筋搏,春花似錦仆百、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至髓迎,卻和暖如春峦朗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背排龄。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工波势, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓尺铣,卻偏偏與公主長得像拴曲,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子凛忿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容