Eclipse中使用multidex解決分包

? ? ? ?之前也處理過android方法數(shù)超出65536的問題鄙皇,不過當(dāng)時著急播玖,沒有采用分包的解決方式,直接在需要使用到j(luò)ar包的時候咖耘,動態(tài)加載翘簇,原理主要是DexClassLoader。這次這個問題又報出來了儿倒,沒辦法版保,正好時間充裕,就研究研究這個分包夫否。

? ? ? ? android官方有分包的方案彻犁,即android-support-multidex.jar,本文凰慈,主要講的是怎么在Eclipse上面使用這個jar汞幢。

? ? ? ? 網(wǎng)上有太多文章了,可是微谓,我看了絕大多數(shù)的森篷,都并沒有讓我的Eclipse成功產(chǎn)生一個包。整個過程分為下面幾步:

1豺型,安裝Gradle

2仲智,Eclipse安裝Gradle插件

3,Eclipse導(dǎo)出Gradle項(xiàng)目(會生成build.gradle等文件)

4姻氨,Config項(xiàng)目(Eclipse右擊钓辆,如果已經(jīng)是gradle項(xiàng)目,就沒有這個Config)

5,配置gradle

6前联,配置multidex

7功戚,遇到的問題

詳細(xì)內(nèi)容如下:

1,安裝Gradle

? ? ? ? 我本來以為安裝軟件嘛蛀恩,肯定得新的疫铜,新的肯定解決了舊版本不少bug,所以興沖沖的下載了3.4双谆,結(jié)果壳咕,maven里面還沒到這個版本,導(dǎo)致顽馋,后面的Config步驟走不通谓厘。最終,我在下載了五個版本的gradle后寸谜,發(fā)現(xiàn)2.14.1版本竟稳,能夠解決問題(選擇版本很重要,安裝過程很無腦)

2熊痴,Eclipse安裝插件

? ? ? ? ?我記得我下載的地址是:http://download.eclipse.org/buildship/updates/e46/releases/1.0

Eclipse里面->Help->Install New SoftWare他爸,輸入這個地址,就可以下載啦(插件不難果善,需要翻墻)

3诊笤,Eclipse導(dǎo)出Gradle項(xiàng)目

? ? ? ? ?安裝完插件后,我們重啟下eclipse就可以看到巾陕,原先的項(xiàng)目讨跟,右擊,Export鄙煤,里面會多一個選項(xiàng):Generate Gradle build files.然后一直繼續(xù)晾匠,有一個地方,需要你Force overriding of existing files梯刚。然后你的項(xiàng)目里面凉馆,就多出來一些文件build.gradle等文件(零要點(diǎn))

4,Config項(xiàng)目


Configure

如果這個時候直接config(上圖就是我說的config)亡资,eclipse會去下載一些gradle-all的包比如:


Eclipse正在下載

eclipse里面下載的速度澜共,不知道為啥,特別慢沟于,而且這個包的版本,和我們的也不是很符合植康,需要我們先把項(xiàng)目里面的gradle文件夾下面的wrapper文件夾下面的gradle-wrapper.properties里面的distributionUrl修改下改成2.14.1-all旷太。然后config,會很慢,或者你現(xiàn)在可以去我們的Gradle安裝目錄下面E:\gradle-2.14.1\wrapper\dists

可以看到eclipse正在下載這個版本的內(nèi)容供璧,我的eclipse速度慢存崖,我就直接把這個all.zip在瀏覽器中下載,然后直接拷貝到這個文件夾(E:\gradle-2.14.1\wrapper\dists\gradle-2.14.1-all\9ossqmv60fyibylheubs4isy9)里面去睡毒,然后解壓来惧。再去config,就不需要下載了演顾。

這個時候供搀,我這邊會出現(xiàn)一個問題,提示版本不匹配钠至,原因是葛虐,我的項(xiàng)目里面的build.gradle里面的classpath'com.android.tools.build:gradle:0.12.+'或者比這個大

我改成classpath'com.android.tools.build:gradle:2.1.+'就好了。修改完后棉钧,重新config會在E:\gradle-2.14.1\caches目錄下屿脐,創(chuàng)建一個modules-2文件夾,里面會下載很多東西宪卿,這個過程很漫長的诵。(小插曲)

這樣完了以后,我們的項(xiàng)目就變成gradle項(xiàng)目了佑钾,經(jīng)過我的嘗試西疤,這個時候,如果報次绘,這個項(xiàng)目不是主項(xiàng)目錯誤瘪阁,那么就把目前的項(xiàng)目都關(guān)閉掉,然后重新import 項(xiàng)目(gradle項(xiàng)目)邮偎,我在這個時候管跺,出現(xiàn)了原先的項(xiàng)目全部變成了java項(xiàng)目這樣的問題,別著急禾进,關(guān)閉項(xiàng)目豁跑,再import一次android 項(xiàng)目,就全部正常了泻云。(這兒的問題又多又煩)

