CTS для мгновенных приложений

Мгновенные приложения — ключевая функция версии 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.