【Gradle 学习】(四)Gradle 在 Android 中的应用
前言
Android 是基于 Gradle 完成应用构建的,前面学习了很多 Gradle 的基础知识,从这里开始逐步深入学习在 Android 中 Gradle 都做了些什么。最好的参考文档就是Andorid 的 Gradle Plugin 说明文档了,所以也根据这里开始学习剖析。
1. 构建文件
一个简单的 Android Gradle 项目的 build.gradle 如下
buildscript {
repositories {
jCenter()
}
dependencies {
classpath "com.android.tools.build:gradle:4.1.3"
}
}
apply plugin: 'com.android.application'
android {应用
compileSdkVersion 23
buildToolsVersion "23.1.0"
}
buildscript { ... } 配置了用于驱动构建的代码。上述代码声明了项目使用 jCenter 仓库,并且 声明了一个 jCenter 文件的 classpath。该文件声明了项目的 Android Gradle 插件版本为 4.1.3。
接着,使用了 com.android.application 插件。该插件用于编译 Android 应用。
最后,android { ... } 配置了所有 android 构建所需的参数,这也是 Android DSL 的入口点。
重要: com.android.application 插件不能与 java 插件同时使用,否则会导致构建错误。
注意: 你需要在相同路径下添加一个 local.properties 文件,并使用 sdk.dir 属性来设置 SDK 路径。或通过设置 ANDROID_HOME 环境变量来设置 SDK 路径。这两种方式都是 一样的,根据喜好选择其中一种。 local.properties 文件示例:
sdk.dir=/path/to/Android/Sdk
2. 项目结构
Gradle 遵循约定优于配置的概念,Gradle 的构建文件中有默认的文件夹结构。最基本的项目有两个 “source set” 组件,分别存放应用代码和测试代码。他们分别位于:
- src/main/
- src/androidTest/
里面每个存在的文件夹对应响应的源组件,对于 Java plugin 和 Android plugin 来说,他们的 Java 代码和资源文件路径如下:
- java/
- resources/
对于 Android plugin 来说,它还拥有以下特有的文件和文件夹结构:
- AndroidManifest.xml
- res/
- assets/
- aidl/
- jni/
这就意味着在 Android plugin 下 *.java 文件的 source set 路径是 src/main/java ,而 manifest 则是 src/main/AndroidManifest.xml
我们之前提到过 Gradle 的一个优点,不仅约定了项目结构,而且约定灵活,当默认的项目结构不适用是,也可以自定义配置,后面再学习。
3. 构建任务
添加一个 plugin 到构建文件中会自动创建一些列构建任务
Gradle 属于任务驱动型构建工具,构建过程基于 Task
Java 插件和 Android 插件都会创建以下Task:
- assemble 组合项目所有输出任务
- check 执行所有检查任务
- build 执行 assemble 和 check 两个 task 的所有工作
- clean 会清空项目的输出
实际上 assemble,check 和 build 这三个 task 不做任何事情。它们只是一个 Task 标志,用来告诉 plugin 添加实际需要执行的 task 去完成这些工作,当我们执行这样的任务的时候同时执行与其依赖的任务。
在命令行环境中,你可以执行以下命令来获取更多高级别的 task:
gradle tasks
查看所有 task 列表和它们之间的依赖关系可以执行以下命令:
gradle tasks --all
注意:Gradle 会自动监听 task 声明的输入和输出。 多次执行 build task 并且期间项目没有任何改动,Gradle 将会提示所有 task UP-TO-DATE ,这意味着不需要再做任何编译工作。这允许 task 之间互相依赖,而不需要额外的构建操作。
3.1 Android Tasks
Android plugin 使用相同的约定以兼容其他插件,并且附加了标志性的 task,包括:
- assemble 组合项目所有输出
- check 执行所有检查
- connectedCheck 在一个连接的设备或者模拟器上执行检查,它们可以在所有连接的设备上并行执行检查
- deviceCheck 通过 APIs 连接远程设备来执行检查,主要用于CI(Continuos integration ,持续集成)服务上
- build 执行 assemble 和 check 的所有工作
- clean 清空项目的输出
这些新的标志性 task 是必须的,以保证能够在没有设备连接的情况下执行定期检查
assemble
一个 Android 项目至少拥有两个输出:debug APK 和 release APK。每个输出都有各自的标志性 task 以便单独构建它们。如果有其他的构建类型也会有对应的任务。
-
assemble
- assembleDebug
- assembleRelease
它们都依赖于其它一些 tasks 以完成构建一个APK所需的多个步骤。其中 assemble task 依赖于上述两个 task,所以执行 assemble 将会同时构建出两个 APK。
check
check task 也有拥有依赖:
-
check
- lint
-
connectedCheck
- connectAndroidTest
-
deviceCheck
- 进行测试时才会触发
最后,只要可被安装(需要签名),插件会为所有的构建类型(debug, release, test)创建
install 及 uninstall 相关的 task。例:
-
installDebug
-
installRelease
-
uninstallAll
- uninstallDebug
- uninstallRelease
- uninstallDebugAndroidTest
3.2 查看 Android Gradle 任务
使用 ./gradlew task
来查看当前项目完成了哪些 Gradle任务
Gradle 和 Android 插件可以完成以下编译配置
App$ ./gradlew task
Task :tasks
------------------------------------------------------------
Tasks runnable from root project (所有从项目根目录可运行的任务)
------------------------------------------------------------
Android tasks(Android 任务)
-------------
androidDependencies - 显示 Android 依赖
signingReport - 显示每个版本的签名信息
sourceSets - 打印这个项目中定义的 source 集合
Build tasks(构建任务)
-----------
assemble - 编译并打出应用程序所有变种版本的包.
assembleAndroidTest - 编译并打出所有测试应用的包.
assembleDebug - 编译并打出Debug版本的包.
assembleRelease - 编译并打出Release版本的包.
build - 执行所有检查并编译打包.
buildDependents - 检查所有的依赖并编译打包.
buildNeeded - 检查所有的依赖并编译打包.
clean - 删除构建目录.
cleanBuildCache - 删除构建缓存目录.
compileDebugAndroidTestSources
compileDebugSources
compileDebugUnitTestSources
compileReleaseSources
compileReleaseUnitTestSources
Build Setup tasks (构建设置任务)
-----------------
init - 被始化一个新的Gradle构建
wrapper - 生成 Gradle wrapper文件.
Cleanup tasks
-------------
lintFix - Runs lint on all variants and applies any safe suggestions to the source code.
Help tasks
----------
buildEnvironment - 显示项目根目录中声明的所有构建脚本的依赖.
components - 显示项目根目录产生的组件
dependencies - 显示并洞察项目根目录中一个特殊的依赖关系
dependencyInsight - 显示并洞察项目根目录中一个特殊的依赖关系.
help - 显示帮助信息
model - 显示项目根目录的配置模型.
projects - 显示项目根目录中的子项目.
properties - 显示项目根目录的属性.
tasks - 显示从项目根目录可以运行的任务(有些显示的任务可能属于子项目)
Install tasks(安装任务)
-------------
installDebug - 编译打包并安装Debug版本的包.
installDebugAndroidTest - 编译打包并安装Debug版本的测试包到设备上
uninstallAll - 卸载所有版本的包.
uninstallDebug - 卸载Debug版本的包.
uninstallDebugAndroidTest - 从设备上卸载Debug版本的Android测试包
uninstallRelease - 卸载Release版本的包.
Verification tasks(验证任务)
------------------
check - 运行所有检查.
connectedAndroidTest - 在已连接的设备上安装所有flavors(渠道包)并运行instrumentation测试
connectedCheck - 在当前已连接的设备上运行设备检测.
connectedDebugAndroidTest - 在已连接的设备上安装并运行Debug版本的测试.
deviceAndroidTest - 在所有提供的设备上安装并运行instrumentation测试.
deviceCheck - 在所有提供的设备和测试服务器上运行设备检测.
lint - 在所有变种版本上运行lint检测.
lintDebug - 在Debug版本上运行lint检测.
lintRelease - 在Release版本上运行lint检测.
test - 在所有变种版本上运行单元测试.
testDebugUnitTest - 在Debug版本上运行单元测试.
testReleaseUnitTest - 在Release版本上运行单元测试.
To see all tasks and more detail, run gradlew tasks --all
To see more detail about a task, run gradlew help --task <task>
3.3 执行 Gradle 任务
执行 Gradle 任务的命令是
gradle 任务名称
或使用 gradle wrapper
./gradlew 任务名称
比如执行 打包任务(assemble)
gradle assemble
会把配置的所有构建类型(Build Types)全部打出来,默认构建类型是 Debug 和 Release,因此会 assemble 至少会执行两个任务 assembleDebug
和 assembleRelease
如果有其他构架类型,任务名称是 assemble 构建类型名
参考
Gradle Plugin 使用手册
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanejhj
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13