5艇拍,我曾經(jīng)天真的以為,這樣以后宠纯,就可以直接run項(xiàng)目了卸夕,我的分包問題就解決了。婆瓜。快集。圖樣贡羔!

你這個是使用eclipse的run as Android Application和我們沒有安裝插件,是一樣的个初。

得使用另外一種run的方式蒂培,在你的Eclipse->Window找到GradleTasks里面找到你的項(xiàng)目

右擊你的項(xiàng)目Open Gradle run Configurations


會進(jìn)入一個配置頁面


Gradle Task里面輸入一個命令:clean (或者再加一個assemble)然后點(diǎn)擊ok就可以了

然后在你的eclipse的項(xiàng)目里面右擊項(xiàng)目 Run as->run configurations,


找到我們的項(xiàng)目(上圖中呜象,clean(清理) 后面可以接一個assemble(打包)),直接run。如果一切正常缴渊,那么钞速,就會在我們項(xiàng)目目錄下面產(chǎn)生一個build文件夾僧免,build\outputs\apk這個路徑下面禽额,會多三個包xxx-debug.apk就是我們運(yùn)行的包。

當(dāng)然弄息,我是遇到了問題的痊班,run后,報這個錯誤:

Could not find tools.jar. Please check that C:\Program Files\Java\jre1.8.0_45 contains a valid JDK installation.

這個時候就需要我們在run之前做一個配置摹量,上圖中涤伐,的JAVA HOME


我改成這樣,再運(yùn)行就成功了缨称。

如果我們大家的項(xiàng)目能這么簡單的搞定凝果,就沒有必要寫這個文章了。(有司機(jī)睦尽,這段路不崎嶇)

6器净,配置分包

關(guān)于這個配置,網(wǎng)上太多了当凡,我也拷貝了一份山害,如果你已經(jīng)配置好,就直接跳過吧

(1)我們自定義的Application需要繼承MultiDexApplication沿量,或者在oncreate里面調(diào)用MultiDex.install(this)浪慌。

(2)需要添加的內(nèi)容如下:

dependencies {

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

}

