1、项目根目录的build.gradle
该文件用来配置整个项目所使用的依赖。
可以配置整个项目依赖的默认地址,在repositories闭包内进行定义。
一般来说buildscript闭包里和allprojects闭包里关于repositories的配置应该一致。
默认配置为google和mavenCentral。
2、Moudle内的build.gradle
// 用来导入该模块所需要的插件
// 1、当导入的id为com.android.application时,该module可以独立运行,可打包为APK
// 2、当导入的id为com.android.library时,该module不能独立运行,不能被打包为APK,供其他module依赖使用,生成aar文件
// 3、另一种方式为apply plugin: 'com.android.application' ,
// 或者apply plugin: ClassName 直接根据类名引入其他自定义插件,该插件需要实现Plugin接口
// 4、apply from: 'test.gradle' 从本地命名为test.gradle文件中导入,可以是一个task,也可以是一个类
plugins {
id 'com.android.application'
id 'kotlin-android'
}
// 用来配置安卓项目
android {
// 配置签名信息
signingConfigs {
//你自己的keystore信息
releaseConfig {
storeFile file(rootProject.ext.store_file)
storePassword rootProject.ext.store_password
keyAlias rootProject.ext.key_alias
keyPassword rootProject.ext.key_password
v1SigningEnabled true
v2SigningEnabled true
}
}
// 设置编译Sdk版本
compileSdkVersion rootProject.ext.compileSdkVersion
// 设置构建工具版本
buildToolsVersion rootProject.ext.buildToolsVersion
// 安卓项目的默认配置
defaultConfig {
// 配置项目的applicationId,是唯一的
applicationId rootProject.ext.applicationId
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode rootProject.ext.versionCode
versionName rootProject.ext.versionName
// 该配置可以在生成的BuildConfig.class文件中生成名为FLAVOR的字符串类型常量
// 可以在AndroidManifest.xml文件中使用 如下:
// <meta-data
// android:name="verNum"
// android:value="${verNum}" />
flavorDimensions "verNum"
// 当前项目的build.config文件里添加了一个boolean类型的变量
// 该配置会在生成的BuildConfig.class中生成Boolean类型的常量
buildConfigField("boolean", "isRelease", String.valueOf(rootProject.ext.isRelease))
}
// 设置构建类型,一般包含release和debug两个闭包
buildTypes {
// 发布包配置
release {
// 是否开启混淆
minifyEnabled true
// 是否启用未使用资源的收缩
shrinkResources true
// 指定混淆的规则文件
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
// 设置签名信息
signingConfig signingConfigs.releaseConfig
// 是否对APK包执行ZIP对齐优化,减小zip体积
zipAlignEnabled true
// 指定RenderScript的编译优化等级,一般设置为3
renderscriptOptimLevel 5
}
// 开发配置
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
// 配置Java SDK版本
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
// kotlin配置
kotlinOptions {
jvmTarget = '1.8'
}
// 配置资源文件路径,可指定不同版本资源文件
sourceSets {
// 通用资源文件
main{
manifest.srcFile 'src/main/AndroidManifest.xml'
java.srcDirs = ['src/main/java']
res.srcDirs = ['src/main/res']
}
// 用各自对应的资源文件路径
// channelA.res.srcDirs = ['src/main/res-a']
// channelB.res.srcDirs = ['src/main/res-b']
}
// 配置多渠道Flavors,内部的一个闭包代表一个渠道
productFlavors {
// channelA渠道
channelA{
// flavorDimensions "verNum"
flavorDimensions "channel"
flavorDimensions "app_name"
//
applicationId project.android.defaultConfig.applicationId+'.client'
// 在此处可以配置flavorDimensions的参数值
manifestPlaceholders=[
channel:"huawei",
verNum:"10",
app_name:"客户端"
]
buildConfigField("String", "test", "\"asdasd\"")
}
// channelB渠道
channelB{
flavorDimensions "verNum"
flavorDimensions "channel"
flavorDimensions "app_name"
applicationId project.android.defaultConfig.applicationId+'.server'
manifestPlaceholders=[
channel: "xiaomi",
verNum: "100",
app_name: "服务版"
]
}
}
// 自定义导出APK文件的名称
applicationVariants.all{
// 获取是release还是debug版本
def buildType = it.buildType.name
def fileName
// 下面的channel是获取渠道号,规则是${渠道名}-${applicationId}
def channel = it.productFlavors[0].name.split("-")[0]
// 获取当前时间
def createTime = new Date().format("YYYY-MM-dd",TimeZone.getTimeZone("GMT+08:00"))
it.getPackageApplication().outputDirectory = new File(project.rootDir.absolutePath+"/apks/${it.productFlavors[0].applicationId}/${createTime}")
logger.quiet("文件夹路径:${project.rootDir.absolutePath+"/apks/${it.productFlavors[0].applicationId}/${createTime}"}")
it.outputs.each{
//我此处的命名规则是:渠道名_版本名_创建时间_构建类型.apk[大家也可以根据自己的需求命名]
fileName = "${channel}_v${defaultConfig.versionName}_${createTime}-${buildType}.apk"
//打印出apk文件名称,以便及时查看是否满足要求
logger.quiet("文件名:${fileName}")
//重新对apk命名。
//Gradle4.0以下版本
//it.outputFile = new File(it.outputFile.parent, fileName)
//Gradle4.0(含)以上版本
it.outputFileName = fileName
}
}
}
// 配置模块的依赖
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'com.google.android.material:material:1.2.1'
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'androidx.constraintlayout:constraintlayout:2.0.1'
implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
implementation 'com.squareup.retrofit2:converter-scalars:2.9.0'
implementation 'com.trello.rxlifecycle4:rxlifecycle-android-lifecycle:4.0.2'
implementation 'com.trello.rxlifecycle4:rxlifecycle-components:4.0.2'
implementation project(':mylibrary')
}