即時應用程式的 CTS

即時應用程式是 10 的關鍵功能,因此它們的正常運作至關重要。即時應用程式是隱式安裝的,因此它們具有一組有限的功能,並在更嚴格的安全沙箱中運行。由於這些限制的普遍性,系統的任何部分都面臨著無法正常使用即時應用程式的風險。建立 CTS 測試子集是為了確保即時應用程式允許的行為正常運作。關鍵思想是透過隔離要移植的最小測試集來最小化 CTS 的大小增長。在即時應用程式模式下運行的 CTS 意味著將測試 APK 安裝為即時應用程式並執行測試。

即時應用程式限制

即時應用程式不是由用戶安裝的,因此它們在受以下限制的受限沙箱中運行:

  • 只能擁有某些權限。
  • 無法看到其他應用程序,除非這些應用程式被標記為對即時應用程式可見。
  • 只能存取某些系統設定。
  • 只能存取某些系統屬性。
  • 無法公開服務/提供者。
  • 可以依照廣播的特殊規則接收和發送。

此外,即時應用程式必須選擇允許新的安全沙箱添加更多限制。圍繞即時應用程式的各種特殊行為貫穿整個平台,因此需要一種方法來驗證即時應用程式是否按預期在生態系統中的所有裝置上運作。

在即時應用程式模式下執行的測試

並非所有 CTS 模組都有適用於即時應用程式的測試。如果模組測試的功能與系統伺服器有交互,那麼這些測試應該在即時應用模式下運行。例如,OpenGL 測試不與系統伺服器交互,因此不需要在即時應用程式模式下運行它們,而輔助功能測試與系統伺服器交互,但需要在即時應用程式模式下運行它們。

除了確定哪些模組適用之外,使用者還需要確定這些模組中的哪些測試是相關的。例如,測試可插入架構的特定於服務的行為(例如,AccessibilityService)不適用於即時應用程式模式,因為即時應用程式無法向其他應用程式(包括平台)公開服務,而驗證應用程式端行為的測試則適用於適用於即時應用程式模式。另一個範例是驗證即時應用程式無法保留的權限背後的行為的測試與即時應用程式模式無關。有一組僅適用於即時應用程式的測試,用於驗證有關其行為方式的規則,例如,不公開服務或不查看其他應用程式。通常,這些都是已經編寫好的並且不需要移植。

即時應用程式模式下的測試失敗

如果測試失敗是因為它驗證了即時應用程式無法存取的功能,則它不適用於即時應用程式模式。透過使用@AppModeFull註解將測試標記為僅在完整應用程式模式下運行。您可以將此註解套用到類別層級以排除其中的所有測試。

如果測試因即時應用程式可存取的某些功能被破壞而失敗,請提交錯誤

故障排除

如果您的測試失敗並顯示「無法在裝置上安裝 MyCtsModule.apk」。原因: '-116' ,在 logcat 上尋找 PackageManager 訊息。例如,如果顯示Can't Replace Full App with Instant App: your_app ,則 adb 先解除安裝您的應用程式。