快速入门安卓Gradle指南(6/10)安卓项目工程配置
牛客高级系列专栏:
安卓(安卓系统开发也要掌握)
- 想通关安卓面试,请看:《150道安卓高频面试题目录及答案链接》
- 想通关安卓系统面试,请看:《140道安卓系统Framework面试题目录及答案链接》
- 想进阶安卓开发,请看:《Android进阶知识体系解析_15大安卓进阶必备知识点》
- 想了解安卓APP完整开发流程,请看:《安卓APP完整开发流程》
- 想掌握安卓App性能优化,请看:《安卓性能优化讲解和实战专栏》
- 想掌握Gradle语法,制作Gradle插件,请看:《安卓Gradle语法解析和实践大全》
嵌入式
- 想通关嵌入式面试,请看: 《111道嵌入式面试题目录及答案链接》
- 想多掌握几个嵌入式项目,请看:《6个嵌入式项目交流分享(附源码)》
本人是2020年毕业于广东工业大学研究生:许乔丹,有国内大厂CVTE和世界500强企业安卓开发经验,该专栏整理本人对安卓Gradle的理解。网上安卓资料千千万,笔者将继续维护专栏,承诺提供专栏内容免费技术答疑,直接咨询即可,助您提高安卓学习效率!
目录开始⬇
- 1、工程的参数配置
- 2、工程基础参数
- 2.1 Gradle版本及运行参数
- 2.2 settings.gradle配置
- 2.3 local.properties配置
- 3、根build.gradle配置
- 4、模块build.gradle配置
- 4.1 常见配置
- 4.2 进阶配置
- 5、全局配置
- 5.1 使用ext块配置
- 5.2 使用config.gradle配置
使用Gradle构建工程,那肯定离不开工程的配置。本文将介绍几个常见的工程配置。
1、工程的参数配置
创建完新工程后,还需要对工程参数去做一些定制化,才可以开始编写代码。从工程的层面来看,我们需要配置以下几项:
- 工程基本参数
- 仓库地址以及插件引用申明
- Android Gradle Plugin
2、工程基础参数
工程基本参数包含以下几点:
- Gradle版本及运行参数;
- settings.gradle;
- local.properties;
2.1 Gradle版本及运行参数
修改Gradle版本主要有两种方法:
- 可以在gradle/wrapper/gradle-wrapper.properties文件中修改,文件目录如下:
直接修改版本号,如下面修改版本号为7.0.2:
distributionUrl=https://services.gradle.org/distributions/gradle-7.0.2-bin.zip
进行修改,然后点击File-Sync Project with Gradle Files进行同步。
- File-Project Structure 在下图位置直接修改。
如果我们在Gradle版本更新之后,想要Gradle的运行效率更高,就可以打开gradle.properties文件,然后将下图的2048m修改为更高的参数。
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
当然这需要在电脑配置允许的前提下,来加快工程编译速度。建议将 -Xmx 的值设置为你计算机内存的一半或四分之一,以确保 JVM 有足够的空间来处理应用程序的内存需求。例如,如果你的计算机内存为 8GB,那么可以将 -Xmx 参数值设置为 4GB 或 2GB。
2.2 settings.gradle配置
该文件是Android项目的Gradle设置文件,定义了应用程序的模块和版本信息,指定当前工程,需要把哪些子工程给纳入编译里去:
如上面所示,一开始创建新工程时,会自动创建名为‘app’的模块。当工程扩大后,一般需要再增加新的模块,所以需要把当前工程里的app,core,modules,supports这几个模块写到settings.gradle
rootProject.name = "DemoApp"
include ':app', ':core',':modules',':supports'
rootProject.name
是一个字符串类型的属性,用于指定 Gradle 项目的根目录名称。在 Gradle 多项目构建中,可以通过设置不同的 rootProject.name 来指定各个子项目的根目录名称,以便于统一管理。例如,如果你的 Gradle 项目包含了多个子项目,而每个子项目都需要设置自己的名称,那么你可以在 settings.gradle 文件中为每个子项目设置一个不同的 rootProject.name,例如:
rootProject.name = 'my-gradle-project'
include ':sub-project-1'
project(':sub-project-1').name = 'my-sub-project-1'
include ':sub-project-2'
project(':sub-project-2').name = 'my-sub-project-2'
在上面的例子中,我们首先设置了根项目的名称为 my-gradle-project,然后使用 include 语句指定了两个子项目:sub-project-1 和 sub-project-2。接着,使用 project 方法分别为两个子项目设置了不同的名称。
2.3 local.properties配置
这个其实和本地化参数配置有关,这些配置指的是每一台电脑不一样的配置。比如说。安卓SDK路径的存放路径是对于每一个人,每一台电脑都肯定是不一样的。所以说我们需要把SDK路径写到local.properties里面:
sdk.dir=E:\Android_SDK
因为local.properties文件不会记录到版本管理库。这是因为系统默认在.gitignore文件(Git版本管理工具的忽略文件,写在该文件里的项目就不受git工具管理)里配置了local.properties:
所以如果有不希望被别人看到的参数,而又要在我们编辑时用到的参数,就可以把它记录到local.properties。比如说账号密码等数据。
3、根build.gradle配置
仓库地址及插件引用声明在工程根目录build.gradle文件进行配置。
buildscript {
repositories {
maven { url 'https://maven.aliyun.com/repository/public' }
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
google()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.0.2'
classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0'
}
}
allprojects {
repositories {
maven { url 'https://maven.aliyun.com/repository/public' }
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
google()
mavenCentral() // Warning: this repository is going to shut down soon
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
buildscript
- repositories:主要是grade脚本执行所需要的依赖,以及这些依赖下载仓库地址。如上面代码配置了谷歌和阿里云的仓库,告诉Gradle脚本,可以去这两个仓库里面去查找。
- dependencies:插件声明,用于声明项目程序依赖的外部库,如上面声明了anroid gradle插件和greendao插件;
allprojects
- repositories:可以看到这里也有repositories,也是声明执行所需要的依赖,以及这些依赖下载仓库地址。不过要区分清楚,buildscript-repositories是面向gradle脚本,而allprojects-repositories是面向工程里的子工程的
task clean
执行这个任务会去删除我们工程下的build目录。
4、模块build.gradle配置
4.1 常见配置
安卓工程实际上就是依赖于 Gradle和Android Gradle Plugin的管理和编译的。所以除了Gradle配置之外,其他的配置基本上都是围绕着ndroid Gradle Plugin进行。下面我们看看一个实际的app-build.gradle文件,为方便讲解,我直接用代码写注释进行讲解:
apply plugin: 'com.android.application' //[注释1]:代表app子模块会编译成apk
apply plugin: 'org.greenrobot.greendao' //使用第三方库 greendao
android {
compileSdkVersion 30 //参与工程编译的SDK版本
buildToolsVersion "30.0.3" //安卓构建工具包的版本,如adb和dx工具
defaultConfig { //当前工程默认参数,后续会讲解如何配置特定参数,实现构建变体,即一个app工程编译出多个APK
applicationId "com.example.xurui" //应用的包名
minSdkVersion 28 //应用所支持的最低SDK版本
targetSdkVersion 30 //[注释2]:安卓系统提供前向兼容的主要手段,详见下文分析;
versionCode 1 //用户不可见,用于应用市场,或者是研发人员编程之后作为内部识别版本判断APK新旧程度,判断是否要升级
versionName “1.0” //面向消费者,消费者可以看到APK的版本
//是否支持多dex,详见《多Dex支持》:https://www.nowcoder.com/discuss/483581323722883072
multiDexEnabled true
//指定在 Android 测试中使用哪个 Instrumentation Test Runner 的属性,一般很少用
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
signingConfigs { //[注释3]:签名
release {
storeFile file("..\\common\\keystore\\xp17.jks")
storePassword '20210708'
keyAlias 'android'
keyPassword '20210708'
}
}
buildTypes { //[注释4]:构建类型
release {
signingConfig signingConfigs.release
/*'buildConfigField' 是一种用于在项目的 BuildConfig
类中定义自定义常量的 Gradle DSL(Domain-Specific Language)。通过
使用 'buildConfigField',可以在应用程序构建过程中在 BuildConfig 类中创建常量*/
buildConfigField("boolean", "IS_ON_TEST_MODE", "false")
minifyEnabled true
//Proguard混淆所使用的配置文件
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
debug {
signingConfig signingConfigs.release
buildConfigField("boolean", "IS_ON_TEST_MODE", "false")
}
}
}
greendao { //第三方库配置,在此作为案例展示第三方库如何配置
schemaVersion 3
targetGenDir 'src/main/java'
daoPackage 'com.example.xurui.greendao'
}
dependencies { //[注释5]:用于声明 Android 应用程序项目所依赖的库和模块
implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.1'
testImplementation 'junit:junit:4.13.2'
implementation "com.google.android.material:materia
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
如果你想学习Android App开发,那么学习Gradle一定是必要的。 Gradle是一种构建工具,用于编译和构建Android应用程序,它可以自动处理依赖关系,生成APK文件等。通过本指南,你将掌握Gradle的基本概念和使用技巧,以及如何在工程中配置Gradle。通过学习Gradle,你可以更高效地构建和管理你的Android应用程序,提高你的开发效率,从而更好地满足用户需求。