使用Gradle合并活动意图过滤器类别

4
使用Gradle,可以在口味清单中的活动意图过滤器中添加<category android:name="android.intent.category.HOME"/>。我的口味清单包含一个与基本清单相同名称的活动,但我从lint获得以下内容:Error: Duplicate registration for activity com.xxx.MainActivity [DuplicateActivity] 另外,通过忽略Lint,我可以得到一个合并器,但生成的清单包含来自基本清单和口味清单的两个intent-filter块,而不是这两者的组合。
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>

口味清单包含以下内容:

<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>

我得到的结果大致是这样的:
<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>
1个回答

7
在您的清单中添加以下内容:
<manifest ...
xmlns:tools="http://schemas.android.com/tools"
>

如果你只想替换活动,那么在你的 Flavor Manifest 上添加 tools: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>

更多信息请查看:http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger

此链接提供关于Android的新构建系统和清单合并工具的用户指南。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接