百度T6团队实力打造!Gradle-与-Android-构建入门-系统教程

本文深入探讨了为何需要自动化构建工具,如Gradle,以解决手动构建的问题。通过实例展示了Gradle如何简化Android项目的构建流程,包括依赖管理、任务配置和项目结构。文章详细介绍了Android工程的默认目录结构,gradle/wrapper的作用,以及dependency配置的差异,帮助读者理解Gradle在Android开发中的重要性。
摘要由CSDN通过智能技术生成

如果你想要了解问题为什么会发生,为什么这样做会解决问题,那么你需要脱离 AS 那几个常见的按钮,探索它背后的秘密—Gradle,这一自动化构建工具。

本文将介绍:

  1. 为什么需要自动化构建工具?
  2. 默认创建的 Android 工程都有什么
  3. 依赖管理
  4. 打包流程

通过阅读本文,可以大致了解 Gradle 是如何工作,可以有针对性搜索相关内容,更加快速的解决常见编译错误

为什么需要自动化构建工具?

以下命令只是示例,方便说明问题,具体使用方式请查找相关命令手册用法

我们知道,一个 APK 包其实是一个 zip 包,包含代码和资源。那么我们可以编写一个Shell 脚本,命名为 assemble.sh,任何人只要通过执行这个脚本就可以得到 apk 包,完美:

  1. 将 .java 文件转换为 .class 文件,执行命令: javac xxx.java
  2. Android 还会将 .class 文件转换为 .dex 文件: dx xxx.class
  3. 打包成 apk: zip xxx.apk [需要打包的代码和资源]

在 Android 中代码对资源是通过 R.java 文件引用,于是需要继续添加命令,并要求这个命令在 javac 命令前执行。在实际开发中我们不可能所有功能都自己实现,有可能会依赖优秀的开源库,修改后的伪代码如下:

  1. 生成 R.java: aapt [资源文件]
  2. 将 .java 文件转换为 .class 文件,执行命令: javac xxx.java R.java -classpath xxx.jar
  3. Android 还会将 .class 文件转换为 .dex 文件: dx xxx.class R.class xxx.jar
  4. 打包成 apk: zip xxx.apk [需要打包的代码和资源]

一切似乎都尽在掌握之中,真的吗?让我们看看 Android APK 实际打包的流程是什么样的:

想想实现如此复杂流程的 Shell 脚本是不是有些头大?别急,实现后还会遇到下面这些问题:

  • 对于多个工程,每个工程都需要拷贝上述 Shell 脚本
  • 对于单个工程,每次添加一个功能都需要在原有流程中插入一段代码,随着需求增加,脚本难以维护
  • 如何管理引入的外部依赖?如何打 debug、release 包?如何打多渠道包?

此时我们需要一个简化上述过程的工具,通过一些约定,如将代码、资源等放在指定目录,再辅以构建脚本就可以快速得到最终的构建产物,这就是自动化构建工具,而 Gradle 就是其中一个。

对照刚刚那个简单的例子,每一个工程在 Gradle 中叫做一个 Project,每一个需要执行的任务,如生成 R 文件、编译 java 文件等,在 Gradle 中叫做一个 Task。通过 TaskA.dependsOn(TaskB)可以实现先执行 TaskB 再执行 TaskA 的效果。同时 Gradle 也提供 doFirst、doLast 允许在每个 Task 前和后执行一些代码。

至此,我们知道为什么需要自动化构建工具:

  • 防止手动介入构建
  • 创建可重复的构建
  • 以及最重要的:提升编程效率,将精力集中在需求开发上

默认创建的 Android 工程都有什么

每当通过 Android Studio 新建一个工程时,AS 都会自动创建如上图所示的目录结构,图片中简单介绍了各个目录是干什么的,接下来为大家详细介绍每一个目录或者文件的含义:

.gradle 与 .idea

.gradle 与 .idea 存放 Gradle 和 AS 对于当前工程的缓存。

最常见的一个应用就是点击 sync 后,AS 会在每个工程下生成 .iml 文件,他们与 .gradle、.idea 配合为我们提供了代码提示等常见功能。所以如果你的代码飘红而你确认依赖没有问题,可以尝试下面步骤清除 AS 缓存:

  • 删.idea 删.gradle 文件
  • 命令行执行 ./gradlew clean
  • 选择 File -> invalidate caches/restart
  • Sync

gradle/wrapper 与 gradlew gradlew.bat

当我们初次配置 Android 环境时,需要安装 Java,安装 AS,但并不需要安装 Gradle,这其中就是 gradle/wrapper 的功劳。

当执行 gradlew 脚本时,它可以保证每个项目都使用自己期望的 Gradle 版本,而其中的奥秘就在 gradlew 的这段代码中

exec “

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值