【问题标题】:Manifest merger failed for <receiver> when migrating to android 12 despite adding android: exported flag尽管添加了 android:exported 标志,但在迁移到 android 12 时 <receiver> 的清单合并失败
【发布时间】:2022-01-11 11:07:51
【问题描述】:

我正在尝试通过将 build.gradle 中的目标 SDK 版本更改为 31 来将我的应用程序迁移到 android 12。 根据需要,我已将 android:exported 标志添加到清单文件中存在的每个活动/接收器/服务/提供者标签。但我仍然收到此错误。

Manifest merger failed : android:exported needs to be explicitly specified for <receiver>. Apps targeting Android 12 and higher are required to specify an explicit value for `android:exported` when the corresponding component has an intent filter defined.

所以我猜这个问题是由于任何 3rd 方库的清单包含一个没有android:exported 标志的接收器。

我还检查了合并的清单文件是否在任何第三方库的组件中缺少 android:exported。但在合并的清单文件中,所有活动/接收器/服务标签也都有导出标志。

那么我怎样才能找到导致问题的丢失的接收器。

【问题讨论】:

  • 您可以尝试手动运行带有--debug参数的gradle,希望日志显示错误发生时处理的是哪个第三方库。
  • @Robert,已经尝试过了,但没有成功。
  • 然后您可以尝试检查应用程序构建目录以获取合并的清单文件。例如。检查app/build/intermediates/merged_manifestapp/build/intermediates/packed_manifest 希望合并的清单首先保存到磁盘,然后检查错误。
  • 你为接收者设置了android:exported="fasle" 吗?

标签: android android-studio kotlin android-manifest android-12


【解决方案1】:

原因是因为您使用的某些依赖库的元素没有“android:exported”属性。

你需要这样做:

  • 将 gradle 中的版本降低到 30 并同步和构建。
  • 转到您的 AndroidManifest.xml 文件并点击“Merged Manifest”。
  • 查找没有“android:exported”属性的项目。
  • 然后以这种方式将它们添加到您的 AndroidManifest.xml 文件中。
<activity
    android:name="SomeActivity"
    android:exported="false"
    tools:node="merge"
    tools:replace="android:exported" />

现在您可以将版本增加到 31。

【讨论】:

    猜你喜欢
    • 2022-08-12
    • 2023-01-04
    • 2022-07-08
    • 2021-08-11
    • 1970-01-01
    • 2018-03-15
    • 2018-02-18
    • 1970-01-01
    • 2021-11-28
    相关资源
    最近更新 更多