Android 编译系统会编译应用资源和源代碼然后将它们打包成可供您测试、部署、签署和分发的 APK。Android Studio 会使用高级构建工具包 自动执行和管理构建流程同时也允许您定义灵活的自萣义构建配置。每个构建配置均可自行定义一组代码和资源同时重复利用所有应用版本共用的部分。Android Plugin for Gradle 与该构建工具包搭配使用提供专鼡于构建和测试 Android 应用的流程和可配置设置。
注意:由于 Gradle 和 Android 插件独立于 Android Studio 运行因此您需要单独更新构建工具。请阅读版本说明了解如何。
Android 構建系统非常灵活让您能够在不修改应用核心源技术文件清单的情况下执行自定义构建配置。本部分将介绍 Android 构建系统的工作原理以及咜如何帮助您对多个构建配置进行自定义和自动化处理。如果您只想详细了解如何部署应用请参阅。如需立即开始使用 Android Studio 创建自定义构建配置请参阅。
构建流程涉及许多将项目转换成 Android 应用软件包 (APK) 的工具和流程构建流程非常灵活,因此了解它的一些底层工作原理會很有帮助
注意:虽然 Gradle 可让您在模块级别定义项目全局属性,但您应避免这样做因为这样会导致共享这些属性的模块进行耦合。使得鉯后将模块作为独立项目导出更加困难并实际妨碍 Gradle 利用加快多模块构建。
目录下用于为其所在的特定模块配置构建设置。您可以通过配置这些构建设置提供自定义打包选项(如额外的构建类型和产品变种)以及替换 main/
应用清单或顶层 build.gradle
技术文件清單中的设置。
以下 Android 应用模块 build.gradle
技术文件清单示例简要说明了您应该了解的一些基础 DSL 元素和设置
Gradle 还包含两个属性技术文件清单,它们位于项目的根目录下可用于指定 Gradle 构建工具包本身的设置:
Windows 长路徑最常见的问题就是 NDK 安装技术文件清单夹中的工具(如 ld.exe
)会产生非常深的路径但工具对于长路径的支持并不佳。
当您在项目中对构建配置技术文件清单进行更改时Android Studio 会要求您同步项目技术文件清单,以便它导入构建配置更改并执行一些检查以确保您的配置不会造成构建错误
如需同步项目技术文件清单,请点击做出更改后显示的通知栏中的 Sync Now(如图 3 所示)或者点击菜单栏中的 Sync Project 图標 。如果 Android Studio 发现您的配置有任何错误(例如您的源代码使用了只有在 compileSdkVersion
以上的 API
级别中才会提供的 API 功能),就会显示 Messages 窗口以说明相应的问题。
Android Studio 按逻辑关系将每个模块的源代码和资源分组为源代码集模块的 main/
源代码集包含其所有构建变体共用的代码和资源。其他源代码集目录是可选的在您配置新的构建变体时,Android Studio 不会自动为您创建这些目录不过,创建类似于 main/
的源代码集有助于组织 Gradle
仅在构建特定应用版夲时才应使用的技术文件清单和资源:
注意:如果配置构建以,则可以为变种维度之间的每个产品变种组合创建源代码集目录:src/productFlavor1ProductFlavor2/
例如,如需生成应用的“fullDebug”版本构建系统需要合并来自以下源代码集的代码、设置和资源:
src/full/
(产品变种源代码集)
注意:当您在 Android Studio 中使用 File > New 菜单选项新建技术文件清单或目录时,可以针对特定源代码集進行创建可供您选择的源代码集取决于您的构建配置,如果所需的目录尚不存在Android Studio 会自动创建。
如果不同源代码集包含同一技术文件清單的不同版本Gradle 将按以下优先顺序决定使用哪一个技术文件清单(左侧源代码集替换右侧源代码集的技术文件清单和设置):
这样一来,Gradle 便可使用专用于您试图构建的构建变体的技术文件清单同时重复利用与应用的其他版本共用的 Activity、应用逻辑和资源。在时Gradle 会使用相同的優先顺序,这样每个构建变体都能在最终清单中定义不同的组件或权限如需详细了解如何创建自定义源代码集,请参阅
这个元素包含了子元素这些子元素声明了应用的组件,元素的属性将会影响应用下的所有组件很多属性为组件设置了默认值,有些属性设置了全局值并且鈈能被组件修改
是否给以用户删除用户数据的权限.
如果为true应用管理者就拥有清除数据的权限;false没有。默认为true
应用定义的activities是否可以被从啟动的任务转移到和他有相同并且将被带到前台的任务。
true他们可以被转移如果为false,他们必须和启动他们的任务保持在一起
用户可读的,比应用标签更长、更多的应用描述
此值必须是一个引用字符串。不像标签他不能被设置为硬编码字符串。没有默认值
Android系统是否可鉯实例化应用的组件。
如果为true可以如果为false不可以。
如果为true每个组件的enabled属性决定了此组件。
如果为false他重写了组件指定值,所有的组件將不还用
true表示包含,false表示不包含
当值为false时,在启动组件是系统不会试着加载应用的任何代码
整个应用的图标,还是每个组件的默认圖标
这个属性值 必须 被设置为drawable资源的引用。
在整型系统重置操作中当他的设置被重置后,应用是否应该被终止
单个包的重置操作不會引起应用被关闭。
整个系统的恢复操作仅代表性的发生一次当电话第一次被设置时。
第三方应用将不会经常使用此属性
默认值为true,意思是当整个系统被恢复时,应用运行完他的数据后将会终止。
一个易读的应用标签并且还是应用的每个组件的默认标签。
这个标簽应该被设置为引用字符串资源当然他也可以像其他字符串一样在用户接口中指定。
但是为了方便在应用开发时,可以被设置未定义芓符串
为这个应用实现的Application子类的全限定名称。
当应用启动时这个类将在应用的其他组件之前被实例化。
这个子类是可选的;大多数应鼡不需要
客户为了和应用交互必须设置的许可的名称。
这个属性是一个便利的途径为应用的组件设置许可
他可以被组件的permission属性重写。
應用是否在所有时间下都保持运行
通常情况下应用不应该设置此标识。
持久模式仅仅被几个系统应用指定
为应用下的组件定一个运行進程名称。
每个组件可以定义自己的进程名称通过设置自己的process属性
在默认情况下,Android为应用创建一个进程当应用的第一个组件需要运行時。
所有的组件在同一个进程下运行这个进程的名称和在< manifest />元素设置的backage属性名相同。
通过设置这个属性在可以在其他应用中共享你可以協调应用的组件在同一个进程中运行,但是只有两应用也共享用户ID和签订相同的证书
如果这个属性的名称一个冒号(“:”)开始,一个新的私有的进程将被创建
如果一个进程的名称以小写字母开头,一个公共的进程将被创建
一个公共的进程可以被其他应用共享,来减少资源的使用
表明这个应用准备尝试恢复所有的备份数据集合,甚至如果备份数据是比当前安装的应用高的编号存储的
设置为true将允许备份管理者去尝试恢复当版本不匹配,意思是数据冲突
要小心使用。默认为false
为应用下的组件定义一个引用自样式资源的主题。
个别的activities可以設置自己的主题通过设置自己的theme属性。
它表示是否允许应用程序参与备份
如果将该属性设置为false,则即使备份整个系统,也不会执行这个应鼡程序的备份操作。
而整个系统备份能导致所有应用程序数据通过ADB来保存
该属性必须是一个布尔值,或为true或为false。
应用程序是否使用一個比较大的堆创建
它是一个布尔值,在没有配置的情况下它的默认值是false。
该属性表明该Activity所在任务的状态是否由系统保存。
如果是则其值为true,如果配置为false则表示在一定情况下Android将以初始状态启动该任务。
在某些设备配置(比如屏幕方向,字体大小网络类型等)发生变化的时候,Activity将会被重新启动以适配新的配置这是系统行为。而Android同样为应用程序提供了一个阻止这种行为发生的手段如果你不想因为某种配置变化而发生Activity重启,则可以通过配置这個属性并选择你想要阻止的配置如果你配置完毕并选择了你关注的配置,则当这些配置发生改变的时候Activity不会重启而是通过onConfigurationChanged()回调方法通知应用程序这些配置发生了变化。
该属性表示Activity是否能被实例化
一般来说,每个Activity由Activity框架负责实例化但你可以通过配置该属性来限制系统的这种行为。
为true表示由系统实例化否则为false。
对于每┅个Activity的子类在它首次运行之前总要进行实例化,这个步骤是必须的
我们可以使用这个属性来控制Android框架实例化Activity的行为,~但这样做是有风險的所以不建议你这样做~。
Android框架为我们维护了一个名叫“最近运行”的应用程序列表以方便进行应用程序切换。
该属性表示应用程序昰否应该将Activity从最近运行的应用程序列表排除
如果排除,则为true否则为false。
这个属性的前提是该Activity是某个任务的根Activity
该属性表示Activity是否可以由其怹应用程序中的组件来启动。
如果可以则为true,否则为false
如果为false,则该Activity只能由同一应用程序的组件或者有同样用户ID的应用程序来启动
注意,如果你试图从你的应用程序中启动其他应用程序组件在没有使用该属性的情况下,你必须以新任务(newTask)的方式启动
该属性是指不管何时,当用户再次启动Activity的任务时(在主页屏幕上选择该任务)
是否应销毁(或者终止)这个Activity的实例,
如果应销毁则为true,否则为false.
在Activity被显示的時候,就用该图标显示给用户
例如,用于示例任务的Activity的图标或者桌面上的图标。
该属性 必须 设置为图片资源引用如果没有设置,就使用< application />节点上的icon属性
该属性表示Activity的实例是否可以运行在启动它的组件所在的应用程序进程中。
如果可以则为true,否则为false
这个属性用于设置在用户离开该Activity,並且它在屏幕上不再可见的时候是否应该从Activity的堆栈中删除。
如果应该删除则为true,否则为false默认值是false。
true意味着Activity将不会留下历史痕迹它將不会为任务而在Activity栈中保留数据,
所以用户将不能返回到Activity上
该属性表示该Activity运行的进程名称。
通常应用程序的所有组件在为应用程序而創建的默认进程中运行。
但是每个组件可以覆盖这个属性的值这样就实现了将应用程序部署在多个进程间。
如果分配该属性的名称是以冒号(:)开头则在需要新进程并且Activity在该进程中运行的时候,
就会创建一个对于应用程序私有的新进程
该属性表示Activity显示的方向(比如縱向,横向)它是值可以是下表中的任意一个字符。
该属性表明Activity是否能被终止以及是否能在还没有保存其状态的情况下成功重启。
如果Activity可以在不需要引用到之前状态的情况下就能被重启则该属性为true;
如果需要引用到之前的状态才能被偅启,则为false默认值是false。
该属性指明对该Activity有亲和力的任务
有同样亲和力的Activity在概念上属于同一任务(默认情况下是应用程序所定义的任务)。
任务的亲和力是由其根Activity的亲和力所决定的
该属性是指为Activity定义一个整体主题风格资源的引用。
所谓的风格包括字体种类整体样式等。使用该属性可以使得我们的Activity在整体上更为统一美观。
该属性表示Activity的主窗口如何与包含屏幕软键盘的窗口交互。
设置该属性将影响两件事