免安裝應用程式的 CTS

即時應用程式是 Android 10 的重要功能,因此必須正常運作。即時應用程式是隱含安裝,因此功能受限,且會在限制較多的安全沙箱中執行。由於這些限制無所不在,系統的任何部分都有可能無法與即時應用程式正常運作。我們建立了 CTS 測試子集,確保免安裝應用程式允許的行為正常運作。主要概念是隔離要移植的最小測試集,盡量減少 CTS 的大小增長。在免安裝應用程式模式下執行 CTS,表示要將測試 APK 安裝為免安裝應用程式,然後執行測試。

免安裝應用程式限制

使用者不會安裝免安裝應用程式,因此這類應用程式會在受限的沙箱中執行,並受到下列限制:

  • 只能保留特定權限。
  • 除非其他應用程式標示為可供免安裝應用程式瀏覽,否則您無法看到這些應用程式。
  • 只能存取特定系統設定。
  • 只能存取特定系統屬性。
  • 無法公開服務/供應商。
  • 可接收及傳送廣播,但須遵守相關特殊規則。

此外,即時應用程式必須選擇允許新的安全沙箱新增更多限制。免安裝應用程式的特殊行為範圍廣泛,涵蓋整個平台,因此必須驗證免安裝應用程式在生態系統中的所有裝置上都能正常運作。

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

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

除了找出適用的模組,使用者還需判斷這些模組中的哪些測試與自身相關。舉例來說,測試可外掛架構 (例如 AccessibilityService) 的服務專屬行為不適用於免安裝應用程式模式,因為免安裝應用程式無法向其他應用程式 (包括平台) 公開服務,但驗證應用程式端行為的測試則適用於免安裝應用程式模式。另一個例子是驗證權限背後行為的測試,免安裝應用程式無法保留這些權限,因此在免安裝應用程式模式中不相關。有一組測試僅適用於免安裝應用程式,可驗證應用程式的行為規則,例如不公開服務或不顯示其他應用程式。通常這些內容已編寫完成,不需要移植。

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

如果測試失敗的原因是驗證免安裝應用程式無法存取的功能,則測試不適用於免安裝應用程式模式。如要標記測試,使其僅在完整應用程式模式下執行,請使用 @AppModeFull 註解。您可以將這項註解套用至類別層級,排除其中的所有測試。

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

疑難排解

如果測試失敗,並顯示「Failed to install MyCtsModule.apk on DEVICE. 原因:'-116',請在 logcat 中尋找 PackageManager 訊息。舉例來說,如果系統顯示「Can't replace Full App with Instant App: your_app」(無法以免安裝應用程式取代完整應用程式:your_app),請先使用 adb 解除安裝應用程式。