漸進式檔案系統

Android 11 中導入的遞增檔案系統 (IncFS) 核心模組 讓 Android 作業系統能夠透過 Android Debug Bridge 接收串流 APK (ADB)。

這個獨立核心模組會建立一個新的虛擬檔案系統 安裝在現有的 Android 檔案系統上這個做法與 讓應用程式和遊戲開發人員能透過以下方式部署大型 APK: 提供給搭載 Android 11 以上版本的裝置。

核心變更會啟用新的 APK 簽署配置 v4 格式 ,並支援 Android 套件管理員中的 Android 架構變更。 新的系統服務和 ADB 的變更

實作

如要導入 IncFS,原始設備製造商 (OEM) 和 SoC 製造商必須新增核心 安裝在 Android 裝置的驅動程式中。

僅適用於 Android 11 (如核心驅動程式) 是隨選載入的模組如果 沒有透過 ADB 漸進式安裝安裝任何應用程式, 裝置無法載入核心驅動程式。

否則,當其建構為核心的一部分時 驅動程式一律會載入。此實作適用於 Android 12 以上版本,可搭配 Android 11 使用。適用對象 如要瞭解如何將核心驅動程式升級至 Android 12,請參閱 核心驅動程式升級

核心驅動程式屬於大型系統的一部分,啟用串流 APK 安裝。原始設備製造商 (OEM) 和供應商不需要使用確切的 IncFS 程式碼 其他例子不過,為了確保 就必須確保 API 實作設有檔案系統 提供檔案讀取功能和目錄讀取/寫入功能 Inremental FS 的使用者介面介面中定義。

此外,實作方式必須具備掛接選項特殊檔案 其功能符合 IncFS 範例的實作。

以下列出必要的導入變更:

  1. 設定開發機器 來建構核心
  2. common-android-mainline 分支版本指定共同核心。
    repo init -u https://android.googlesource.com/kernel/manifest -b common-android-mainline
    repo sync
  3. 確認以下為 IncFS 需要的變更: 分行結帳:
  4. 附加 CONFIG_INCREMENTAL_FS=y 或 僅適用於 Android 11CONFIG_INCREMENTAL_FS=m 表單底部defconfig。如要查看範例,請點選 下列任一連結:
  5. 建構核心
  6. 將核心嵌入 Android 裝置映像檔版本
  7. 針對您的目標 Android 裝置,附加下列其中一個供應商專屬 device.mk 檔案中的系統屬性行 (適用於 Android 12 以上版本的裝置可選用):
  8. 使用 CONFIG_INCREMENTAL_FS=y 時,請以 下列其中一項:

    • PRODUCT_PROPERTY_OVERRIDES += \
    • ro.incremental.enable=yes

    使用 CONFIG_INCREMENTAL_FS=m (僅限 Android 11) 附加下列任一檔案:

    • PRODUCT_PROPERTY_OVERRIDES += \
    • ro.incremental.enable=module:/vendor/lib/modules/incrementalfs.ko
  9. 查看適用於 Android 模擬器的 device.mk 檔案範例,以及 Pixel 4
  10. 僅適用於 Android 11:如果您使用 CONFIG_INCREMENTAL_FS=m,請新增 SE Linux 規則
  11. 在裝置上建立及新增 vold.te 檔案 含有以下內容的 /system/sepolicy/vendor 資料夾:

    • vold.te

    允許它載入漸進式檔案系統驅動程式:

    • allow vold self:capability sys_module;
    • allow vold vendor_incremental_module:file r_file_perms;
    • allow vold vendor_incremental_module:system module_load;

    將下列 SE Linux 規則附加至現有的 file.te 檔案 在您的 /system/sepolicy/vendor 資料夾中找到:

    • file.te 檔案 - 如需範例,請參閱這個 file.te 檔案)。
    • 漸進式檔案系統驅動程式
    • type vendor_incremental_module, vendor_file_type, file_type;

    將下列 SE Linux 規則附加至現有的 file_contents 在您的 /system/sepolicy/vendor 資料夾中找到的檔案:

    • file_contents 檔案 - 如需範例,請參閱這個 file_contents 檔案
    • # Incremental file system driver
    • /vendor/lib/modules/incrementalfs\.ko
    • u:object_r:vendor_incremental_module:s0

核心驅動程式升級

升級至 Android 12 的裝置可能搭載舊版 IncFS 驅動程式。針對這些裝置,Android 開放原始碼計畫建議將 IncFS 驅動程式更新為 現行版本 (本例中為 v2),原因如下:

  • Android 11 發布的是初始實作版本 ,僅適用於 ADB 安裝支援。
  • Android 12 會使用 IncFS 驅動程式串流安裝 Play 遊戲。 因此需要 IncFS v2 的新功能和最佳化功能,才能讓使用者有更好的體驗 無須專人管理
  • V1 支援遊戲串流功能,但會降低效能, 電池、CPU 和 RAM 使用率的表現。
  • V2 透過流暢的進度動畫,提供更完善的串流使用者體驗。 精確的磁碟空間用量回報,並防範第三方應用程式串流 受到干擾

如要在核心中升級 IncFS 驅動程式,請針對下列項目套用下列修補程式: 核心 4.14 或核心 4.19:

針對所有其他自訂核心版本,請通訊埠其中一個修補程式集。他們 只會影響 fs/incfs 目錄,請徹底套用至 放在現有的 v1 程式碼中

繼續使用 IncFS 驅動程式,方法與最初相同,但現在 已升級的 Android 11,不論是核心映像檔的內建功能, 或個別模組請勿變更系統面板或系統屬性 此外還會從 0 自動調整資源配置 您完全不必調整資源調度設定

使用 GKI 核心映像檔的新裝置會取得最新版的 (v2) IncFS 驅動程式 並自動設為核心映像檔的一部分這項作業不需要

可載入的模組設定已在 Android 12 中淘汰,且 可支援新裝置。僅供升級或供應商使用 如果原始核心已建構為模組,映像檔就會凍結。

參考實作

此實作可以視為核心映像檔的一部分,或 ( Android 11 專用)) 做為可載入的模組。

可載入模組 (Pixel 4 裝置) ,瞭解如何調查及移除這項存取權。 Android Emulator (做為核心映像檔的一部分)

驗證與測試

使用功能單元測試、CTS 和 GTS 驗證實作成果。

CTS

使用 CtsIncrementalInstallHostTestCases

魔鬼氈

atest GtsIncrementalInstallTestCases

/gts-tests/tests/packageinstaller/incremental/src/com/google/android/packageinstaller/incremental/gts/IncrementalInstallerTest.java

測試 IncFS

  1. 設定開發環境。
  2. 完成實作一節中概述的實作工作。
  3. 執行下列手動測試:
    mmma system/incremental_delivery/incfs/tests
    atest libincfs-test
    atest IncrementalServiceTest
    atest PackageManagerShellCommandTest
    PackageManagerShellCommandIncrementalTest

使用 Android SDK 測試 IncFS (ADB 和 apksigner)

  • 設定 一個開發環境
  • 完成實作一節中概述的實作工作。
  • 在目標實體裝置或模擬器上刷新版本。
  • 產生或取得現有的 APK。
  • 建立偵錯簽署金鑰
  • build-tools 資料夾簽署採用 v4 簽名格式的 APK。
    ./apksigner sign --ks debug.keystore game.apk
  • 透過 platform-tools 在裝置端安裝 APK 資料夾。
    ./adb install game.apk
,瞭解如何調查及移除這項存取權。
安裝範例
圖 1:安裝範例

尋找這些測試