如何使用新的清单合并(Android Studio和Gradle)?

背景

在过去,当Eclipse和ADT是Android开发的官方工具时,您可以在应用程序项目的“ project.properties ”中使用“ manifestmerger.enabled = true ”,然后自动合并所有库的清单(我在这里发布了它)。

这有时候很有效。 它有很多奇怪的问题,我总是倾向于避免使用它,并手动将所需内容放入主清单文件中。

问题

在2014年的某个地方,谷歌宣布新的Android-Studio(我认为0.1)与Gradle一起,将允许您精确选择如何合并库的组件。

但是,新指令(链接在这里 )非常复杂,我真的(真的)试图了解如何使用它们,也没有find如何使用它们的示例。

这不是我什么都不懂,但我不确定我是否理解得很好。

    我发现了什么

    从好的方面来说,我发现合并是完全自动完成的,所以如果您在库的清单上有一个BroadcastReceiver(当然还有一个类),它将被添加到使用它的应用程序的项目中。

    这个问题

    我不能简单地要求解释一切。 我认为提出这些问题就足够了:

    1. 如何选择要自动合并的哪些应用程序组件(权限,活动……)?

    2. 如何指定覆盖应用程序组件(库的)属性(在应用程序的项目上)? 例如活动的主题?

    3. 有没有办法完全禁用清单文件的自动合并?

    4. 存储库中的依赖项清单会发生什么? 他们合并了吗?

    5. 是否有关于这个新function(对我而言是新的)function的教程/样本/video?

    6. 使用自动合并时,我应该注意什么?

    我希望这些问题具有足够的代表性,足够的信息,但对于知道的人来说,并不难回答。

    Related of "如何使用新的清单合并(Android Studio和Gradle)?"

    1.禁用元素

    您始终可以在应用清单中明确禁用权限和function,并覆盖任何库值。 我发现你可以禁用库中的元素 。

    请考虑以上链接中的以下代码:

       

    通过在清单中包含此代码,您可以确保合并find任何带有android:name="foo.bar.alias"属性的元素,如果它具有android:name="zoo" ,则删除元素android:name="zoo"属性。 它只删除“zoo”元数据。 不是活动别名。 如果在主清单中指定它,它将对目前已合并的任何内容(库中的元素)有效。

    例#2

    既然你要求一个有活动的例子,这就是我提出的:

      

    此行将使合并删除目前已合并的android:name="com.example.ui.MyActivity"属性的所有活动。 因此,如果您在主清单中指定它,它将有效地删除可能已从库中合并的任何com.example.ui.MyActivity条目。

    2.覆盖库中的属性

    合并值的顺序在清单文件排序部分中描述。 基本上它是这样的:库,然后主要清单,然后味道和构建types显示,如果你使用它们。 如何覆盖库中的属性?

    什么是构建types?

    默认为“debug”和“release”。 您可以定义自己的和覆盖设置,如签名proguard 。 出于您的目的,您可以说它相当于运行配置。

    它的工作原理如下:您将默认值和共享值放在main清单中。 然后在风格清单中,您可以覆盖所需的值。 谷歌“gradle flavors”获取更多信息。

    3.完全禁用清单合并

    在Android Gradle Build中禁用Manifest Merger

     android.applicationVariants.all { variant -> variant.processResources.manifestFile = file('src/main/AndroidManifest.xml') variant.processManifest.enabled=false } 

    你把这个文件放在哪个文件中?

    模块的末尾(不是根项目) build.gradle

    4.依赖关系的清单是否合并?

    是的他们(他们是图书馆)。

    有没有办法阻止合并某些图书馆清单?

    不是我知道的,抱歉。

    5.任何教程?

    取决于你想要实现的目标。 到目前为止,它始终对我开箱即用。

    • 例如http://www.myandroidsolutions.com/2014/04/10/android-gradle-manifest-merge/
    • 清单合并文档(链接如下)。

    我不知道任何video。

    6.我应该注意什么?

    如果您对额外权限等有疑问,可以检查生成的清单。它位于project/module/build/intermediates/manifests/full/[flavor]/build-type/AndroidManifest.xml

    酱: http : //tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger