【问题标题】:Merging activity intent-filter categories with Gradle将活动意图过滤器类别与 Gradle 合并
【发布时间】:2014-12-03 19:04:22
【问题描述】:

使用 Gradle 是否可以将 <category android:name="android.intent.category.HOME"/> 添加到风味清单中活动的意图过滤器?我的风味清单包含一个与基本清单同名的活动,但我从 lint 得到以下信息:Error: Duplicate registration for activity com.xxx.MainActivity [DuplicateActivity]

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

Gradle 版本是 0.12.+ 其中the docs 似乎暗示它是可能的。

主清单包含以下活动:

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

【问题讨论】:

    标签: android android-activity gradle android-gradle-plugin


    【解决方案1】:

    在清单上添加以下内容:

    <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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-10
      • 1970-01-01
      相关资源
      最近更新 更多