什么是组件化
将项目功能拆分为多个module,每个module负责一个相对独立的业务逻辑,通过条件控制module在工程中的library、application性质。作为application时候module可以独立编译安装,开发过程中可以独立开发测试该module功能;作为library时候可以被项目集成打包,作为整个项目的一部分。
组件化工程结构
组件化全局配置
gradle.properties
增加变量控制组件是library还是application
isTestModule1Library=true
isTestModule2Library=true
build.gradle
增加全局配置信息
ext {
//***********签名信息配置***********************
keyAlias = 'test'
keyPassword = 'test123456'
storeFile = '../key/key.jks'
storePassword = 'test123456'
//************打包工具**********************
supportVersion = "28.0.0"
compileSdkVersion = 28
minSdkVersion = 16
targetSdkVersion = 28
//*************app版本**********************
versionCode = 100
versionName = "1.0.0"
//*************路由版本*****************
routerVersion = "1.1.3"
glideVersion = "4.7.1"
checkReleaseBuilds = false
abortOnError = false
minifyEnabled = false
}
app:build.gradle
apply plugin: 'com.android.application'
android {
//资源冲突则给资源命名增加前缀
// resourcePrefix "app_"
signingConfigs {
config {
keyAlias rootProject.ext.keyAlias
keyPassword rootProject.ext.keyPassword
storeFile file(rootProject.ext.storeFile)
storePassword rootProject.ext.storePassword
}
}
dataBinding {
enabled = true
}
compileSdkVersion rootProject.ext.compileSdkVersion
defaultConfig {
applicationId "com.xxx.xxx"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode rootProject.ext.versionCode
versionName rootProject.ext.versionName
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
javaCompileOptions {
annotationProcessorOptions {
arguments = [moduleName: project.getName()]
}
}
}
buildTypes {
release {
minifyEnabled rootProject.ext.minifyEnabled
signingConfig signingConfigs.config
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
android.applicationVariants.all { variant ->
variant.outputs.all {
outputFileName = "组件化demo_v${defaultConfig.versionName}.apk"
}
}
}
debug {
minifyEnabled false
signingConfig signingConfigs.config
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
packagingOptions {
exclude 'LICENSE.txt'
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
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 (isTestModule1Library.toBoolean()) {
implementation project(':testmodule1library')
}
if (isTestModule2Library.toBoolean()) {
implementation project(':testmodule2library')
}
annotationProcessor "com.alibaba:arouter-compiler:$rootProject.routerVersion"
}
组件lib:build.gradle
//条件控制lib是否作为独立application运行,实现模块编译
if (isTestModule1Library.toBoolean()) {
apply plugin: 'com.android.library'
} else {
apply plugin: 'com.android.application'
}
android {
dataBinding {
enabled = true
}
//资源冲突则给资源命名增加前缀
// resourcePrefix "test1_"
//***********gradle.properties全局配置******************
signingConfigs {
//签名配置
config {
keyAlias rootProject.ext.keyAlias
keyPassword rootProject.ext.keyPassword
storeFile file(rootProject.ext.storeFile)
storePassword rootProject.ext.storePassword
}
}
compileSdkVersion rootProject.ext.compileSdkVersion
defaultConfig {
if (!isTestModule1Library.toBoolean()) {
//做为application运行时需要配置applicationId
applicationId "com.zhoujq.lib.test1"
versionCode rootProject.ext.versionCode
versionName rootProject.ext.versionName
}
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
//阿里路由
javaCompileOptions {
annotationProcessorOptions {
arguments = [moduleName: project.getName()]
}
}
}
buildTypes {
release {
minifyEnabled rootProject.ext.minifyEnabled
signingConfig signingConfigs.config
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
if (!isTestModule1Library.toBoolean()) {
android.applicationVariants.all { variant ->
variant.outputs.all {
outputFileName = "组件化demoTest1_v${defaultConfig.versionName}.apk"
}
}
}
}
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
//lib和app使用不同的AndroidManifest
sourceSets {
main {
if (!isTestModule1Library.toBoolean()) {
manifest.srcFile 'src/main/module/AndroidManifest.xml'
} else {
manifest.srcFile 'src/main/AndroidManifest.xml'
java {
exclude 'debug/**'
}
}
}
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
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'
api project(':BaseLibrary')
annotationProcessor "com.alibaba:arouter-compiler:$rootProject.routerVersion"
}