Мгновенные приложения — ключевая функция версии 10, поэтому крайне важно, чтобы они работали корректно. Мгновенные приложения устанавливаются неявно, поэтому имеют ограниченный набор возможностей и работают в более строгой изолированной среде безопасности. Из-за повсеместного распространения этих ограничений любая часть системы подвержена риску некорректной работы с мгновенными приложениями. Для обеспечения работоспособности разрешенных в мгновенных приложениях вариантов поведения создается подмножество тестов CTS. Основная идея заключается в минимизации роста размера CTS путем изоляции минимального набора тестов для переноса. Работа CTS в режиме мгновенных приложений подразумевает установку тестового APK-файла как мгновенного приложения и запуск тестов.
Ограничения мгновенного приложения
Приложения Instant Apps не устанавливаются пользователем, поэтому они работают в ограниченной «песочнице» со следующими ограничениями:
- Может иметь только определенные разрешения.
- Невозможно увидеть другие приложения, если только они не отмечены как видимые для Instant Apps.
- Возможен доступ только к определенным системным настройкам.
- Возможен доступ только к определенным свойствам системы.
- Невозможно раскрыть услуги/поставщиков.
- Может принимать и отправлять сообщения с соблюдением специальных правил для широковещательных сообщений.
Кроме того, приложения с мгновенным запуском должны согласиться на добавление дополнительных ограничений в новую безопасную песочницу. Этот широкий спектр специальных функций, связанных с приложениями с мгновенным запуском, охватывает всю платформу, поэтому необходим способ проверки того, что приложения с мгновенным запуском работают ожидаемым образом на всех устройствах в экосистеме.
Тесты, работающие в режиме мгновенных приложений
Не все модули CTS содержат тесты, применимые к мгновенным приложениям. Если функциональность, тестируемая модулем, взаимодействует с системным сервером, то эти тесты следует запускать в режиме мгновенных приложений. Например, тесты OpenGL не взаимодействуют с системным сервером, поэтому нет необходимости запускать их в режиме мгновенных приложений, в то время как тесты доступности взаимодействуют с системным сервером, но их необходимо запускать в режиме мгновенных приложений.
Помимо определения применимых модулей, пользователям необходимо определить, какие тесты в этих модулях релевантны. Например, тестирование поведения, специфичного для служб, для подключаемой архитектуры (например, AccessibilityService) неприменимо в режиме Instant App, поскольку Instant App не может предоставлять службы другим приложениям (включая платформу), в то время как тесты, проверяющие поведение на стороне приложения, применимы в режиме Instant App. Другой пример — тест, проверяющий поведение, связанное с разрешением, которое Instant App не может содержать, и он нерелевантен в режиме Instant App. Существует набор тестов, применяемых только к Instant App и проверяющих правила их поведения, например, запрет на предоставление служб или недоступность других приложений. Как правило, такие тесты уже написаны и не требуют портирования.
Сбои в тестировании в режиме мгновенных приложений
Если тест провален, поскольку он проверяет функциональность, к которой у Instant Apps нет доступа, то он неприменим в режиме Instant Apps. Отметьте тест для запуска только в режиме Full App, добавив к нему аннотацию @AppModeFull
. Вы можете применить эту аннотацию к уровню класса, чтобы исключить все тесты в нём.
Если тест не пройден из-за того, что некоторые функции, доступные в Instant Apps, не работают, сообщите об ошибке .
Поиск неисправностей
Если тест завершается с ошибкой Failed to install MyCtsModule.apk on DEVICE. Reason: '-116' , проверьте сообщения PackageManager в LogCat. Например, если там написано Can't replace Full App with Instant App: your_app , сначала удалите приложение с помощью adb.