组件化介绍以及搭建步骤
文章目录
前言
随着APP开发功能越来越丰富,组件化开发已逐渐成为架构的优选。组件化是指解耦复杂系统,将多个功能模板拆分、重组的过程。组件化的目的是将相对集中的功能分列与同一Module中,单一Moudle能够独立运行,大大缩减每次项目的编译时间,增加同类型项目的复用性
提示:以下是本篇文章正文内容,下面案例可供参考
一、创建架构
1.创建壳工程
也是创建一个安卓项目
2.创Module项目
这里我们创建三个module项目为例,分别为common ,moduleone,muduletwo,这里的common作为公共组件module使用
右击app -> New -> Module,选择 Android Library
重复上面的三个步骤 创建三个module,即为组件
3.build.gradle的配置
观察发现壳工程的build.gradle 使用的apply plugins 是com.android.application
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
}
mudule项目使用的是com.android.library
plugins {
id 'com.android.library'
id 'org.jetbrains.kotlin.android'
}
可以通过改变 module里的 apply plugins 为com.android.application
3.壳工程增加module的引用
点击File-> Project Structure-> Dependencies,选择app然后点+
5.common组件引用修改
将implementation 只能在当前组件使用第三方库修改为全局使用api的方式引用
dependencies {
api 'androidx.core:core-ktx:1.8.0'
api 'androidx.appcompat:appcompat:1.4.1'
api 'com.google.android.material:material:1.5.0'
api 'androidx.constraintlayout:constraintlayout:2.1.3'
}
6.在项目的的build中添加如下配置
allprojects{
repositories {
maven{ url 'https://maven.aliyun.com/repository/google'}
mavenCentral()
gradlePluginPortal()
}
}
并去掉settings.gradle模块下的dependencyResolutionManagement
7.在需使用 common 的模块的build.gradle 中添加对common的依赖
dependencies {
implementation project(path: ':common')
}
这样我们可以在moduleone中使用common的资源文件了
二、组件独立运行
前面已经介绍了module是作为壳app的组件运行 还是单独作为app运行是根据apply plugins 中插件的配置com.android.application 还是 com.android.library来决定,如果只有少量组件时可以使用手动修改的方式,但是如果组件过多则过于麻烦,这里使用一个全局配置开关来设置
1.在项目的build.gradle中添加全局配置 isModule
使用变量配置来控制module是以组件运行还是app的方式独立运行
ext{
isModule=false
}
2.在module的build.gradle中添加控制语句
if (isModule){
apply plugin: 'com.android.application'
}else {
apply plugin: 'com.android.library'
}
设置isModule=true,然后Sync Now 一下可以发现module变成可运行状态
3.moduleone的mainfest没有Launcher Activity
如果在现有架构模式下增加
android:name=".ModuleAActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
在合并mainfest时会有冲突,为了解决这个问题,我们为moduleone独立运行是创建独立的AndroidManifest.xml
文件,在mian目录下新建mainfest目录,新建AndroidManifest.xml在文件增加以下
通过定义的全局isModule字段来配置不同的场景下使用不同的mainfest文件,在moduleone的build.gradle下配置如下
sourceSets {
main {
if (isModule) {
manifest.srcFile('src/main/mainfest/AndroidManifest.xml')
} else {
manifest.srcFile('src/main/AndroidManifest.xml')
}
}
}
三、统一版本号管理
由于不同的module不同的人开发,容易出现不同的module版本号不一致的问题,这里项目的build.gradle 增加一个全局的配置如下
android=[
compileSdkVersion: 33,
buildToolsVersion: '31.0.0',
minSdkVersion: 24,
targetSdkVersion:33,
versionCode :1,
versionName:"1.0"
]
在组件中引用
compileSdk rootProject.ext.android.compileSdkVersion
buildToolsVersion rootProject.ext.android.buildToolsVersion
defaultConfig {
minSdk rootProject.ext.android.minSdkVersion
targetSdk rootProject.ext.android.targetSdkVersion
versionCode rootProject.ext.android.versionCode
versionName rootProject.ext.android.versionName
}
四、项目源码地址
https://download.csdn.net/download/believeinbelieve/87790664