Android – 如何避免多个Manifest文件中的重复?

我的项目有3个Manifest文件:

flavour/AndroidManifest.xml flavourDebug/AndroidManifest.xml flavourRelease/AndroidManifest.xml 

这是flavor / AndroidManifest.xml:

    

这是flavourDebug / AndroidManifest.xml:

   // Activity definitions in here   

这是flavourRelease / AndroidManifest.xml:

   // Activity definitions in here (these are the EXACT SAME as the ones in flavourDebug/AndroidManifest.xml)   

正如您所看到的,Debug和Release Manifests之间的唯一区别是Release 1缺少android:networkSecurityConfig

此外, // Activity definitions in here部分中的// Activity definitions in here完全相同。 我想要的是避免重复活动。 每次我们必须在Activity定义中更改某些内容(或添加一个新的Activity)时,我们必须在2个Manifest文件(Debug和Release)中执行此操作。

我有想法将所有内容放在主AndroidManifest.xml文件中。 问题是我无法将android:networkSecurityConfig="@xml/network_security_config" 仅添加到调试版本中

在Android布局中,使用标记解决了该问题。 不幸的是,Manifest中没有。

我怎样才能解决这个重复问题?

您绝对可以将flavour/AndroidManifest.xml flavourDebug/AndroidManifest.xml的公共部分和flavourDebug/AndroidManifest.xml的additionalnal属性(以及src/flavourDebug/res/xml目录中引用的xml文件)放在src/flavourDebug/res/xml

  

在添加属性时,它应该开箱即用,不需要调整合并规则( tools:node="merge"是大多数元素的默认行为)。

使用Android Studio 3.1(可能还有早期版本),您可以在编辑器的“ 合并清单”选项卡中查看最终清单以及每个属性或元素的来源。

您当然可以控制如何合并资源并可以使用主文件夹避免这种重复,请查看此处的文档,您可能会感兴趣的tools:node="merge"可以帮助您控制节点的合并方式,您将获得更多从上面的链接的信息。