即時應用的 CTS

Instant Apps 是 10 的一項關鍵功能,因此它們必須正常運行。 Instant Apps 是隱式安裝的,因此它們具有一組受限的功能並在更嚴格的安全沙箱中運行。由於這些限制的普遍性,系統的任何部分都存在無法正常使用即時應用程序的風險。創建 CTS 測試子集以確保 Instant Apps 允許的行為正常工作。關鍵思想是通過隔離最小的測試集來最小化 CTS 的大小增長。在 Instant Apps 模式下運行的 CTS 意味著將測試 APK 安裝為 Instant App 並運行測試。

免安裝應用限制

Instant Apps 不是由用戶安裝的,因此它們在受限制的沙箱中運行,具有以下限制:

  • 只能持有某些權限。
  • 除非這些應用被標記為對免安裝應用可見,否則無法查看其他應用。
  • 只能訪問某些系統設置。
  • 只能訪問某些系統屬性。
  • 無法公開服務/提供者。
  • 可以根據廣播的特殊規則接收和發送。

此外,Instant Apps 必須選擇允許新的安全沙箱添加更多限制。圍繞 Instant Apps 的這種廣泛的特殊行為貫穿了整個平台,因此需要有一種方法來驗證 Instant Apps 在生態系統中的所有設備上是否按預期工作。

在 Instant Apps 模式下運行的測試

並非所有 CTS 模塊都有適用於 Instant Apps 的測試。如果模塊測試的功能與系統服務器有交互,那麼這些測試應該在 Instant App 模式下運行。例如,OpenGL 測試不與系統服務器交互,因此無需在 Instant App 模式下運行它們,而可訪問性測試與系統服務器交互但需要在 Instant App 模式下運行它們。

除了確定哪些模塊適用之外,用戶還需要確定這些模塊中的哪些測試是相關的。例如,為可插拔架構(例如 AccessibilityService)測試特定於服務的行為不適用於 Instant App 模式,因為 Instant App 不能將服務暴露給其他應用程序(包括平台),而測試驗證應用程序端行為是適用於即時應用模式。另一個示例是驗證 Instant App 無法持有的權限背後的行為與 Instant App 模式無關的測試。有一組測試僅適用於即時應用程序,用於驗證有關其行為方式的規則,例如,不公開服務或看不到其他應用程序。通常,這些都是已經編寫好的,不需要移植。

即時模式下的測試失敗

如果測試失敗是因為它驗證了 Instant Apps 無法訪問的功能,那麼它不適用於 Instant App 模式。通過使用@AppModeFull註釋將測試標記為僅在完整應用模式下運行。您可以將此註釋應用於類級別以排除其中的所有測試。

如果測試因 Instant Apps 可訪問的某些功能損壞而失敗,請提交錯誤

故障排除

如果您的測試失敗並顯示Failed to install MyCtsModule.apk on DEVICE。原因:'-116' ,在 logcat 上查找 PackageManager 消息。例如,如果它說Can't replace Full App with Instant App: your_app ,則 adb 首先卸載您的應用程序。