android {

? ? ? ? compileSdkVersion 20

? ? ? ? buildToolsVersion "23.0.1"http://這個地方如果是20.0.0,就會報下面的錯誤


? ? ? ? configurations{

? ? ? ? ? ? ? ?all*.exclude group: 'com.android.support', module: 'multidex'

? ? ? ? ?}

? ? ? ? defaultConfig {

? ? ? ? ? ? ? ? ? minSdkVersion 9

? ? ? ? ? ? ? ? ? targetSdkVersion 19

? ? ? ? ? ? ? ? ? multiDexEnabled true

? ? ? ? }

? ? ? ?dexOptions {

? ? ? ? ? ? ? ?preDexLibraries = false

? ? ? ? ? ? ? ?javaMaxHeapSize "2g"http://(后面會解釋這行的意義)注釋1

? ? ? ? }

? ? ? ? lintOptions {

? ? ? ? ? ? ? ?checkReleaseBuilds false

? ? ? ? ? ? ? abortOnError false//(后面會解釋這行的意義)注釋2

? ? ? ? ? }

? ? ? ? ?afterEvaluate{

? ? ? ? ? ? ?tasks.matching{

? ? ? ? ? ? ? ? ? ? ? ?it.name.startsWith('dex')

? ? ? ? ? ? ?}.each{dx->

? ? ? ? ? ? ? ? ? ? ? ?if(dx.additionalParameters == null) {

? ? ? ? ? ? ? ? ? ? ? ? ? ? dx.additionalParameters= ['--multi-dex']

? ? ? ? ? ? ? ? ? ? ? ?}else{

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?dx.additionalParameters+= '--multi-dex'

? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ?}

? ? ? }

}(網(wǎng)上一堆堆)

注釋1:如果不加朴则,大一點(diǎn)的項(xiàng)目权纤,assemble的時候,會內(nèi)存溢出乌妒,你看到的現(xiàn)象是汹想,項(xiàng)目在不停的反復(fù)的沒完的Launching delegate,最終導(dǎo)致內(nèi)存溢出(加大為2g后撤蚊。古掏。。不會報錯了而已)


Launching delegate

注釋2:assemble項(xiàng)目過程中侦啸,遇到的一些lint錯誤槽唾,就會中斷打包席镀,加上這個,就可以了夏漱,直到打包完成


其實(shí)到這里,項(xiàng)目使用Android Studio打開顶捷,已經(jīng)可以run了挂绰,可是,Eclipse不行服赎,他有他的任性葵蒂。

7,遇到的問題

我們來講講Eclipse的support-v4重虑,太煩人

我們的項(xiàng)目践付,會引用一些開源框架,比如說silding_menu_library缺厉,這個開源項(xiàng)目里面永高,就包含了support-v4的jar包,然后我們主項(xiàng)目提针,也有這樣的jar包命爬,或者,還有別的需要引用的辐脖,也包含這個jar饲宛。那么問題來了。當(dāng)我們assemble的時候嗜价,會報包沖突艇抠。部分截圖如下


意思就是,你那么多項(xiàng)目久锥,都有這個jar包家淤,我打包的時候,沖突了重復(fù)了奴拦。

然后媒鼓,我就去百度,發(fā)現(xiàn)好多人啊错妖,好多人遇到這個問題绿鸣。解決方案缺很單一,無非是exclude例如all*.exclude group: 'com.android.support', module: 'support-v4'

我沒有去Android Studio上面去測試了暂氯,我只是在Eclipse上面測試潮模,發(fā)現(xiàn),并沒有什么用痴施。

該沖突還是沖突擎厢。最終(真累究流,好幾次想要放棄,畢竟Android Studio已經(jīng)可以運(yùn)行了)动遭,解決方案是芬探,改用provided,如下:

silding_menu_library里面的build.gradle這樣配置dependencies

compile fileTree(dir: 'libs', exclude: ['android-support*.jar'], include: '*.jar')

provided files("libs/android-support-v4.jar")

含義就是編譯的時候厘惦,編譯support-v4包偷仿,但是打包的時候,不要support-v4宵蕉。

至此酝静,我的大一點(diǎn)的項(xiàng)目,也可以assemble了羡玛。從安裝gradle到最終assemble别智,花了3天。(這一段稼稿,是重點(diǎn))

補(bǔ)充:1薄榛,failed to find Build Tools revision 21.0.0 修改buildToolsVersion "21.0.0"

2,cannot resolve external dependency com.android.support:mutidex让歼,將extra里面下載一下(保證sdk\extras\android\support\multidex\library\libs目錄下蛇数,有android-support-multidex.jar包).

以上

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市是越,隨后出現(xiàn)的幾起案子耳舅,更是在濱河造成了極大的恐慌,老刑警劉巖倚评,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浦徊,死亡現(xiàn)場離奇詭異,居然都是意外死亡天梧,警方通過查閱死者的電腦和手機(jī)盔性,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來呢岗,“玉大人冕香,你說我怎么就攤上這事『笤ィ” “怎么了悉尾?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長挫酿。 經(jīng)常有香客問我构眯,道長,這世上最難降的妖魔是什么早龟? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任惫霸,我火速辦了婚禮猫缭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘壹店。我一直安慰自己猜丹,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布硅卢。 她就那樣靜靜地躺著居触,像睡著了一般。 火紅的嫁衣襯著肌膚如雪老赤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天制市,我揣著相機(jī)與錄音抬旺,去河邊找鬼。 笑死祥楣,一個胖子當(dāng)著我的面吹牛开财,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播误褪,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼责鳍,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了兽间?” 一聲冷哼從身側(cè)響起历葛,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎嘀略,沒想到半個月后恤溶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡帜羊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年咒程,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片讼育。...
    茶點(diǎn)故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡帐姻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出奶段,到底是詐尸還是另有隱情饥瓷,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布痹籍,位于F島的核電站扛伍,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏词裤。R本人自食惡果不足惜刺洒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一鳖宾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧逆航,春花似錦鼎文、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至抹剩,卻和暖如春撑帖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背澳眷。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工胡嘿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人钳踊。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓衷敌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親拓瞪。 傳聞我的和親對象是個殘疾皇子缴罗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評論 2 353

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,072評論 25 707
  • Android Studio正式版早已經(jīng)發(fā)布了,默認(rèn)使用Gradle構(gòu)建祭埂,GitHub上80%的Android項(xiàng)目...
    流哲羽閱讀 2,873評論 1 13
  • 時間不緊不慢的流逝面氓,你到這個世界已經(jīng)21天了。 每天都會給我們帶新的驚喜蛆橡。 你逐漸的適應(yīng)著這小小的房子侧但,小小的床。...
    mao眼閱讀 203評論 0 2
  • 一起當(dāng)過兵的叫戰(zhàn)友航罗,一起跳舞的叫舞友禀横,一起打麻將的當(dāng)然叫麻友啰! 因?yàn)槠綍r工作之余喜歡搓二把粥血,所以我的麻友還真不少...
    梅勝雪閱讀 918評論 16 11
  • 人生本是一場修行柏锄,旅行是修行之路的眼,讓你看到世界的另一面复亏,有人說:當(dāng)你去過的地方越多趾娃,懷著虔誠之心去看,你就發(fā)現(xiàn)...
    一月木水閱讀 825評論 0 0