我正在编写一个 SDK,并希望开发人员能够创建一个 activity-alias
,其 targetActivity
设置为我的 SDK 中的一个 Activity 。我这样做是因为我希望他们能够针对 SDK 中的特定 Activity 自定义 Intent 过滤器。如果在 sdk 的 list 中有 ActivityX,我希望他们能够在他们的应用程序 list 中编写这样的 activity-alias
:
<activity-alias
android:name="abc"
android:targetActivity="ActivityX">
<intent-filter>
... user's custom intent filter
</intent-filter>
</activity-alias>
我遇到的问题是 targetActivity
有 restriction它:
"... must match the name attribute of an activity element that precedes the alias in the manifest."
这是一个问题,因为无论我将 Activity 放置在 sdk list 中的什么位置,或者将别名放置在示例应用程序 list 中的什么位置,别名总是出现在最终合并 list 中的 Activity 之前,从而导致 INSTALL_PARSE_FAILED_MANIFEST_MALFORMED
错误。
一个想法是在 sdk list 中声明 ActivityX 之后放置一个没有 Intent 过滤器的别名,并希望这两个别名是 merged together并留在 sdk 别名的位置。但我不知道该怎么做。可能不起作用的原因之一是两个别名可能不会发生冲突。
您是否想过通过合并解决方案或其他一些技术来解决这个问题?
最佳答案
一个相同的issue是在 AOSP 中提出来的。该问题的解决方法描述如下:
Manually include the manifest entry for the Activity from [the sdk] in the manifest of the application project, placing it before the activity-alias entry.
尽管这个变通办法有问题
... duplicate code across manifests.
看起来项目维护者认为这个解决方案是足够的。没有迹象表明会很快发布对潜在问题的修复。
关于android:允许创建一个 Activity 别名,其 targetActivity 在 aar/sdk 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35690348/