Apk 未通过 CTS 测试:shouldNotFIndUnexpectedIntents,不知道为什么

Apk fails CTS test: shouldNotFIndUnexpectedIntents, no idea why

历史:

我们的一个客户已经为 Android 集成了我们的 SDK 库。他们试图通过 Google 的兼容性测试 (CTS)。

问题:

他们未通过 CTS 测试服并显示以下消息: android.signature.cts.intent.intentTest#shouldNotFindUnexpectedIntents |结果失败 | java.lang.AssertionError: [package <他们的包> Invalid Intent: [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 包含一个不是 "platform Intent" 的 Intent,特别是 "BROADCAST_COMPLETE"。 (https://github.com/leolin310148/ShortcutBadger/issues/274)

4) 以上让我想到了 Google 新推出的 "Background Limitations" 以及他们如何禁止 Android 8.0 及更高版本中的隐式 Intent 接收器。但是,据说 BROADCAST_COMPLETE 将不受此禁令的约束。 (https://developer.android.com/about/versions/oreo/background#broadcasts)

test in question 检查清单中是否引用了非 平台 Intent 的任何 Intent。它通过检查所有以 android.intent.action 开头但不在 Platform Intents.[=20= 列表中的 Intents 来实现此目的]

要通过测试,您需要从 <intent-filter> 中删除 BOOT_COMPLETED 或将其替换为合适的 平台 Intent

另请参阅此问题报告:https://github.com/leolin310148/ShortcutBadger/issues/274