一、在项目根目录下新建config.gradle文件,将所有gradle的相同配置放入到此文件中
ext {
// 定义一个项目全局变量isRelease,用于动态切换:组件化模式 / 集成化模式
// false: 组件化模式(子模块可以独立运行),true :集成化模式(打包整个项目apk,子模块不可独立运行)
isRelease = true
//参数配置
appConfig = [
compileSdkVersion: 29,
buildToolsVersion: "29.0.2",
minSdkVersion : 21,
targetSdkVersion : 29,
versionCode : 1,
versionName : "1.0"
]
//网络环境配置
url = [
releaseUrl: "http://release/api",
debugUrl : "http://debug/api"
]
//相关jar包
supportLibrary = "28.0.0"
dependencies = [
// ${supportLibrary}表示引用一个变量
"appcompat" : "com.android.support:appcompat-v7:${supportLibrary}",
"recyclerview": "com.android.support:recyclerview-v7:${supportLibrary}",
"constraint" : "com.android.support.constraint:constraint-layout:1.1.3",
"okhttp3" : "com.squareup.okhttp3:okhttp:3.10.0",
"retrofit" : "com.squareup.retrofit2:retrofit:2.5.0",
"fastjson" : "com.alibaba:fastjson:1.2.58",
]
}
二、在项目的build.gradle中导入配置文件
//设置导入 config.gradle 配置文件
apply from: "config.gradle"
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.6.1'
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
三、在app的module中配置相关参数
apply plugin: 'com.android.application'
//导入config.gradle的设置数组
def appConfig = rootProject.ext.appConfig
def url = rootProject.ext.url
def support = rootProject.ext.dependencies
android {
compileSdkVersion appConfig.compileSdkVersion
buildToolsVersion appConfig.buildToolsVersion
defaultConfig {
applicationId "com.wkr.projectfb"
minSdkVersion appConfig.minSdkVersion
targetSdkVersion appConfig.targetSdkVersion
versionCode appConfig.versionCode
versionName appConfig.versionName
//将参数设置到BuildConfig类中,这个方法接收三个非空的参数,第一个:确定值的类型,第二个:指定key的名字,第三个:传值(必须是String)
// 切记:不能在android根节点,只能在defaultConfig或buildTypes节点下
buildConfigField("boolean", "isRelease", String.valueOf(isRelease))
buildConfigField("String", "url", isRelease ? "\"${url.releaseUrl}\"" : "\"${url.debugUrl}\"")
}
//打包签名
signingConfigs {
//写死不变的
debug {
storeFile file('C:/Users/Administrator/.android/debug.keystore')
storePassword "android"
keyAlias "androiddebugkey"
keyPassword "android"
}
release {
//证书文件
storeFile file("D:/keystore/生成Reelase版本.keystore")
//证书类型
storeType "netease"
//签名证书文件的密码
storePassword "android"
//签名证书中密钥别名
keyAlias "androiddebugkey"
//签名证书中该密钥的密码
keyPassword "android"
//是否开启V2打包
v2SigningEnabled true
}
}
buildTypes {
debug {
//设置编译证书相关
signingConfig signingConfigs.debug
}
release {
signingConfig signingConfigs.release
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
if (isRelease) {
implementation project(path: ':trans')
implementation project(path: ':order')
}
//循环引用第三方库
support.each { K, v -> implementation v }
}
四、设置子模块gradle配置
//如果是发布版本时,各个模块都不能独立运行,需将application改成library,并去除applicationId
if (isRelease) {
apply plugin: 'com.android.library'
} else {
apply plugin: 'com.android.application'
}
def appConfig = rootProject.ext.appConfig
def support = rootProject.ext.dependencies
def url = rootProject.ext.url
android {
compileSdkVersion appConfig.compileSdkVersion
buildToolsVersion appConfig.buildToolsVersion
defaultConfig {
if (!isRelease) {
applicationId "com.wkr.order"
}
minSdkVersion appConfig.minSdkVersion
targetSdkVersion appConfig.targetSdkVersion
versionCode appConfig.versionCode
versionName appConfig.versionName
//配置buildConfig相关
buildConfigField("boolean", "isRealease", String.valueOf(isRelease))
buildConfigField("String", "url", isRelease ? "\"${url.releaseUrl}\"" : "\"${url.debugUrl}\"")
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
// 配置资源路径,方便测试环境,打包不集成到正式环境
sourceSets {
main {
if (!isRelease) {
// 如果是组件化模式,需要单独运行时
manifest.srcFile 'src/main/debug/AndroidManifest.xml'
} else {
// 集成化模式,整个项目打包apk
manifest.srcFile 'src/main/AndroidManifest.xml'
java {
// release 时 debug 目录下文件不需要合并到主工程
exclude '**/debug/**'
}
}
}
}
}
//如果是发布版本时,各个模块都不能独立运行,需将application改成library,并去除applicationId
if (isRelease) {
apply plugin: 'com.android.library'
} else {
apply plugin: 'com.android.application'
}
def appConfig = rootProject.ext.appConfig
def support = rootProject.ext.dependencies
def url = rootProject.ext.url
android {
compileSdkVersion appConfig.compileSdkVersion
buildToolsVersion appConfig.buildToolsVersion
defaultConfig {
if (!isRelease) {
applicationId "com.wkr.trans"
}
minSdkVersion appConfig.minSdkVersion
targetSdkVersion appConfig.targetSdkVersion
versionCode appConfig.versionCode
versionName appConfig.versionName
//设置相关配置参数
buildConfigField("boolean", "isRelease", String.valueOf(isRelease))
buildConfigField("String", "url", isRelease ? "\"${url.releaseUrl}\"" : "\"${debugUrl}\"")
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
//导入相关jar包
support.each { k, v -> implementation v }
}