历史:
我们的客户已经集成了我们的Android SDK库。他们试图通过谷歌的兼容性测试(CTS)。
问题:
他们用CTS测试套装失败,并带有以下消息: android.signature.cts.intent.intentTest#ShouldNotFindUnexpectedIntents |结果失败| java.lang.AssertionError:[package< 他们的包>意图无效:[android.intent.action.ACTION_BOOT_COMPLETE]]。
主要问题:
我的目标是帮助他们通过此测试,但我不确定真正的问题是什么以及如何解决它。有人可以帮忙吗?
详细信息:
1)我目前无法从客户端提取有关其主机apk的信息。我所知道的是,他们正在为 Android 8.0设备测试 priv-app apk 。 (它合法地是一个私有应用程序,应该是)。我不能确定接下来的几天,但我相信他们的targetSdk是26(即Android 8.0.0)
2)我们的SDK库包含一个广播接收器,其定义如下:
<receiver android:enabled="true" android:exported="false" android:name="<our Broadcast Receiver class path>">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.intent.action.MY_PACKAGE_REPLACED"/>
<action android:name="com.dt.ignite.startService"/>
<action android:name="<our package>.<our custom intent name 1>"/>
<action android:name="<our package>.<our custom intent name 2>"/>
<action android:name="<our package>.<our custom intent name 3>"/>
</intent-filter>
</receiver>
3)查看这个特定CTS测试(IntentTest.java)的源代码,我理解它失败了,因为这个apk的ApplicationInfo包含一个Intent,它不是&#34;平台Intent&#34; ,特别是&#34; BROADCAST_COMPLETE&#34;。 (https://github.com/leolin310148/ShortcutBadger/issues/274)
4)上面让我想起了Google新推出的&#34;背景限制&#34;以及他们如何禁止Android 8.0及以上的隐式Intent接收器。但是,据说BROADCAST_COMPLETE将免于此禁令。 (https://developer.android.com/about/versions/oreo/background#broadcasts)
答案 0 :(得分:1)
test in question检查清单中是否引用了任何Intent
非平台Intent
。它通过检查所有以Intent
开头且不在平台android.intent.action
s 列表中的Intent
来执行此操作。
要通过测试,您需要从BOOT_COMPLETED
移除<intent-filter>
或将其替换为合适的平台Intent
另请参阅此问题报告:https://github.com/leolin310148/ShortcutBadger/issues/274