首先貼出demo的github地址:GitHub - TenzLiu/TenzModuleDemo: android組件化demo
作者:TenzLiu
原文鏈接:https://www.jianshu.com/p/416ca689ebc2
前言
前段時間看到最近一直很火的Android組件化然后就自己擼了一個demo,期間遇到了不少問題以及坑,在此記錄一下,具體可以看項目源碼。
組件化無非就是將我們App項目下的幾個模塊在com.android.application與com.android.library之間切換。如下圖:分為modulelib(類庫模塊,一些基本工具類),modulemain(入口模塊),moduleone(模塊1),moduletwo(模塊2),而App只是擔當一個空殼工程。
1:新建一個Android項目,但是這個App只是一個空殼工程
2:接下來就是創建這幾個module了,先都是以Android Library就行,然后就是在每個module的build.gradle下面修改
注意以為mudulelib只是作為一個根據庫,所以不需要改,然后就是isModule從何而來,就是在整個項目的gradle.properties
3:App項目App以及各個module之間的一來關系:
首先modulelib是負責引用一些第三方類庫以及一些基本代碼的負責和一些工具類
App:
就是說當設置isModule=true的話各個模塊處理modulelib都可以獨立運行測試,也就是可以交給多人分開開發,最后只需要設置false就可以合並
各個模塊的module:
在這里需要注意,modulelib的引用類庫我們使用的是api,而不是implementation,因為implementation只能在本module有效,但是你去到如App那里就無效了;有一些類庫引用是只有的比如butterknife:
implementation'com.jakewharton:butterknife:8.8.1'
annotationProcessor'com.jakewharton:butterknife-compiler:8.8.1'
implementation我們需要在modulelib里面,但是annotationProcessor卻需要在各個module里面都要寫上。
4:項目App怎么以modulemain為入口:
這里注意我們的App下面的minifest是沒有activity的
而在modulemain的minifest下面有一個聲明作為launcher的activity
這個程序已啟動就會運行modulemain下面的MainActivity了。
5:各個module之間的交互怎么處理呢,比如一些activity的跳轉,還有不同歐冠module之間獲取fragment,這個上面也應該看到我是用的阿里的ARouter路由了,用法也很簡單,官方鏈接:https://github.com/alibaba/ARouter。
如上面所說,在modulelib引用api'com.alibaba:arouter-api:1.3.1',然后在各個module下面annotationProcessor'com.alibaba:arouter-compiler:1.1.4'
然后在各個模塊的build.gradle下的defaultConfig下添加
javaCompileOptions {
annotationProcessorOptions {
arguments = [moduleName :project.getName() ] } }
這個官方文檔有說明的。
然后就是使用了,在module需要跳轉的activity或是需要獲取的fragment設置
接下來就是跳轉了,
至於fragment也是一樣,
以及fragment的獲取
6:在module里面的資源id在switch,case無法使用:
可以使用if,else代替
7:butterknife的使用問題
相信很多人都會用到butterknife注解,但是在module使用bb utterknife也會有坑,
如上面所說,在modulelib引用api'com.jakewharton:butterknife:8.5.1',然后在各個module下面annotationProcessor'com.jakewharton:butterknife-compiler:8.5.1'
在butterknife官方文檔也有說明,如果是在module里面使用的話還要在各個module添加
applyplugin:'com.jakewharton.butterknife'
當然modulelib不需要,但是當你使用butterknife最新版8.8.1的時候就會因為這個報錯,我也是在這里搞了很久馬波的,原來是butterknife最新版不兼容的問題吧應該,只需要調低版本就好了,我這里是用了8.5.1
module使用butterknife還有一個R資源的問題,就是你butterknife注解使用的資源不能用R,而是要用butterknife提供的R2來尋找資源
8:之前說了每個module在設置isModule=true之后就可以單獨運行調試了,那這個的monifest也需要有兩套吧,
資源文件:
再來看看內容對比
剩下就擼碼吧。
完~
作者:TenzLiu
原文鏈接:https://www.jianshu.com/p/416ca689ebc2
閱讀更多
相信自己,沒有做不到的,只有想不到的
在這里獲得的不僅僅是技術!
