将活动意图过滤器类别与Gradle合并

Wee*_*boy 4 android gradle android-activity android-gradle-plugin

使用Gradle可以<category android:name="android.intent.category.HOME"/>在flavor清单中添加活动的intent过滤器吗?我的flavor清单包含一个与基本清单同名的活动,但是我从lint获得以下内容: Error: Duplicate registration for activity com.xxx.MainActivity [DuplicateActivity]

此外,通过忽略Lint,我可以获得合并但是生成的清单具有来自基础和风味清单的两个意图过滤器块而不是两者的组合.

Gradle版本是0.12.+其中的文档似乎暗示它是可能的.

主清单包含以下活动:

<activity
        android:name=".MainActivity">
    <intent-filter>
        <action android:name="com.reveldigital.player.RESTART"/>
        <action android:name="android.intent.action.MAIN"/>

        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
    <intent-filter>
        <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"/>
    </intent-filter>

    <meta-data
            android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
            android:resource="@xml/device_filter"/>
</activity>
Run Code Online (Sandbox Code Playgroud)

风味清单包含:

<activity android:name="com.xxx.MainActivity">
            <intent-filter>
                <action android:name="com.reveldigital.player.RESTART"/>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.HOME"/>
            </intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)

我得到的结果是这样的:

<activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="com.reveldigital.player.RESTART"/>
            <action android:name="android.intent.action.MAIN"/>

            <category android:name="android.intent.category.DEFAULT"/>
        </intent-filter>
<intent-filter>
                    <action android:name="com.reveldigital.player.RESTART"/>
                    <action android:name="android.intent.action.MAIN"/>

                    <category android:name="android.intent.category.DEFAULT"/>
                    <category android:name="android.intent.category.HOME"/>
                </intent-filter>
        <intent-filter>
            <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"/>
        </intent-filter>

        <meta-data
                android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
                android:resource="@xml/device_filter"/>
</activity>
Run Code Online (Sandbox Code Playgroud)

小智 7

在你清单上添加以下内容:

<manifest ...
xmlns:tools="http://schemas.android.com/tools"
>
Run Code Online (Sandbox Code Playgroud)

如果您只想更换活动,那么在Flavor Manifest上添加工具:node ="replace",如下所示:

<activity android:name=".MainActivity" 
        tools:node="replace">
        <intent-filter>
            <action android:name="com.reveldigital.player.RESTART"/>
            <action android:name="android.intent.action.MAIN"/>

            <category android:name="android.intent.category.DEFAULT"/>
            <category android:name="android.intent.category.HOME"/>
        </intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)

欲了解更多信息,请访问:http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger