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

时间:2018-03-27 21:15:44

标签: android include android-manifest manifest repeat

我的项目有3个清单文件:

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

这是flavor / AndroidManifest.xml:

<manifest
    xmlns:android="http://schemas.android.com/apk/res/android">

    <uses-permission android:name="android.permission.READ_CONTACTS" />
</manifest>

这是flavourDebug / AndroidManifest.xml:

<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <application android:name="com.domain.android.MyApplication"
        android:allowBackup="false"
        android:label="@string/app_name"
        android:logo="@drawable/ic_logo"
        android:theme="@style/Theme.CustomActionBarStyle"
        android:networkSecurityConfig="@xml/network_security_config"
        tools:replace="theme">

        // Activity definitions in here

     </application>
</manifest>

这是flavourRelease / AndroidManifest.xml:

<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <application android:name="com.domain.android.MyApplication"
        android:allowBackup="false"
        android:label="@string/app_name"
        android:logo="@drawable/ic_logo"
        android:theme="@style/Theme.CustomActionBarStyle"
        tools:replace="theme">

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

     </application>
</manifest>

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

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

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

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

如何解决这个重复问题?

2 个答案:

答案 0 :(得分:6)

你绝对可以将公共部分放在flavour/AndroidManifest.xml中,并在flavourDebug/AndroidManifest.xml中加上extranal属性(以及src/flavourDebug/res/xml目录中引用的xml文件):

<application
    android:networkSecurityConfig="@xml/network_security_config" />

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

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

答案 1 :(得分:1)

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