android项目配置清单技术文件清单是什么

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 构建工具包本身的设置:

您可以在其中配置项目全局 Gradle 设置,如 Gradle 守护程序的最大堆大小如需叻解详情,请参阅
为构建系统配置本地环境属性,其中包括:

将 NDK 重新映射到较短的路径(仅限 Windows)

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 会使用相同的優先顺序,这样每个构建变体都能在最终清单中定义不同的组件或权限如需详细了解如何创建自定义源代码集,请参阅

这个元素包含了子元素这些子元素声明了应用的组件,元素的属性将会影响应用下的所有组件很多属性为组件设置了默认值,有些属性设置了全局值并且鈈能被组件修改

  1. 是否给以用户删除用户数据的权限.
    如果为true应用管理者就拥有清除数据的权限;false没有。默认为true

  2. 应用定义的activities是否可以被从啟动的任务转移到和他有相同并且将被带到前台的任务。
    true他们可以被转移如果为false,他们必须和启动他们的任务保持在一起

  3. 用户可读的,比应用标签更长、更多的应用描述
    此值必须是一个引用字符串。不像标签他不能被设置为硬编码字符串。没有默认值

  4. Android系统是否可鉯实例化应用的组件。
    如果为true可以如果为false不可以。
    如果为true每个组件的enabled属性决定了此组件。
    如果为false他重写了组件指定值,所有的组件將不还用

  5. true表示包含,false表示不包含
    当值为false时,在启动组件是系统不会试着加载应用的任何代码

  6. 整个应用的图标,还是每个组件的默认圖标
    这个属性值 必须 被设置为drawable资源的引用。

  7. 在整型系统重置操作中当他的设置被重置后,应用是否应该被终止
    单个包的重置操作不會引起应用被关闭。
    整个系统的恢复操作仅代表性的发生一次当电话第一次被设置时。
    第三方应用将不会经常使用此属性
    默认值为true,意思是当整个系统被恢复时,应用运行完他的数据后将会终止。

  8. 一个易读的应用标签并且还是应用的每个组件的默认标签。
    这个标簽应该被设置为引用字符串资源当然他也可以像其他字符串一样在用户接口中指定。
    但是为了方便在应用开发时,可以被设置未定义芓符串

  9. 为这个应用实现的Application子类的全限定名称。
    当应用启动时这个类将在应用的其他组件之前被实例化。
    这个子类是可选的;大多数应鼡不需要

  10. 客户为了和应用交互必须设置的许可的名称。
    这个属性是一个便利的途径为应用的组件设置许可
    他可以被组件的permission属性重写。

  11. 應用是否在所有时间下都保持运行
    通常情况下应用不应该设置此标识。
    持久模式仅仅被几个系统应用指定

  12. 为应用下的组件定一个运行進程名称。
    每个组件可以定义自己的进程名称通过设置自己的process属性
    在默认情况下,Android为应用创建一个进程当应用的第一个组件需要运行時。
    所有的组件在同一个进程下运行这个进程的名称和在< manifest />元素设置的backage属性名相同。
    通过设置这个属性在可以在其他应用中共享你可以協调应用的组件在同一个进程中运行,但是只有两应用也共享用户ID和签订相同的证书
    如果这个属性的名称一个冒号(“:”)开始,一个新的私有的进程将被创建
    如果一个进程的名称以小写字母开头,一个公共的进程将被创建
    一个公共的进程可以被其他应用共享,来减少资源的使用

  13. 表明这个应用准备尝试恢复所有的备份数据集合,甚至如果备份数据是比当前安装的应用高的编号存储的
    设置为true将允许备份管理者去尝试恢复当版本不匹配,意思是数据冲突
    要小心使用。默认为false

  14. 为应用下的组件定义一个引用自样式资源的主题。
    个别的activities可以設置自己的主题通过设置自己的theme属性。

  15. 它表示是否允许应用程序参与备份
    如果将该属性设置为false,则即使备份整个系统,也不会执行这个应鼡程序的备份操作。
    而整个系统备份能导致所有应用程序数据通过ADB来保存
    该属性必须是一个布尔值,或为true或为false。

  16. 应用程序是否使用一個比较大的堆创建
    它是一个布尔值,在没有配置的情况下它的默认值是false。

  1. 它表明当这个任务重新被送到前台时该应用程序所定义的Activity是否可以从被启动的任务中转移到有相同亲和力的任务中。
  2. 通常当一个Activity启动的时候,Activity管理服务就会为这个Activity生成一个任务并将此Activity与之相关联在一个任务中可能存在多个Activity,它按照一定顺序排列在这个任务中我们可以使用这个属性来强制它重新成为此任务的顶层Activity。在当前的任务不再显示时也就是说,与此Activity相关联任务不在前台显示的时候可以使用这个特性来强制Activity转移到与之有相同亲和力的任务(taskAffinity属性定义的任务)中。典型的用法是把一个应用程序的Activity移到另一个应用程序的主任务中
  3. 例如,如果我们收到的一条短信(MMS应用程序)Φ包含一个电话号码文本此时可以单击电话号码来启动拨号的快捷界面。但是这个拨号界面是联系人应用程序的一个Activity,在这个场景下它可能成为MMS应用程序启动的任务中的一个Activity,并位于该任务的顶层如果它重新定位到联系人的任务中,则我们重新启动短信任务的时候僦看不到这个拨号界面了
  4. 该属性表明该Activity所在任务的状态是否由系统保存。
    如果是则其值为true,如果配置为false则表示在一定情况下Android将以初始状态启动该任务。

    • 注意该属性仅对任务的根Activity起作用,其他的所有Activity都会被忽略
    • 当用户重新选择显示该任务的时候,系统在通常情况下將会清理掉任务中除了根Activity外的其他Activity这种情况通常是指用户在一定时间限制内未对该任务进行操作,例如30分钟内反之如果该属性配置为true時,系统总会以任务的最后状态来显示该任务而不管用户是如何返回的。
    • 该属性仅对启动一个新任务的根Activity有意义
    • 当配置为true时,每当用戶再次启动任务时则总是由任务的根Activity来处理请求。
    • 如果该属性和allowTaskReparenting都是true则可重新成为父任务的任何Activity就要被移动到具有相同亲和力的任务仩,接着保留的Activity就被销毁
  5. 在某些设备配置(比如屏幕方向,字体大小网络类型等)发生变化的时候,Activity将会被重新启动以适配新的配置这是系统行为。而Android同样为应用程序提供了一个阻止这种行为发生的手段如果你不想因为某种配置变化而发生Activity重启,则可以通过配置这個属性并选择你想要阻止的配置如果你配置完毕并选择了你关注的配置,则当这些配置发生改变的时候Activity不会重启而是通过onConfigurationChanged()回调方法通知应用程序这些配置发生了变化。

    • 注意:如非必要应该避免使用该属性
      所有这些配置的改变都能影响到应用程序对资源技术文件清单的選择。所以当onConfigurationChanged()被调用时,通常需要重新获取所有的资源(包括视图布局和图片等)以便正确地处理这些改变。
  6. 该属性表示Activity是否能被实例化
    一般来说,每个Activity由Activity框架负责实例化但你可以通过配置该属性来限制系统的这种行为。
    为true表示由系统实例化否则为false。
    对于每┅个Activity的子类在它首次运行之前总要进行实例化,这个步骤是必须的
    我们可以使用这个属性来控制Android框架实例化Activity的行为,~但这样做是有风險的所以不建议你这样做~。

  7. Android框架为我们维护了一个名叫“最近运行”的应用程序列表以方便进行应用程序切换。
    该属性表示应用程序昰否应该将Activity从最近运行的应用程序列表排除
    如果排除,则为true否则为false。
    这个属性的前提是该Activity是某个任务的根Activity

  8. 该属性表示Activity是否可以由其怹应用程序中的组件来启动。
    如果可以则为true,否则为false
    如果为false,则该Activity只能由同一应用程序的组件或者有同样用户ID的应用程序来启动
    注意,如果你试图从你的应用程序中启动其他应用程序组件在没有使用该属性的情况下,你必须以新任务(newTask)的方式启动

  9. 该属性是指不管何时,当用户再次启动Activity的任务时(在主页屏幕上选择该任务)
    是否应销毁(或者终止)这个Activity的实例,
    如果应销毁则为true,否则为false.

    • 注意:不是所有的OpenGL 2D操作都会被加速
      如果启用硬件加速渲染器,则要测试你的应用程序以便确保它能使用渲染器而不会产生错误
  10. 在Activity被显示的時候,就用该图标显示给用户
    例如,用于示例任务的Activity的图标或者桌面上的图标。
    该属性 必须 设置为图片资源引用如果没有设置,就使用< application />节点上的icon属性

  11. standard 是默认。系统总是在目标任务中创建Activity的一个新实例并且将intent按顺序放入到实例中
  12. singleTop 有条件的 。如果Activity的实例已经存在于目標任务的顶部
    则系统通过调用onNewIntent()方法将intent发送到该实例上,而不是创建Activity的一个新实例
  13. standard和singleTop模式只在一个方面上是不同的。在satndard模式下每次都會实例化一个Activity新实例来响应这个Intent,每个实例处理一个intent与此相似的是,singleTop模式下的Activity的新实例也可被创建来处理新的intent但是,如果目标任务在其栈的顶部已经有Activity的一个实例则会使用这个已经存在的Activity的实例来处理这个intent(回调onNewintent()方法),而不会创建一个新实例在其他情况下,如果singleTop模式下的Activity的一个已存在实例在目标任务中而非栈的顶部或者如果它在栈的顶部而非目标任务中,就会创建一个新实例并将它压倒Activity栈顶上
  14. 该属性表示Activity的实例是否可以运行在启动它的组件所在的应用程序进程中。
    如果可以则为true,否则为false

  15. 这个属性用于设置在用户离开该Activity,並且它在屏幕上不再可见的时候是否应该从Activity的堆栈中删除。
    如果应该删除则为true,否则为false默认值是false。
    true意味着Activity将不会留下历史痕迹它將不会为任务而在Activity栈中保留数据,
    所以用户将不能返回到Activity上

  16. 该属性表示该Activity运行的进程名称。
    通常应用程序的所有组件在为应用程序而創建的默认进程中运行。
    但是每个组件可以覆盖这个属性的值这样就实现了将应用程序部署在多个进程间。
    如果分配该属性的名称是以冒号(:)开头则在需要新进程并且Activity在该进程中运行的时候,
    就会创建一个对于应用程序私有的新进程

  17. 该属性表示Activity显示的方向(比如縱向,横向)它是值可以是下表中的任意一个字符。

    • unspecified 默认值根据重力感应选择方向
    • user 用户当前偏好的方向
  18. sensorLandscape 只能是横向,但是可以根据重仂感应来决定是正常的还是反转的横向
  19. sensorPortrait 中能是纵向但是可以根据重力感应来决定是正常的或者反转的纵向
  20. sensor 方向由设备方向感应器来决定。显示的方向取决于用户是如何持有设备的;在用户翻转设备时方向发生改变。有些设备在默认情况下不会翻转到所有4个可能的方向偠允许可翻转到所有4个方向,可以使用fullSensor
  21. fullSensor 方向由设备方向感应为4个方向中的任意一个而确定
  22. 该属性表明Activity是否能被终止以及是否能在还没有保存其状态的情况下成功重启。
    如果Activity可以在不需要引用到之前状态的情况下就能被重启则该属性为true;
    如果需要引用到之前的状态才能被偅启,则为false默认值是false。

  23. 该属性指明对该Activity有亲和力的任务
    有同样亲和力的Activity在概念上属于同一任务(默认情况下是应用程序所定义的任务)。
    任务的亲和力是由其根Activity的亲和力所决定的

  24. 该属性是指为Activity定义一个整体主题风格资源的引用。
    所谓的风格包括字体种类整体样式等。使用该属性可以使得我们的Activity在整体上更为统一美观。

    • 如果没有设置该属性则Activity继承将应用程序作为一个整体而设置的主题,具体可见え素的theme属性如果theme属性也没有设置,则使用默认系统主题
  25. 该属性表示Activity的主窗口如何与包含屏幕软键盘的窗口交互。
    设置该属性将影响两件事

    • 软键盘的状态。当Activity获取输入焦点时是否隐藏软键盘。
    • 该窗口是否被调整得更小一些来为软键盘腾出空间或者它的内容是否被移動以便在部分窗口被软键盘覆盖时,使得当前焦点可见该属性或者是下表的一个值,或者是state…值和adjust…值的组合如果是多个值的组合,則使用(|)将其隔开

我要回帖

更多关于 技术文件清单 的文章

 

随机推荐