組件化
概況:
提高編譯速度、提升協(xié)作效率、功能重用
代碼重用和解耦

組件模式和集成模式切換
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

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



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

Java- poet:

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

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ò)程

流程: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組件化