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 Intent
s.[=20= 列表中的 Intent
s 来实现此目的]
要通过测试,您需要从 <intent-filter>
中删除 BOOT_COMPLETED
或将其替换为合适的 平台 Intent
另请参阅此问题报告:https://github.com/leolin310148/ShortcutBadger/issues/274
历史:
我们的一个客户已经为 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 Intent
s.[=20= 列表中的 Intent
s 来实现此目的]
要通过测试,您需要从 <intent-filter>
中删除 BOOT_COMPLETED
或将其替换为合适的 平台 Intent
另请参阅此问题报告:https://github.com/leolin310148/ShortcutBadger/issues/274