Inkrementelles Dateisystem

Mit Android 11 eingeführtes IncFS-Kernelmodul Ermöglicht dem Android-Betriebssystem, gestreamte APKs über Android Debug Bridge zu empfangen (ADB)

<ph type="x-smartling-placeholder">

Dieses eigenständige Kernelmodul erstellt ein neues virtuelles Dateisystem, dem bestehenden Android-Dateisystem hinzugefügt. Dies ergänzt Änderungen in der Framework und SDK, um App- und Spieleentwicklern zu ermöglichen, große APKs über mit einem Gerät mit Android 11 oder höher verknüpfen.

Die Kernel-Änderung ermöglicht eine neue APK Signature Scheme v4-Format und unterstützt Änderungen am Android-Framework im Android-Paketmanager. neue Systemdienste und Änderungen am ADB.

Implementierung

Zur Implementierung von IncFS müssen OEMs und SoC-Hersteller einen neuen Kernel hinzufügen. für ihre Android-Geräte-Builds.

Nur für Android 11, wenn der Kernel-Treiber besteht aus einem Modul, das bei Bedarf geladen wird. Wenn werden keine Apps über eine inkrementelle ADB-Installation installiert, das Gerät den Kernel-Treiber nicht lädt.

Wenn sie als Teil des Kernels erstellt wird, ist der Treiber immer geladen. Diese Implementierung gilt für Android 12 oder höher und kann mit Android 11 verwendet werden. Für Informationen zum Upgrade des Kernel-Treibers auf Android 12 finden Sie unter Upgrade der Kernel-Treiber

Der Kernel-Treiber ist Teil eines größeren Systems, um gestreamtes APK zu aktivieren Installationen. OEMs und Anbieter müssen nicht den exakten IncFS-Code verwenden, finden Sie in den Beispielimplementierungen. Um jedoch ein einheitliches Erlebnis muss die API-Implementierung über ein Dateisystem die Dateilesefunktion und Lese-/Schreibfunktion für Verzeichnisse Dies ist in der Dokumentation Userspace-Schnittstelle für inkrementelle FV definiert.

Bei Implementierungen müssen Bereitstellungsoptionen vorhanden sein. und spezielle Dateien die funktional mit der IncFS-Beispielimplementierung übereinstimmen.

Im Folgenden sind die Änderungen aufgeführt, die für die Implementierung erforderlich sind:

  1. Entwicklungsmaschine einrichten um den Kernel zu erstellen.
  2. Nehmen Sie das Targeting auf den gemeinsamen Kernel über den Zweig common-android-mainline vor.
    repo init -u https://android.googlesource.com/kernel/manifest -b common-android-mainline
    repo sync
  3. Überprüfen Sie, ob sich die folgenden für IncFS erforderlichen Änderungen im Filiale bezahlen:
  4. Hängen Sie entweder CONFIG_INCREMENTAL_FS=y oder für nur Android 11, CONFIG_INCREMENTAL_FS=m am Ende der Datei defconfig. Um ein Beispiel zu sehen, klicken Sie auf einem der folgenden Links:
  5. Kernel erstellen
  6. Betten Sie den Kernel in den Android-Geräte-Image-Build ein. <ph type="x-smartling-placeholder">
  7. Hängen Sie für Ihr Android-Zielgerät eines der folgenden anbieterspezifischen System-Property-Zeilen der Datei device.mk hinzu (optional bei Geräten mit Android 12 und höher):
  8. Wenn Sie CONFIG_INCREMENTAL_FS=y verwenden, hängen Sie die Datei mit eine dieser Optionen:

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

    Wenn du CONFIG_INCREMENTAL_FS=m verwendest (nur für Android 11) Fügen Sie der Datei eine der folgenden Optionen hinzu:

    • PRODUCT_PROPERTY_OVERRIDES += \
    • ro.incremental.enable=module:/vendor/lib/modules/incrementalfs.ko
  9. Sehen Sie sich die device.mk-Beispieldateien für den Android-Emulator an. Pixel 4
  10. Nur für Android 11: Wenn Sie CONFIG_INCREMENTAL_FS=m verwenden, fügen Sie SE Linux-Regeln hinzu.
  11. vold.te-Datei erstellen und auf Ihrem Gerät hinzufügen /system/sepolicy/vendor Ordner mit folgendem Inhalt:

    • vold.te

    Lassen Sie den inkrementellen Dateisystemtreiber laden:

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

    Hängen Sie die folgenden SE Linux-Regeln an die vorhandene file.te-Datei an im Ordner /system/sepolicy/vendor gefunden:

    • file.te-Datei: Ein Beispiel finden Sie in dieser file.te-Datei.
    • Inkrementeller Dateisystemtreiber
    • type vendor_incremental_module, vendor_file_type, file_type;

    Folgende SE Linux-Regeln an vorhandene file_contents anhängen Datei im Ordner /system/sepolicy/vendor gefunden:

    • file_contents-Datei: Ein Beispiel findest du in dieser file_contents-Datei.
    • # Incremental file system driver
    • /vendor/lib/modules/incrementalfs\.ko
    • u:object_r:vendor_incremental_module:s0

