demo地址
Android組件化專題,詳細(xì)講解組件化的使用及配置,以及實(shí)現(xiàn)的原理。
本文章講解了組件化的由來及配置,下期講解頁(yè)面路由跳轉(zhuǎn)及路由原理與apt
1. 組件化的由來
模塊化、組件化和插件化的關(guān)系?
(摘自百度百科)模塊化是指解決一個(gè)復(fù)雜的問題時(shí)自頂向下逐層把系統(tǒng)劃分為若干個(gè)模塊的過程,各個(gè)模塊可獨(dú)立工作。
在技術(shù)開發(fā)領(lǐng)域,模塊化是指拆分代碼,當(dāng)代碼特別臃腫的時(shí)候,用模塊化將代碼分而治之、解耦分層。
在Android的領(lǐng)域模塊化具體的實(shí)施方法為:組件化和插件化。
更加詳細(xì)的講解
組件化和插件化的區(qū)別
一套完整的插件化或組件化都必須能夠?qū)崿F(xiàn)單獨(dú)調(diào)試、集成編譯、數(shù)據(jù)傳輸、UI 跳轉(zhuǎn)、生命周期和代碼邊界這六大功能。插件化和組件化最重要而且是唯一的區(qū)別的就是:插件化可以動(dòng)態(tài)增加和修改線上的模塊,組件化的動(dòng)態(tài)能力相對(duì)較弱,只能對(duì)線上已有模塊進(jìn)行動(dòng)態(tài)的加載和卸載,不能新增和修改。
2. 怎樣實(shí)現(xiàn)組件化
要實(shí)現(xiàn)組件化需要考慮的問題主要包括下面幾個(gè):
- 代碼解耦。將一個(gè)龐大的工程拆分解耦,這是非常耗時(shí)耗力的工作,但這也是最基礎(chǔ)最重要的一步
- 數(shù)據(jù)傳遞。每個(gè)組件都有可能提供給其他組件使用,主項(xiàng)目與組件、組件與組件之間的數(shù)據(jù)傳遞
- UI跳轉(zhuǎn)。
- 組件的生命周期。組件加載、卸載和降維的生命周期
- 集成調(diào)試。在開發(fā)階段如何做到按需的編譯組件?一次調(diào)試中可能只有一兩個(gè)組件參與集成,這樣編譯的時(shí)間就會(huì)大大降低,提高開發(fā)效率。
- 代碼隔離。如何杜絕耦合的產(chǎn)生。
實(shí)現(xiàn)組件化的第一步 整理代碼拆分結(jié)構(gòu)
實(shí)現(xiàn)組件化的第一步首先是,整理項(xiàng)目工程結(jié)構(gòu),明確哪些功能是可以作為組件。
建議畫圖整理項(xiàng)目結(jié)構(gòu),如下圖:
實(shí)現(xiàn)組件化的第二步 在拆分代碼之前進(jìn)行基礎(chǔ)配置
統(tǒng)一整理builde配置以及組件/集成模式的切換,實(shí)現(xiàn)組件的單獨(dú)調(diào)試
在項(xiàng)目根部新建 config.buildext {//
false 集成模式//
true 組件模式isComponent =
falseandroidConfig = [compileSdkVersion: 27,minSdkVersion : 19,targetSdkVersion : 27,versionCode : 1,versionName :
"1.0"]appIdConfig = [app :
"com.prim.component.demo",moudle1:
"demo.prim.com.moudle1"]supportLibrary =
"27.1.1"dependencies = [appcompatv7:
"com.android.support:appcompat-v7:${supportLibrary}"]
}
復(fù)制代碼主build中加入配置apply from:
"config.gradle"復(fù)制代碼moudle 配置,調(diào)用config.gradle 中的配置//配置apply
if (isComponent) {apply plugin:
'com.android.application'
}
else {apply plugin:
'com.android.library'
}//獲取config文件中的配置 rootProject 項(xiàng)目的主對(duì)象
def config = rootProject.ext.androidConfigdef appIdConfig = rootProject.ext.appIdConfigdef dependenciesConfig = rootProject.ext.dependenciesandroid {compileSdkVersion config.compileSdkVersiondefaultConfig {minSdkVersion config.minSdkVersiontargetSdkVersion config.targetSdkVersionversionCode config.versionCodeversionName config.versionName
testInstrumentationRunner
"android.support.test.runner.AndroidJUnitRunner"//如果moudle為組件 配置組件的app ID
if (isComponent) {applicationId appIdConfig.app}//配置BuildConfig 代碼中可以調(diào)用判斷moudle是否為組件buildConfigField(
"boolean",
"isComponent",String.valueOf(isComponent))//配置資源文件
sourceSets {main {
if (isComponent) {//如果moudle為組件則配置 AndroidManifest manifest.srcFile
'src/main/moudle/AndroidManifest.xml'// 配置組件模式下的java代碼主文件java.srcDirs
'src/main/java',
'src/main/moudle/java'}
else {manifest.srcFile
'src/main/AndroidManifest.xml'}}}}buildTypes {release {minifyEnabled
falseproguardFiles getDefaultProguardFile(
'proguard-android.txt'),
'proguard-rules.pro'}}}dependencies {implementation fileTree(dir:
'libs', include: [
'*.jar'])implementation dependenciesConfig.appcompatv7implementation
'com.android.support.constraint:constraint-layout:+'testImplementation
'junit:junit:4.12'androidTestImplementation
'com.android.support.test:runner:+'androidTestImplementation
'com.android.support.test.espresso:espresso-core:3.0.2'
}
復(fù)制代碼app 配置,調(diào)用組件apply plugin:
'com.android.application'def config = rootProject.ext.androidConfigdef appIdConfig = rootProject.ext.appIdConfigdef dependenciesConfig = rootProject.ext.dependenciesandroid {compileSdkVersion config.compileSdkVersiondefaultConfig {applicationId appIdConfig.appminSdkVersion config.minSdkVersiontargetSdkVersion config.targetSdkVersionversionCode config.versionCodeversionName config.versionName
testInstrumentationRunner
"android.support.test.runner.AndroidJUnitRunner"//配置BuildConfig 代碼中可以調(diào)用判斷moudle是否為組件buildConfigField(
"boolean",
"isComponent",String.valueOf(isComponent))}buildTypes {release {minifyEnabled
falseproguardFiles getDefaultProguardFile(
'proguard-android.txt'),
'proguard-rules.pro'}}
}dependencies {implementation fileTree(dir:
'libs', include: [
'*.jar'])implementation dependenciesConfig.appcompatv7implementation
'com.android.support.constraint:constraint-layout:+'testImplementation
'junit:junit:4.12'androidTestImplementation
'com.android.support.test:runner:1.0.2'androidTestImplementation
'com.android.support.test.espresso:espresso-core:3.0.2'if (!isComponent){//當(dāng)moudle1 不為組件時(shí)才允許導(dǎo)入implementation project(
':moudle1')}
}
復(fù)制代碼下期講解頁(yè)面路由跳轉(zhuǎn)及路由原理與apt。
Android的組件化專題: 組件化配置
APT實(shí)戰(zhàn)
路由框架原理
模塊間的業(yè)務(wù)通信
總結(jié)
以上是生活随笔為你收集整理的Android组件化专题 - 组件化配置的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。