Instant Apps は、Android 10 の重要な機能であるため、正しく動作することが重要です。Instant App は、明示的なインストールが不要なため、機能に制約があり、制限の厳しいセキュリティ サンドボックス内で実行されます。このような制限が至る所にあるため、システムのどの部分にも Instant App の正常な動作を妨げる危険性があります。CTS テスト サブセットは、Instant Apps によって許可されている動作が正常に機能していることを確認するために作成されています。移植の必要な最小限のテストセットを分離して、CTS の肥大化を最小限に抑えようというのが基本的な考え方です。CTS を Instant Apps モードで実行するということは、つまり、テスト APK を Instant App としてインストールして、テストを実行するということです。
Instant App での制限
Instant Apps は、ユーザーがインストールするのではないため、以下のような制限のあるサンドボックス内で実行されます。
- 特定の権限のみを保持できる。
- 他のアプリを参照できない(Instant App から参照可能というマークが付いたアプリは除く)。
- 特定のシステム設定にのみアクセスできる。
- 特定のシステム プロパティにのみアクセスできる。
- サービスおよびプロバイダを公開できない。
- ブロードキャストは特別なルールに従えば送受信できる。
加えて、Instant Apps は新しいセキュリティ サンドボックスで制限が追加されることを受け入れる必要があります。このように、Instant App に関する特別な挙動は多岐にわたり、プラットフォーム全体に横断的に関係しているため、エコシステム内のすべてのデバイスで Instant App が正常に動作することを検証する手段が必要です。
Instant Apps モードで動作するテスト
Instant App に適用できるテストがすべての CTS モジュールにあるわけではありません。モジュールでテストされる機能にシステム サーバーとのやり取りがある場合、このようなテストは Instant Apps モードで実行する必要があります。たとえば、OpenGL テストにはシステム サーバーとのやり取りがないため、Instant Apps モードで実行する必要はありません。これに対して、ユーザー補助のテストはシステム サーバーとのやり取りがあるため、Instant Apps モードで実行する必要があります。
どのモジュールに適用できるかを確認するだけでなく、そのモジュール内のどのテストが適切かも確認する必要があります。たとえば、AccessibilityService などのプラガブル アーキテクチャのサービス固有の動作をテストする場合には、Instant App モードを適用できません。これは、Instant App が他のアプリ(プラットフォームを含む)に対してサービスを公開できないためです。これに対して、アプリ側の動作を検証するテストには Instant App モードを適用できます。Instant App が保持できない権限により制限されている動作を検証するテストも、Instant App モードには適していません。このようなテストには、サービスを公開しない、他のアプリを参照しないといった振る舞いに関するルールを検証する Instant App にのみ適用される一連のテストがあります。通常、これらは作成済みのため移植の必要はありません。
Instant Apps モードでのテスト失敗
Instant Apps からアクセスできない機能を検証したことが原因でテストのエラーが発生している場合、そのテストに Instant Apps モードは適用できません。テストがフルアプリ モードでのみ実行されるように、@AppModeFull
アノテーションを付けてください。このアノテーションをクラスレベルで適用すると、すべてのテストを除外できます。
Instant App がアクセスできる機能の不具合が原因でテストのエラーが発生した場合は、バグレポートをお寄せください。
トラブルシューティング
テストが「Failed to install MyCtsModule.apk on DEVICE. Reason: '-116'」のエラーになった場合、logcat で PackageManager のメッセージを探してください。たとえば、「Can't replace Full App with Instant App: your_app」というメッセージがあった場合、「adb uninstall」コマンドで先にアプリをアンインストールしてください。