Apk无法通过CTS测试:shouldNotFIndUnexpectedIntents,不明白为什么

时间:2018-05-06 05:22:05

标签: android android-broadcastreceiver android-8.0-oreo cts

历史:

我们的客户已经集成了我们的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

1 个答案:

答案 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