組件化系列文章介紹的內(nèi)容稍微多了點,本著研究透這玩意的精神,從組件化的簡介開始說起。
簡介
什么是組件化?
將多個功能模板拆分、重組的過程。
為什么要使用組件化?
1、加快編譯速度,提高開發(fā)效率,增強(qiáng)可維護(hù)性、移植性。
2、高內(nèi)聚(軟件模塊是由相關(guān)性很強(qiáng)的代碼組成,只負(fù)責(zé)一項任務(wù),即單一責(zé)任原則)、低耦合(模塊間的依賴關(guān)系低)。
3、使每個業(yè)務(wù)模塊變得相對獨立,各個組件在組件模式下可以獨立開發(fā)調(diào)試,集成模式下又可以集成到”app殼工程”中,從而得到一個具有完整功能的APP。
組件化架構(gòu)構(gòu)成:
組件化、模塊化與插件化
/ | 概念 | 優(yōu)點 |
---|---|---|
組件化 | 解耦復(fù)雜系統(tǒng)時,將多個功能模板拆分、重組的過程。 | 1、提高組件復(fù)用性。 2、提高工程編譯速度。 3、降低組件間的耦合。 4、能夠獨立運行在設(shè)備上。 5、利于多人團(tuán)隊協(xié)作開發(fā)。 |
模塊化 | 將代碼庫組織為多個松散耦合的獨立部分的做法。 | 1、提高代碼復(fù)用性。 2、降低組件間的耦合。 3、利于多人團(tuán)隊協(xié)作開發(fā)。 |
插件化 | 插件化源于免安裝運行apk的想法,免安裝的apk可以理解為插件,支持插件的app成為宿主。 | 1、動態(tài)更新插件。 2、解決方法數(shù)超過65535的問題。 3、宿主和插件分開編譯,提升開發(fā)效率。 4、減少安裝Apk的體積、按需下載模塊。 |
組件化和插件化的區(qū)別
- 組件化:組件化開發(fā)就是將一個app分成多個模塊,每一個模塊都是一個組件,開發(fā)過程中讓這些組件相互依賴或者單獨調(diào)試。最終發(fā)布將這些組件合并統(tǒng)一成一個apk。
- 插件化:插件化開發(fā)是將整個app拆分成多個模塊,這些模塊包含一個宿主和多個插件,每個模塊都是一個apk,最終打包的時候宿主apk和插件apk分開打包。
開始
啟動Android Studio創(chuàng)建一個Android項目,在項目里new Module
,彈出的Create New Module
中選擇Android Libary
或Phone & Tablet
,配置完成Module name
等參數(shù)后點擊finish
完成創(chuàng)建。
在上圖中,創(chuàng)建了common
與order
組件,common
組件推薦作為一個基礎(chǔ)庫,第三方的一些都在該庫進(jìn)行依賴,其它組件庫使用第三方庫直接引用common
組件即可,一定程度上避免了組件庫重復(fù)引用的問題。
創(chuàng)建好的Module
文件目錄下都有一個屬于自己的build.gradle
文件,Gradle
文件執(zhí)行順序:settings.gradle
> Project build.gradle
> Module build.gradle
。
在Module build.gradle
中可以通過plugins
修改當(dāng)前Model
為application
或library
,如下:
plugins {
id 'com.android.application' // application,可以作為app獨立運行
id 'com.android.library' // library,可作為aar包引入application包使用
}
com.android.application
與com.android.library
無法共存,同一個Model
只能存在一個。不同的Model
可以相互使用implementation
引入到Model
中,使得Model
里的方法可以相互調(diào)用。
創(chuàng)建配置共享文件
在Android項目中,每個Module
都有自己的.gradle
文件,Gradle
是一個使用Groovy
語言(核心代碼是 Java
)編寫的構(gòu)建工具,具體使用教程可參考:來自Gradle開發(fā)團(tuán)隊的Gradle入門教程
使用組件化的項目一般會有多個 Module
,為了使不同 Module
的版本庫配置使用相同的參數(shù),需要在項目根目錄創(chuàng)建一個app_config.gradle
,用以共享組件間相同的配置,避免過度碎片化。
app_config.gradle:
ext {
app_android = [
compileSdk : 32,
minSdk : 21,
targetSdk : 32,
versionCode: 1,
versionName: "1.0"
]
}
app_config.gradle
要想使其它 Module
都可以引用,需要在 Project
的 build.gradle
中對其進(jìn)行全局引用。
apply from: 'app_config.gradle'
這樣一來,所有 Module
的 build.gradle
就可以使用 app_config.gradle
的共享參數(shù)了
android {
compileSdk app_android.compileSdk
defaultConfig {
minSdk app_android.minSdk
targetSdk app_android.targetSdk
versionCode app_android.versionCode
versionName app_android.versionName
}
}
打包模式配置
組件化的優(yōu)點中有一個加快編譯速度、提升開發(fā)效率的功能。
上面說到:在 Module
的 build.gradle
可以通過修改 application
或 library
控制當(dāng)前組件為打包或集成模式。為了方便后續(xù)修改打包模式,app_config.gradle
增加了一個 isRelease
的打包配置參數(shù)。
ext {
// 控制打包的模式
isRelease = true
}
通過控制 isRelease
的布爾值,即可實現(xiàn)自動配置對應(yīng)的 build.gradle
值,當(dāng)然,前提是自動配置的代碼提前寫好。
// 公用的插件
plugins {
id 'org.jetbrains.kotlin.android'
}
// 根據(jù)打包模式使用的插件
if (isRelease){
apply plugin : 'com.android.library'
} else {
apply plugin : 'com.android.application'
}
當(dāng)模塊處于打包模式時,為避免安裝一次出現(xiàn)兩個應(yīng)用圖標(biāo)的問題,整個App工程的所有 AndroidManifest.xml
只能出現(xiàn)一個帶android.intent.action.MAIN
的 intent-filter
。
針對這種情況需要額外對不同打包模式下的 AndroidManifest.xml
文件做處理。
為此,我們可以在除主工程以外,需要在 debug
期間作為 application
工程獨立運行項目的 build.gradle
文件添加以下配置。
android {
// 源集 —— 用來設(shè)置Java目錄或者資源目錄
sourceSets {
main {
if (!isRelease) {
// 如果是組件化模式,需要單獨運行時使用該文件
manifest.srcFile 'src/main/debug/AndroidManifest.xml'
} else {
// 集成化模式,整個項目打包時使用該文件
manifest.srcFile 'src/main/AndroidManifest.xml'
java {
// release 時 debug 目錄下的Java文件不需要合并到主工程
exclude '**/debug/**'
}
}
}
}
}
接著在main
文件夾添加debug
文件,將用到的 AndroidManifest.xml
文件放入里面,并將 src/main/AndroidManifest.xml
文件的配置設(shè)置為集成模式,可參考如下代碼:
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application>
<activity
android:name=".MainActivity"
android:exported="true" >
</activity>
</application>
</manifest>
APT與JavaPoet
組件化的進(jìn)一步使用需要用到APT
,APT
全稱為Annotation Processing Tool
,即注解處理器。有很多的框架都是基于APT實現(xiàn),例如:ButterKnife
、Dagger
、EvenBus
、ARouter
等。
關(guān)于 APT
與 JavaPoet
的相關(guān)知識已整理好相關(guān)文章 ?? 【Android】APT與JavaPoet學(xué)習(xí)與實戰(zhàn)
前往本文項目?? 【Android】從零搭建組件化項目文章來源:http://www.zghlxwxcb.cn/news/detail-554719.html
參考文檔
1、Android 組件化實戰(zhàn)(視頻)文章來源地址http://www.zghlxwxcb.cn/news/detail-554719.html
到了這里,關(guān)于【Android】從零搭建組件化項目的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!