Android組件化demo實現以及遇坑分享


首先貼出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的

image.png
image.png

而在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

閱讀更多

2018年Android面試題含答案--適合中高級(下)

屏幕適配全方位解析

kotlin學習筆記-異常好玩的list集合總結

我的Android重構之旅:插件化篇

相信自己,沒有做不到的,只有想不到的

在這里獲得的不僅僅是技術!

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM