免安裝應用程式專用的 CTS

即時應用程式是 Android 10 的關鍵功能,因此必須確保其正常運作。即時應用程式是隱含安裝的,因此功能受限,且在更嚴格的安全沙箱中執行。由於這些限制的普遍性,系統的任何部分都可能無法正常與即時應用程式搭配運作。建立 CTS 測試子集,確保免安裝應用程式允許的行為正常運作。關鍵概念是將通訊埠的測試數量降到最低,藉此盡量減少 CTS 的大小成長。在免安裝應用程式模式中執行 CTS 是指將測試 APK 設為免安裝應用程式並執行測試。

免安裝應用程式限制

免安裝應用程式不會由使用者安裝,因此會在受限制的沙箱中執行,並有以下限制:

  • 只能包含特定權限。
  • 除非其他應用程式標示為可供 Instant Apps 瀏覽,否則無法查看其他應用程式。
  • 只能存取特定系統設定。
  • 只能存取特定的系統屬性。
  • 無法公開服務/供應器。
  • 可透過廣播的特殊規則接收及傳送訊息。

此外,即時應用程式必須選擇加入,才能允許新的安全性沙箱新增更多限制。免安裝應用程式相關的特殊行為範圍廣泛,涵蓋整個平台,因此需要有一種方法,可驗證免安裝應用程式是否可在生態系統中的所有裝置上正常運作。

在免安裝應用程式模式下執行的測試

並非所有 CTS 模組都適用於免安裝應用程式。如果模組測試的功能會與系統伺服器互動,則應在即時應用程式模式下執行這些測試。舉例來說,OpenGL 測試不會與系統伺服器互動,因此不需要在免安裝應用程式模式下執行,但無障礙測試會與系統伺服器互動,因此需要在免安裝應用程式模式下執行。

除了找出適用的模組,使用者還需要判斷這些模組中的哪些測試相關。舉例來說,針對可插入式架構 (例如 AccessibilityService) 測試服務專屬行為,不適用於即時應用程式模式,因為即時應用程式無法將服務公開給其他應用程式 (包括平台),但測試驗證應用程式端行為適用於即時應用程式模式。另一個例子是測試,在免安裝應用程式無法保留的權限與免安裝應用程式模式之間,驗證該權限背後的行為。我們有一系列測試,只適用於免安裝應用程式,用於驗證免安裝應用程式的行為規則,例如不公開服務或不顯示其他應用程式。通常這些程式碼已編寫完成,因此不需要轉移。

在免安裝應用程式模式中測試失敗

如果測試驗證的是免安裝應用程式無法存取的功能,則無法在免安裝應用程式模式下使用。使用 @AppModeFull 加上註解,將測試標示為只在完整應用程式模式下執行。您可以將這個註解套用至類別層級,藉此排除其中的所有測試。

如果測試失敗,是因為可供免安裝應用程式存取的部分功能發生故障,請回報錯誤

疑難排解

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