組件化

組件化

概況:

提高編譯速度、提升協(xié)作效率、功能重用

代碼重用和解耦

all.png

組件模式和集成模式切換

if (iMisModule.toBoolean()) {
apply plugin: 'com.android.application'
} else {
apply plugin: 'com.android.library'
}

if(iMisModule.toBoolean()) {
manifest.srcFile 'src/main/debug/AndroidManifest.xml'
}else {
manifest.srcFile 'src/main/AndroidManifest.xml'
}

1.大型項(xiàng)目只編譯某些module

2.海外分享和國(guó)內(nèi)分享依賴(lài)編譯不同module帶不同sdk

weiboshare.png
Arouter流程圖

本質(zhì)解決:不同module無(wú)法相互引用對(duì)方的類(lèi)的問(wèn)題

arouter.png
arouter1.png
arouter2.png

1.通過(guò)router注解創(chuàng)建映射類(lèi)
2.init navigation 通過(guò)映射構(gòu)建postcard進(jìn)行跳轉(zhuǎn)等

apt語(yǔ)javapoet

apt注解處理器(參見(jiàn)RouteProcessor) :

APT(Annotation Processing Tool):
編譯期注解處理技術(shù),通過(guò)自定義注解和注解處理器來(lái)實(shí)現(xiàn)編譯期生成代碼的功能,并且將生成的代碼和源代碼一起編譯成 class 文件
1.基礎(chǔ)配置依賴(lài)等
2.繼承AbstractProcessor
3.重寫(xiě)init方法對(duì)Element操作
什么是Element Element

element.png
Java- poet:
javapoet.png
Arouter processor過(guò)程:

動(dòng)態(tài)生成class文件過(guò)程

arouter_poet.png

Android Gradle Transform

Gradle Transform是Android官方提供給開(kāi)發(fā)者在項(xiàng)目構(gòu)建階段(.class -> .dex轉(zhuǎn)換期間)用來(lái)修改.class文件的一套標(biāo)準(zhǔn)API,即把輸入的.class文件轉(zhuǎn)變成目標(biāo)字節(jié)碼文件。
目前比較經(jīng)典的應(yīng)用是字節(jié)碼插樁、代碼注入等。
參考:鏈接

1.gradle依賴(lài)
2.創(chuàng)建groovy 目錄,創(chuàng)建 Transform 類(lèi)(ARouter RegisterTransform)
transform方法中可以遍歷所有的jar包里面文件和目錄文件
DirectoryInput 集合 是指以源代碼方式參與項(xiàng)目編譯的所有目錄結(jié)構(gòu)及其目錄下的源代碼
JarInput 集合 是指以 jar 包方式參與項(xiàng)目編譯的本地 jar 包和遠(yuǎn)程 jar 包,包含 aar

第三步創(chuàng)建 plugin(參考ARouter PluginLaunch), 注冊(cè) transform

第四步 創(chuàng)建 properties 文件 在 plugin/src/main 目錄下創(chuàng)建新目錄 resources/META-INFO/gradle-plguins, 然后創(chuàng)建文件,內(nèi)容指定為上一步創(chuàng)建的 plugin

第五步,修改相關(guān)的 build.gradle 文件,添加依賴(lài)

Arouter 動(dòng)態(tài)注冊(cè)loadRouterMap register 方法的過(guò)程


A_transform.png

流程:RegisterTransform 的transform掃描所有的class文件

調(diào)用ScanUtil.scanJar()掃描jar包
調(diào)用ScanUtil.scanClass()掃描所有class文件
ScanClassVisitor掃描每個(gè)class類(lèi),進(jìn)行接口判斷,如果在RegisterTransform.registerList配置的接口中,就搜集該類(lèi)
掃描時(shí)需要判斷class是否在com/alibaba/android/arouter/routes/的包下
在搜索jar包時(shí),順便把LogisticsCenter所在的文件找到,方便代碼插入到這個(gè)類(lèi)中

事件總線(xiàn)

參考文章:
Android組件化架構(gòu)
Android組件化

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

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

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