Upgrade des Kernel-Treibers

Geräte, die auf Android 12 upgraden, enthalten möglicherweise eine ältere Version des IncFS. . Für diese Geräte empfiehlt AOSP, dass Sie den IncFS-Treiber auf die aktuelle Version (in diesem Fall v2) aus folgenden Gründen:

  • Die mit Android 11 veröffentlichte Version ist die erste Implementierung von IncFS, die nur auf die Unterstützung der ADB-Installation ausgerichtet sind.
  • Bei Android 12 wird der IncFS-Treiber zum Streamen von Play-Spielen, die die neuen Funktionen und Optimierungen von IncFS v2 erfordert, um eine bessere User Experience Nutzererfahrung.
  • V1 unterstützt zwar das Streaming von Spielen, allerdings mit Leistungseinbußen und höhere Akku-, CPU- und RAM-Nutzung als V2.
  • V2 bietet eine verbesserte UX für Streaming, mit flüssigen Fortschrittsanimationen, Genaue Berichte zur Speicherplatznutzung und Vermeidung des Streamings von Drittanbieter-Apps Störungen.

Um den IncFS-Treiber in Ihrem Kernel zu aktualisieren, wenden Sie die folgenden Patches für entweder Kernel 4.14 oder Kernel 4.19:

Für alle anderen benutzerdefinierten Kernel-Versionen portieren Sie bitte einen der Patchsets. Sie sich nur auf das Verzeichnis fs/incfs auswirkt und sauber auf das vorhandenen Code der Version 1.

Verwenden Sie den IncFS-Treiber auf dieselbe Weise wie für den ursprünglichen Treiber, Android 11 aktualisiert, entweder als integrierter Teil des Kernel-Images, oder als separates Modul. Ändern Sie nicht die Systemboard- oder Systemeigenschaft Konfiguration.

Neue Geräte, die ein GKI-Kernel-Image verwenden, erhalten den neuesten IncFS-Treiber (v2). automatisch als Teil des Kernel-Images konfiguriert. Dies erfordert keine zusätzliche Schritte ausführen.

Die Konfiguration der ladebaren Module wurde in Android 12 eingestellt und ist für neue Geräte unterstützt. Es ist nur für die Upgrades oder für einen Anbieter zulässig. Image friert ein, wenn es im ursprünglichen Kernel bereits als Modul erstellt wurde.

Referenzimplementierungen

Diese Implementierung kann entweder als Teil eines Kernel-Images oder (für Android 11) als ladbares Modul.

Ladefähiges Modul (Pixel 4) <ph type="x-smartling-placeholder"> Android-Emulator (als Teil des Kernel-Images) <ph type="x-smartling-placeholder">

Validierung und Tests

Validieren Sie die Implementierung mithilfe von Funktions-Unittests, CTS und GTS.

Logo: CTS

CtsIncrementalInstallHostTestCases verwenden.

GTS

atest GtsIncrementalInstallTestCases:

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

IncFS testen

  1. Richten Sie eine Entwicklungsumgebung ein.
  2. Führen Sie die im Abschnitt „Implementierung“ beschriebenen Implementierungsaufgaben durch.
  3. Führen Sie die folgenden manuellen Tests aus:
    mmma system/incremental_delivery/incfs/tests
    atest libincfs-test
    atest IncrementalServiceTest
    atest PackageManagerShellCommandTest
    PackageManagerShellCommandIncrementalTest

IncFS mit Android SDK (ADB und apksigner) testen

  • Einrichten Entwicklungsumgebung.
  • Führen Sie die im Abschnitt „Implementierung“ beschriebenen Implementierungsaufgaben durch.
  • Den Build auf einem physischen Zielgerät oder Emulator Flashen.
  • Generieren Sie ein APK oder rufen Sie ein vorhandenes ab.
  • Erstellen Sie einen Signaturschlüssel zur Fehlerbehebung.
  • Signiere das APK im v4-Signaturformat aus dem Ordner build-tools.
    ./apksigner sign --ks debug.keystore game.apk
  • Installiere das APK von der platform-tools auf dem Gerät. Ordner.
    ./adb install game.apk
<ph type="x-smartling-placeholder">
</ph> Beispiel für die Installation
Abbildung 1: Beispiel für die Installation

Diese Tests finden