android:允许创建目标活动位于 aar/SDK 中的活动别名



我正在编写一个SDK,并希望开发人员能够创建一个activity-alias,其targetActivity设置为我的SDK中的活动。我这样做是因为我希望他们能够自定义 SDK 中特定活动的意图过滤器。如果在 sdk 的清单中有 ActivityX,我希望他们能够在他们的应用程序清单中编写这样的activity-alias

<activity-alias
    android:name="abc"
    android:targetActivity="ActivityX">
    <intent-filter>
    ... user's custom intent filter
    </intent-filter>
</activity-alias>

我遇到的问题是targetActivity有限制

"...必须与活动元素的 name 属性匹配 在清单中的别名之前

这是一个问题,因为无论我将活动放置在 sdk 清单中的哪个位置,或者将别名放置在示例应用的清单中的哪个位置,别名始终位于最终合并清单中的活动之前,从而导致INSTALL_PARSE_FAILED_MANIFEST_MALFORMED错误。

一种想法是在 sdk 清单中声明 ActivityX 之后放置一个没有意图筛选器的别名,并希望这两个别名将合并在一起并保持在 sdk 别名的位置。但是我不知道该怎么做。可能不起作用的一个原因是两个别名可能无法冲突。

您对通过合并解决方案或其他技术解决此问题有想法吗?

AOSP中提出了一个相同的问题。此处介绍了该问题的解决方法,如下所示:

手动包含 [sdk] 中的活动的清单条目 应用程序项目的清单,将其放在 活动别名条目。

尽管此解决方法存在以下问题:

。跨清单重复代码。

项目维护者似乎认为这个解决方案是足够的。没有迹象表明将很快发布对潜在问题的修复程序。

最新更新