Android build.gradle 基本规则
Android build.gradle 基本规则
一个完整示例:
// 此乃本脚本执行所需依赖, 以下分别对应maven库和插件
buildscript {
repositories {
// 从Android Studio3.0后新增了google()配置,可以引用google上的开源项目
google()
mavenCentral()
// 一个类似于github的代码托管仓库,声明了jcenter()配置,可以轻松引用 jcenter上的开源项目
jcenter()
}
dependencies {
//此处是android的插件gradle,gradle是一个强大的项目构建工具
classpath 'com.android.tools.build:gradle:7.2.1'
}
}
// 此乃声明自身是 Android 程序
// 其中 com.android.application 标识应用模块,可直接运行,打包后对应 .apk 文件
// com.android.library 标识库模块,打包后对应 .aar 文件
apply plugin: 'com.android.application'
// 此乃配置本 android 项目构建所需的各种属性
android {
// 此乃设置编译时用的Android API版本
compileSdkVersion 27
// 基础配置
defaultConfig {
applicationId "com.billy.myapplication" // 项目包名
minSdkVersion 16 // 项目最低兼容的版本
targetSdkVersion 27 // 项目的目标版本
versionCode 1 // 版本号
versionName "1.0" // 版本名称
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
// 表明要使用AndroidJUnitRunner进行单元测试
}
// 此乃静态检查配置, 默认有任何错误提示会停止build
lintOptions {
// 即使报错也不停止打包
abortOnError false
// 打包release版本时进行检测
checkReleaseBuilds false
}
buildTypes {
release {
// 配置Log日志
buildConfigField("boolean", "LOG_DEBUG", "false")//配置Log日志
// 配置URL前缀
buildConfigField("String", "URL_PERFIX", ""https://release.cn/"")
// 是否混淆
minifyEnabled false
// 指定混淆规则文件
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
// 设置签名信息
signingConfig signingConfigs.release
// 是否在APK中生成伪语言环境,帮助国际化的东西,一般使用的不多
pseudoLocalesEnabled false
// 是否对APK包执行ZIP对齐优化,减小zip体积,增加运行效率
zipAlignEnabled true
// 在applicationId 中添加了一个后缀,一般使用的不多
applicationIdSuffix 'test'
// //在versionName 中添加了一个后缀,一般使用的不多
versionNameSuffix 'test'
}
debug { // 内容同上
// 是否支持断点调试
debuggable false
// 是否可以调试NDK代码
jniDebuggable false
// 是否开启渲染脚本就是一些c写的渲染方法
renderscriptDebuggable false
}
}
// 此乃签名的配置
signingConfigs {
// 线上/发布/生产
release {
keyAlias 'test'
keyPassword '123456'
storeFile file('test.keystore')
storePassword '123456'
}
// 开发/调试/测试
debug {} // 内容同上
}
// 此乃目录指向的配置
sourceSets {
main {
// 指定lib库目录
jniLibs.srcDirs = ['libs']
}
}
// 此乃打包时的相关配置
packagingOptions{
// 作用: 当有重复文件时,打包过程会报错,当配置了该字段时打包过程就将打包第一个匹配的文件。
// 以下示例表示当META-INF目录下有重复的LICENSE文件时 只用第一个,打包过程不报错。
pickFirsts = ['META-INF/LICENSE']
// 作用: 当出现重复文件时,合并重复的文件并打包进应用
// 默认值 merges = []
merge 'META-INF/LICENSE'
}
productFlavors {
wandoujia {}
xiaomi {}
_360 {}
}
productFlavors.all {
// 批量修改,类似一个循序遍历
flavor -> flavor.manifestPlaceholders = [IFLYTEK_CHANNEL: name]
}
}
// 此乃本项目所需依赖,如maven库
allprojects {
repositories {
google()
mavenCentral()
flatDir{
dirs 'src/main/libs', 'libs'
}
}
// 此乃描述本项目的依赖关系
dependencies {
// 此乃声明本地的jar包依赖
implementation fileTree(dir: 'src/main/libs', include: ['*.jar'])
// 此乃声明远程的依赖
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.2'
// 此乃声明测试用例的依赖
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'
}
}
// 此乃执行 gradle clean 时将会执行的 task
// 该任务继承自 Delete,将删除根目录中的build目录。
// 相当于执行 Delete.delete(rootProject.buildDir)。
// gradle使用groovy语言,调用method时可以不用加()。
task clean(type: Delete) {
delete rootProject.buildDir
}