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

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

做者:TenzLiu
原文連接:https://www.jianshu.com/p/416ca689ebc2java

前言

前段時間看到最近一直很火的Android組件化而後就本身擼了一個demo,期間遇到了很多問題以及坑,在此記錄一下,具體能夠看項目源碼。android

組件化無非就是將咱們App項目下的幾個模塊在com.android.application與com.android.library之間切換。以下圖:分爲modulelib(類庫模塊,一些基本工具類),modulemain(入口模塊),moduleone(模塊1),moduletwo(模塊2),而App只是擔當一個空殼工程。git


 
1:新建一個Android項目,可是這個App只是一個空殼工程

 
2:接下來就是建立這幾個module了,先都是以Android Library就行,而後就是在每一個module的build.gradle下面修改

 

注意覺得mudulelib只是做爲一個根據庫,因此不須要改,而後就是isModule從何而來,就是在整個項目的gradle.propertiesgithub


 
3:App項目App以及各個module之間的一來關係:

首先modulelib是負責引用一些第三方類庫以及一些基本代碼的負責和一些工具類面試


 

App:api


 

就是說當設置isModule=true的話各個模塊處理modulelib均可以獨立運行測試,也就是能夠交給多人分開開發,最後只須要設置false就能夠合併app

各個模塊的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
相關文章
相關標籤/搜索