Android組件化demo實(shí)現(xiàn)以及遇坑分享

首先貼出demo的github地址:GitHub - TenzLiu/TenzModuleDemo: android組件化demo

前段時(shí)間看到最近一直很火的Android組件化然后就自己擼了一個(gè)demo,期間遇到了不少問題以及坑,在此記錄一下,具體可以看項(xiàng)目源碼。

組件化無非就是將我們App項(xiàng)目下的幾個(gè)模塊在com.android.application與com.android.library之間切換。如下圖:分為modulelib(類庫模塊,一些基本工具類),modulemain(入口模塊),moduleone(模塊1),moduletwo(模塊2),而App只是擔(dān)當(dāng)一個(gè)空殼工程。


1:新建一個(gè)Android項(xiàng)目,但是這個(gè)App只是一個(gè)空殼工程

2:接下來就是創(chuàng)建這幾個(gè)module了,先都是以Android Library就行,然后就是在每個(gè)module的build.gradle下面修改

注意以為mudulelib只是作為一個(gè)根據(jù)庫,所以不需要改,然后就是isModule從何而來,就是在整個(gè)項(xiàng)目的gradle.properties

3:App項(xiàng)目App以及各個(gè)module之間的一來關(guān)系:

首先modulelib是負(fù)責(zé)引用一些第三方類庫以及一些基本代碼的負(fù)責(zé)和一些工具類

App:

就是說當(dāng)設(shè)置isModule=true的話各個(gè)模塊處理modulelib都可以獨(dú)立運(yùn)行測試,也就是可以交給多人分開開發(fā),最后只需要設(shè)置false就可以合并

各個(gè)模塊的module:

在這里需要注意,modulelib的引用類庫我們使用的是api,而不是implementation,因?yàn)閕mplementation只能在本module有效,但是你去到如App那里就無效了;有一些類庫引用是只有的比如butterknife:

implementation'com.jakewharton:butterknife:8.8.1'

annotationProcessor'com.jakewharton:butterknife-compiler:8.8.1'

implementation我們需要在modulelib里面,但是annotationProcessor卻需要在各個(gè)module里面都要寫上。

4:項(xiàng)目App怎么以modulemain為入口:

這里注意我們的App下面的minifest是沒有activity的

而在modulemain的minifest下面有一個(gè)聲明作為launcher的activity

這個(gè)程序已啟動(dòng)就會(huì)運(yùn)行modulemain下面的MainActivity了。

5:各個(gè)module之間的交互怎么處理呢,比如一些activity的跳轉(zhuǎn),還有不同歐冠module之間獲取fragment,這個(gè)上面也應(yīng)該看到我是用的阿里的ARouter路由了,用法也很簡單,官方鏈接:https://github.com/alibaba/ARouter。

如上面所說,在modulelib引用api'com.alibaba:arouter-api:1.3.1',然后在各個(gè)module下面annotationProcessor'com.alibaba:arouter-compiler:1.1.4'

然后在各個(gè)模塊的build.gradle下的defaultConfig下添加

javaCompileOptions {

annotationProcessorOptions {

arguments = [moduleName :project.getName() ]

}

}

這個(gè)官方文檔有說明的。

然后就是使用了,在module需要跳轉(zhuǎn)的activity或是需要獲取的fragment設(shè)置

接下來就是跳轉(zhuǎn)了,

至于fragment也是一樣,


以及fragment的獲取


6:在module里面的資源id在switch,case無法使用:

可以使用if,else代替

7:butterknife的使用問題

相信很多人都會(huì)用到butterknife注解,但是在module使用butterknife也會(huì)有坑,

如上面所說,在modulelib引用api'com.jakewharton:butterknife:8.5.1',然后在各個(gè)module下面annotationProcessor'com.jakewharton:butterknife-compiler:8.5.1'

在butterknife官方文檔也有說明,如果是在module里面使用的話還要在各個(gè)module添加

applyplugin:'com.jakewharton.butterknife'

當(dāng)然modulelib不需要,但是當(dāng)你使用butterknife最新版8.8.1的時(shí)候就會(huì)因?yàn)檫@個(gè)報(bào)錯(cuò),我也是在這里搞了很久馬波的,原來是butterknife最新版不兼容的問題吧應(yīng)該,只需要調(diào)低版本就好了,我這里是用了8.5.1

module使用butterknife還有一個(gè)R資源的問題,就是你butterknife注解使用的資源不能用R,而是要用butterknife提供的R2來尋找資源

8:之前說了每個(gè)module在設(shè)置isModule=true之后就可以單獨(dú)運(yùn)行調(diào)試了,那這個(gè)的monifest也需要有兩套吧,

資源文件:

再來看看內(nèi)容對比


剩下就擼碼吧。

完~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一.榜單介紹 排行榜包括四大類: 單一框架:僅提供路由、網(wǎng)絡(luò)層、UI層、通信層或其他單一功能的框架 混合開發(fā)框架:...
    偉子男閱讀 5,355評論 0 161
  • 請?jiān)试S我借鑒前輩們的東西~~~~ 感激不盡~~~~~ 以下為Android 框架排行榜 么么噠~ Android...
    嗯_(tái)新閱讀 2,504評論 3 32
  • 博客原文鏈接 Android百大框架排行榜(轉(zhuǎn)) 說明: 無聊寫一篇筆記式文章. 精力有限,很多錯(cuò)誤之處,受時(shí)間與...
    碼農(nóng)朱同學(xué)閱讀 3,116評論 0 27
  • 有時(shí)我覺得自己何其幸運(yùn),每當(dāng)我對什么事物心生向往或心有疑慮的時(shí)候,生活總會(huì)愛不經(jīng)意間給我感受的機(jī)會(huì)或者變著法...
    清秋霜露閱讀 381評論 10 6
  • 從我們出生開始,父母對我們的希望就開始慢慢加大,因?yàn)樗麄兿M覀兛梢匀?shí)現(xiàn)一個(gè)真實(shí)又快樂的人生。 也許...
    百合花邢佳煜閱讀 321評論 0 1

友情鏈接更多精彩內(nèi)容