【问题标题】:Android manifest merger fails for receivers with same name but different content对于具有相同名称但不同内容的接收器,Android 清单合并失败
【发布时间】:2015-01-04 06:14:39
【问题描述】:

我在清单合并与重复接收器时遇到问题,但内容不同。我将以下接收器用于不同的 API 级别,到目前为止没有问题,直到合并。由于合并导致构建失败

Element receiver#.receivers.UpdateReceiver duplicated with element declared at AndroidManifest.xml:124:9

我不想创建另一个接收器并继续使用此架构。有没有办法针对这些情况禁用合并或将接收器合并为一个,但可以选择启用具有不同意图的操作?

<receiver
    android:name=".receivers.UpdateReceiver"
    android:enabled="@bool/is_api_below_12">
    <intent-filter>
        <action android:name="android.intent.action.PACKAGE_REPLACED" />
        <data android:scheme="package" />
    </intent-filter>
</receiver>

<receiver
    android:name=".receivers.UpdateReceiver"
    android:enabled="@bool/is_api_12_and_above">
    <intent-filter>
        <action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
    </intent-filter>
</receiver>

【问题讨论】:

  • 从未尝试过,但 1 个接收者标签中包含 2 个意图过滤器应该是合法的。
  • @GabeSechan 我需要“启用”属性,如果我们在意图过滤器中使用它会很棒。
  • 严格来说你不需要——你总是可以让接收者的第一行来决定是否处理意图,如果不处理则退出。启用只是一种更好的方式。
  • 你能提供一个样本吗?我假设我可以继续有意或完全忽略它?我猜在意图之间不会有选择。我也可能误解了你的说法。
  • 是的——你可以检查你实际得到的意图,然后检查你想要启用的布尔值,并决定是处理意图还是忽略它。

标签: android android-manifest


【解决方案1】:

也许你可以设置

android {
   useOldManifestMerger true
}

在您的 build.gradle 文件中 这在我的项目中运行良好 您可以查看更多详情here

【讨论】:

【解决方案2】:

您可以在 this answer 中找到我如何解决您完全相同的问题。基本上我创建了另一个类,但我将其设为静态内部类以避免创建另一个文件来处理常见操作。

【讨论】:

    猜你喜欢
    • 2020-01-02
    • 2015-01-25
    • 1970-01-01
    • 2018-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    相关资源
    最近更新 更多