我正在编写一个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] 中的活动的清单条目 应用程序项目的清单,将其放在 活动别名条目。
尽管此解决方法存在以下问题:
。跨清单重复代码。
项目维护者似乎认为这个解决方案是足够的。没有迹象表明将很快发布对潜在问题的修复程序。