Apk не проходит тест CTS: должен NotFndUnexpectedIntents, не знаю почему - PullRequest
0 голосов
/ 06 мая 2018

История

Наш клиент интегрировал нашу библиотеку SDK для Android. Они пытаются пройти тест на совместимость с Google (CTS).

Выпуск:

Они не прошли тестовый костюм CTS со следующим сообщением: android.signature.cts.intent.intentTest # shouldNotFindUnexpectedIntents | Результат провал | java.lang.AssertionError: [пакет <<em> их пакет > недопустимое намерение: [android.intent.action.ACTION_BOOT_COMPLETE]].

Основной вопрос:

Моя цель - помочь им пройти этот тест, но я не уверен, в чем заключается настоящая проблема и как ее решить. Кто-нибудь может помочь?

подробности:

1) В настоящее время я вообще не могу извлекать информацию от нашего клиента об их хосте apk. Все, что я знаю, это то, что они тестируют priv-app apk для устройств Android 8.0 . (Это законно Priv-приложение и должно быть). Я не могу быть уверен в следующие несколько дней, но я считаю, что их targetSdk равен 26 (то есть Android 8.0.0)

2) Наша библиотека SDK содержит Broadcast Receiver, который определен следующим образом:

<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), я понимаю, что он терпит неудачу, потому что ApplicationInfo этого apk содержит Intent, который не является "Intent платформы", в частности, "BROADCAST_COMPLETE". (https://github.com/leolin310148/ShortcutBadger/issues/274)

4) Вышесказанное заставило меня задуматься о недавно введенных Google «Фоновых ограничениях» и о том, как они запрещают неявные приемники Intent с Android 8.0 и выше. Однако указывается, что BROADCAST_COMPLETE будет освобожден от этого бана. (https://developer.android.com/about/versions/oreo/background#broadcasts)

1 Ответ

0 голосов
/ 07 мая 2018

Тест в вопросе проверяет, есть ли в манифесте ссылки на Intent, которые НЕ Платформа Intent s . Это делается путем проверки всех Intent s, которые начинаются с android.intent.action, которых нет в списке Platform Intent s .

Чтобы пройти тест, вам нужно либо удалить BOOT_COMPLETED из <intent-filter>, либо заменить его на подходящую платформу Intent

См. Также этот отчет о проблеме: https://github.com/leolin310148/ShortcutBadger/issues/274

...