赞
踩
我们再第一篇文章简单介绍了一些gradle的配置,本文将会详细介绍一些build.gradle中gradle或AGP提供的一些常用配置。
一、项目级 build.gradle 配置
位于项目根目录下的build.gradle
文件通常负责全局的构建设置,包括:
构建脚本仓库声明:
// 设置全局仓库地址
allprojects {
repositories {
google() // Google Maven库
mavenCentral() // 中央Maven仓库
jcenter() // 已停用
maven { url 'https://jitpack.io' } // 或其他自定义仓库
maven {
url uri('repo') //指定仓库为项目根目录的repo文件夹,也可以是本地任意目录
}
mavenLocal()//即 ~/.m2/repository
}
}
这些仓库是Gradle寻找依赖包的地方,确保构建时能够获取到项目所需的aar或jar文件。
项目级别的插件管理:
Groovy
buildscript {
repositories { //同上repositories闭包 插件仓库
google()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.x.y' // 安卓Gradle插件(AGP)版本
}
}
在这里,我们指定Gradle构建脚本自身使用的插件版本,例如安卓Gradle插件,它负责处理安卓项目的编译、打包、签名等一系列构建任务。
二、模块级 build.gradle 配置
在每个应用模块(如app)目录下的build.gradle
文件更加具体地针对该模块进行构建配置:
应用模块基本信息:
Groovy
apply plugin: 'com.android.application' // 应用模块插件 android { compileSdkVersion 33 // 编译目标API版本 buildToolsVersion "30.0.3" // 构建工具版本 defaultConfig { applicationId "com.example.myapp" // 应用包名 minSdkVersion 21 // 最低支持的Android API版本 targetSdkVersion 33 // 目标兼容的Android API版本 versionCode 1 // 版本号(整数) versionName "1.0" // 版本名称(字符串) } buildTypes { release { minifyEnabled false // 是否启用代码混淆 proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' // 混淆规则文件 } } signingConfigs {} // 签名配置,用于发布版本 }
依赖管理:
Groovy
dependencies {
implementation 'com.google.android.material:material:1.x.y' // 第三方库依赖
implementation 'androidx.appcompat:appcompat:1.x.y'
testImplementation 'junit:junit:4.13.2' // 测试框架依赖
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' // UI测试框架依赖
}
此处列举了不同类型的依赖,如运行时依赖(implementation)、测试依赖等,用于引入项目所需的库。
三、其他配置与优化
在Android项目中,Gradle提供了一系列高级配置选项,用于满足特定的构建需求和性能优化:
多Flavor构建:Android Gradle插件允许通过构建变种(Build Variants)对编译、打包过程进行更精细化的控制。例如,可以根据Flavor和Build Type的不同组合生成不同的APK。
productFlavors { playStore { applicationIdSuffix ".playstore" versionNameSuffix "-play" } xiaomi { applicationIdSuffix ".xiaomi" versionNameSuffix "-mi" } } // 对不同渠道配置不同的构建资源 sourceSets { playStore { res.srcDirs = ['src/playStore/res'] } xiaomi { res.srcDirs = ['src/xiaomi/res'] } }
Flavor可以用来创建项目的多个变种,比如开发版、测试版和正式版等,每个变种可以有不同的包名、资源文件、依赖库等。
动态版本依赖:
dependencies {
implementation 'com.squareup.retrofit2:retrofit:2.+'
}
使用+
或x.y.z+
可以定义动态版本依赖,这样每次构建时都会获取最新兼容的子版本,避免了频繁手动更新版本号3
注解处理器(Annotation Processor):
dependencies {
annotationProcessor 'com.squareup.leakcanary:leakcanary-android-annotations:2.x.y' // 示例:LeakCanary注解处理器,kotlin使用kapt
}
以上仅为部分常用配置,实际项目中的build.gradle
文件根据项目的具体需求可能会包含更多复杂的构建脚本。随着Android Gradle插件和工具链的更新,开发者应当关注并使用最新的最佳实践。
以上这些高级配置选项能够帮助开发者根据实际场景灵活定制构建流程,提升项目构建效率,并有效优化最终生成的APK。
Gradle中的Project
是对一个独立构建单位的抽象表示,它可以是一个完整的应用程序,也可以是一个库模块,甚至是其他任何需要构建的对象。每个Project
都包含了一系列任务(Tasks)、依赖项(Dependencies)以及其他项目属性,并且每个Project
都有一个唯一的名称和一套自定义的构建脚本——build.gradle
或settings.gradle
。
// settings.gradle
rootProject.name = 'MyAwesomeProject'
include 'app', 'lib', 'utils'
上述代码展示了settings.gradle
文件如何定义一个包含三个子项目的根项目。每个子项目都是一个单独的Project
,有自己的构建脚本。
Gradle通过Project实例执行构建文件来配置项目。脚本中使用的任何属性或方法都会委托给关联的Project对象。这意味着您可以直接在脚本中使用Project接口上的任何方法和属性。
defaultTasks('some-task') // Delegates to Project.defaultTasks()
reportsDir = file('reports') // Delegates to Project.file() and the Java Plugin
Project
都有一个名称,可以通过project.name
访问。在settings.gradle中也可以直接设置。Project
的路径是由它的层级关系确定的。Project
都可以拥有自己的构建脚本,用于定义依赖管理、任务执行顺序、插件应用等构建逻辑。Project
可以包含多个构建任务,Project本质上是Task对象的集合,这些任务按照特定顺序执行以完成构建目标。开发者可以通过task
关键字创建新任务,Project
都支持声明并解析依赖。在Java或Android项目中,通常会通过dependencies
块添加编译时或运行时依赖。apply plugin
:)或使用PluginDependenciesSpec插件脚本块(plugins{}
)来应用插件,比如,对于Android项目,我们会用com.android.application
或com.android.library
插件。Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。