Gadle配置
统一依赖管理
创建配置文件config.gradle文件,记录需要统计管理的信息。里面包括了各个依赖库的版本、各个模块的id、正式环境和测试环境的地址信息等等。
ext {
// 定义一个项目全局变量isRelease,用于动态切换:组件化模式 / 集成化模式
// false: 组件化模式(子模块可以独立运行),true :集成化模式(打包整个项目apk,子模块不可独立运行)
isRelease = false
// 建立Map存储,对象名、key可以自定义
androidId = [
compileSdkVersion: 30,
minSdkVersion : 21,
targetSdkVersion : 30,
versionCode : 1,
versionName : "1.0"
]
appId = ["app" : "com.loveqrc.moduledemo",
"user": "com.loveqrc.moduledemo.user",
]
url = [
"debug" : "https://1.2.3.4/debug",
"release": "https://5.6.7.8/release"
]
supportLibrary = "28.0.0"
dependencies = [
// ${supportLibrary}表示引用一个变量
// "recyclerview": "com.android.support:recyclerview-v7:${supportLibrary}",
"constraintlayout": "androidx.constraintlayout:constraintlayout:2.0.4",
"corekotlin": "androidx.core:core-ktx:1.3.2",
"appcompat" : "androidx.appcompat:appcompat:1.2.0",
"material" : "com.google.android.material:material:1.3.0",
]
}
配置完成后,在项目的根build.gradle中进行引入
// 非常重要,根目录的build.gradle头部加入自定义gradle,相当于layout布局中include
apply from: "config.gradle"
buildscript {
repositories {
google()
mavenCentral()
}
dependencies {
classpath "com.android.tools.build:gradle:7.0.0"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.21"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
引入成功后,就可以在各个模块中使用了,也可以动态改变isRelease值来切换项目是组件化还是集成化。
组件化与集成化切换
在模块中build.gradle配置是否是发布版本,进行组件化与集成化切换。
if (isRelease) { // 如果是发布版本时,各个模块都不能独立运行
apply plugin: 'com.android.library'
} else {
apply plugin: 'com.android.application'
}
apply plugin: 'kotlin-android'
配置defaultConfig
compileSdk rootAndroidId.compileSdk
defaultConfig {
if (!isRelease) { // 如果是集成化模式,不能有applicationId
applicationId appId.user // 组件化模式能独立运行才能有applicationId
}
minSdk rootAndroidId.minSdk
targetSdk rootAndroidId.targetSdk
versionCode rootAndroidId.versionCode
versionName rootAndroidId.versionName
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles "consumer-rules.pro"
}
资源路径配置
当项目是组件化时,每个模块可以单独启动,那么每个模块都需要启动页面,当项目时集成化时,不能有启动页面,这就需要分开配置组件化时和集成化的AndroidManifest.xml
// 配置资源路径,方便测试环境,打包不集成到正式环境
sourceSets {
main {
if (!isRelease) {
// 如果是组件化模式,需要单独运行时
manifest.srcFile 'src/main/debug/AndroidManifest.xml'
} else {
// 集成化模式,整个项目打包apk
manifest.srcFile 'src/main/AndroidManifest.xml'
java {
// release 时 debug 目录下文件不需要合并到主工程
exclude '**/debug/**'
}
}
}
}
配置成功后,就可以在main文件夹下创建组件化时的AndroidManifest.xml了。
依赖配置
def support = rootProject.ext.dependencies
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
// 循环引入第三方库
support.each { k, v -> implementation v }
}