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:
- Entwicklungsmaschine einrichten um den Kernel zu erstellen.
- 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
- Überprüfen Sie, ob sich die folgenden für IncFS erforderlichen Änderungen im Filiale bezahlen:
- https://android-review.googlesource.com/c/kernel/common/+/1222869/
- https://android-review.googlesource.com/c/kernel/common/+/1222870
- https://android-review.googlesource.com/c/kernel/common/+/1222871
- https://android-review.googlesource.com/q/%2522ANDROID:+Inkrementeller+fs:%2522+branch:android-mainline+status:merg
- Hängen Sie entweder
CONFIG_INCREMENTAL_FS=y
oder für nur Android 11,CONFIG_INCREMENTAL_FS=m
am Ende der Dateidefconfig
. Um ein Beispiel zu sehen, klicken Sie auf einem der folgenden Links: - Kernel erstellen
- Betten Sie den Kernel in den Android-Geräte-Image-Build ein. <ph type="x-smartling-placeholder">
- 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): PRODUCT_PROPERTY_OVERRIDES += \
ro.incremental.enable=yes
PRODUCT_PROPERTY_OVERRIDES += \
ro.incremental.enable=module:/vendor/lib/modules/incrementalfs.ko
- Sehen Sie sich die
device.mk
-Beispieldateien für den Android-Emulator an. Pixel 4 - Nur für Android 11: Wenn Sie
CONFIG_INCREMENTAL_FS=m
verwenden, fügen Sie SE Linux-Regeln hinzu. 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;
-
file.te
-Datei: Ein Beispiel finden Sie in dieserfile.te
-Datei. - Inkrementeller Dateisystemtreiber
type vendor_incremental_module, vendor_file_type, file_type;
-
file_contents
-Datei: Ein Beispiel findest du in dieserfile_contents
-Datei. # Incremental file system driver
/vendor/lib/modules/incrementalfs\.ko
u:object_r:vendor_incremental_module:s0
Wenn Sie CONFIG_INCREMENTAL_FS=y
verwenden, hängen Sie die Datei mit
eine dieser Optionen:
Wenn du CONFIG_INCREMENTAL_FS=m
verwendest (nur für Android 11)
Fügen Sie der Datei eine der folgenden Optionen hinzu:
vold.te
-Datei erstellen und auf Ihrem Gerät hinzufügen
/system/sepolicy/vendor
Ordner mit folgendem Inhalt:
Lassen Sie den inkrementellen Dateisystemtreiber laden:
Hängen Sie die folgenden SE Linux-Regeln an die vorhandene file.te
-Datei an
im Ordner /system/sepolicy/vendor
gefunden:
Folgende SE Linux-Regeln an vorhandene file_contents
anhängen
Datei im Ordner /system/sepolicy/vendor
gefunden:
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:
- Kernel 4.14-Patch
- Kernel 4.19-Patch
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.
- Fehlerkorrektur im Kernel 4.14 des V1-Treibers
- Fehlerkorrektur für Kernel 4.19 von v1 drivr
- Fehlerkorrektur im Kernel 5.4 des V1-Treibers
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">- </ph>
- Vordefinierte Kernelmodule hinzufügen
- Systemeigenschaftsänderung des Kernelmoduls auf dem Gerät hinzufügen und aktivieren
- SE Linux-Regeln aktualisieren
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
- Richten Sie eine Entwicklungsumgebung ein.
- Führen Sie die im Abschnitt „Implementierung“ beschriebenen Implementierungsaufgaben durch.
- 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
![Beispiel für die Installation](https://source.android.com/static/docs/core/architecture/images/incfs-incremental-install.png?authuser=2&hl=de)
Diese Tests finden
- /android/kernel/common/tools/testing/selftests/filesystems/incfs/
- /android/system/incremental_delivery/incfs/tests/incfs_test.cpp
- /android/cts/tests/tests/content/src/android/content/pm/cts/PackageManagerShellCommandIncrementalTest.java