Android Gradle 1:基本介绍

注:这片文章是对官方教程的一篇整合,官方的网站太难访问了(原因众所周知)。

现在的 Android 应用都是采用 Android Studio 来开发的,AS 默认是采用 Gradle 作为构建工具的。通常开发者可以不需要理解任何 Gradle 的脚本配置,就可以开发出一个 APP。但是,当你想做一些更智能的操作时,比如修改打包后的输出目录、提高打包速度等等,就必须对 Gradle 有比较深入的了解。Gradle 脚本是基于 Groovy 语言来编译执行的。详见groovy 官网。进行配置前,应该首先了解 gradle 中用到的相关 groovy 语言的语法。

Gradle 是一个工具,同时它也是一个编程框架。详见Gradle 官网

下面我们会将 Gradle 当作一个编译工具,从 Android 项目编译流程、Android Gradle 项目结构、自定义配置过程等方面介绍 Gradle。

Android 项目编译流程

构建流程涉及许多将项目转换成 Android 应用软件包 (APK) 的工具和流程。下面借用一张官方的图片:

Android 项目编译流程

中间的虚线部分便是由 Gradle管理的。

如上图所示,典型 Android 应用模块的构建流程通常按照以下步骤执行:

编译器将您的源代码转换成 DEX 文件(Dalvik 可执行文件,其中包括在 Android 设备上运行的字节码),并将其他所有内容转换成编译后的资源。

APK 打包器将 DEX 文件和编译后的资源合并到一个 APK 中。

APK 打包器使用调试(Debug)或发布(Release)密钥库为 APK 签名。调试版应用(即专用于测试和分析的应用)会使用调试密钥库为应用签名。Android Studio 会自动使用调试密钥库配置新项目。这是默认的情况,如果我们不需要发布版应用,则不必再次配置密钥库,直接使用即可。要使用发布版应用,则要创建发布密钥库,请参阅

打包器使用 zipalign 工具对应用进行优化,以减少其在设备上运行时所占用的内存。

生成最终的可以使用的 APK。

自定义编译配置

Gradle 和 Android 插件可以完成以下方面的版本配置:

版本类型

版本类型的英文名是:Build Type。版本类型定义 Gradle 在构建和打包应用时使用的某些属性,通常针对开发流程的不同阶段进行配置。要构建应用,必须至少定义一个版本类型。Android Studio 默认会创建调试和发布两个版本类型(Debug版和Release版)。更多的内容详见

产品变种

产品变种的英文名为:Product Flavors。亦可翻译为产品风味,产品味道。含义嘛,个人的理解就是同一种产品,有着不同的"味道"、特性。产品变种代表您会向用户发布的应用的不同版本,如应用的免费版和付费版。您可以自定义产品变种来使用不同的代码和资源,同时共享和重复利用各版应用的共用部分。产品变种是可选的,您必须手动创建,Gradle 不会自动生成产品变种。更多的内容详见

版本变体

版本变体的英文名是:Build Variant。版本变体是版本类型与产品变种的交叉产物(即 Build Variant = Build Type * Product Flavors)。利用版本变体,您可以在开发期间构建产品变种的调试版本,或者构建产品变种的已签名发布版本以供分发。更多的内容详见配置版本变体

清单条目

您可以在版本变体配置(Gradle 配置)中为清单文件的某些属性(AndroidManifest 清单文件中设置的属性)指定值。这些版本值会替换清单文件中的现有值。如果您要为模块生成多个 APK,让每一个 APK 文件都具有不同的应用名称、最低 SDK 版本或目标 SDK 版本,便可运用这一技巧。更多的内容详见合并清单设置

依赖项

Gradle 项目构建系统会管理来自本地文件系统以及来自远程代码库的项目依赖项。这样一来,您就不必手动搜索、下载依赖项的二进制文件包以及将它们复制到项目目录中。更多的内容详见添加构建依赖项

签名

Gradle 构建系统允许您在版本配置过程中指定签名设置,并且可以在构建过程中自动为 APK 签名。更多的内容详见

代码和资源缩减

Gradle 构建系统允许您为每个版本变体指定不同的 ProGuard 规则文件。在构建应用时,构建系统会应用一组适当的规则来使用其内置的缩减工具(如 R8)。几个典型的例子便是如混淆和差异化打包。更多的内容详见缩减您的代码和资源

多 APK 支持

Gradle 构建系统支持您自动构建不同的 APK,并使每个 APK 只包含特定屏幕密度或应用二进制接口 (ABI) 所需的代码和资源。如需了解详情,请参阅构建多个 APK

源集(SourceSet)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwssxz.html