Moduł jądra systemu plików przyrostowego (IncFS) w Androidzie 11 umożliwia systemowi operacyjnemu Android odbieranie przesyłanych strumieniowo plików APK przez Android Debug Bridge. (ADB).
Ten autonomiczny moduł jądra tworzy nowy wirtualny system plików w systemie plików Androida. To uzupełnienie zmian w: platformy oraz pakietu SDK umożliwiają deweloperom aplikacji i gier wdrażanie dużych plików APK za pomocą ADB na urządzenie z Androidem 11 lub nowszym.
Zmiana jądra systemu Format schematu podpisu pliku APK w wersji 4 i obsługuje zmiany platformy Androida w Menedżerze pakietów na Androida, nowych usług systemowych i zmianach w ADB.
Implementacja
Aby wdrożyć IncFS, producenci OEM i producenci SOC muszą dodać nowe jądro sterownika do kompilacji urządzenia z Androidem.
Tylko Android 11, jeśli sterownik jądra systemu jest ładowany na żądanie. Jeśli nie ma żadnych aplikacji zainstalowanych przy użyciu przyrostowej instalacji ADB, nie załaduje sterownika jądra systemu operacyjnego.
W przeciwnym razie, gdy kompiluje się w ramach jądra systemu, sterownik jest zawsze wczytywany. Ta implementacja jest dostępna w przypadku: Androida 12 lub nowszego (z Androidem 11). Dla: o aktualizacji sterownika jądra do Androida 12 znajdziesz Uaktualnienie sterownika jądra.
Sterownik jądra jest częścią większego systemu, który umożliwia przesyłanie pakietów APK instalacji. OEM i dostawcy nie muszą używać dokładnie podanego kodu IncFS. w przykładowych implementacjach. Aby jednak zapewnić spójność musisz upewnić się, że implementacja interfejsu API ma system plików który oferuje funkcje odczytu plików oraz odczytu i zapisu w katalogu, zdefiniowany w dokumentacji interfejsu użytkownika w przypadku przyrostowej wersji gier.
Implementacje muszą też mieć opcje podłączenia i specjalne pliki które funkcjonalnie pasują do przykładowej implementacji IncFS.
Poniżej znajdziesz listę zmian niezbędnych do wdrożenia:
- Skonfiguruj maszynę, której używasz do programowania do stworzenia jądra systemu.
- Kieruj na wspólne jądro z gałęzi
common-android-mainline
.repo init -u https://android.googlesource.com/kernel/manifest -b common-android-mainline
repo sync
- Sprawdź, czy poniższe zmiany wymagane w przypadku IncFS zostały wprowadzone płatność w oddziale:
- 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:+Incremental+fs:%2522+branch:android-mainline+status:merg
- Dołącz
CONFIG_INCREMENTAL_FS=y
lub na tylko Androidzie 11,CONFIG_INCREMENTAL_FS=m
na dole plikudefconfig
. Aby zobaczyć przykład, kliknij jeden z tych linków: - Tworzenie jądra
- Umieść jądro w kompilacji obrazu urządzenia z Androidem.
- W przypadku docelowego urządzenia z Androidem dołącz jedno z tych instrukcji dotyczących konkretnego dostawcy:
wiersz właściwości systemowej do pliku
device.mk
(opcjonalnie na urządzeniach z Androidem 12 lub nowszym): PRODUCT_PROPERTY_OVERRIDES += \
ro.incremental.enable=yes
PRODUCT_PROPERTY_OVERRIDES += \
ro.incremental.enable=module:/vendor/lib/modules/incrementalfs.ko
- Zobacz przykładowe pliki
device.mk
dla emulatora Androida i Pixel 4. - Tylko na Androidzie 11: jeśli używasz
CONFIG_INCREMENTAL_FS=m
, dodaj reguły SE Linux. 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
– przykład znajdziesz w tym plikufile.te
). - Sterownik przyrostowego systemu plików
type vendor_incremental_module, vendor_file_type, file_type;
-
file_contents
plik – zobacz przykładowy plikfile_contents
. # Incremental file system driver
/vendor/lib/modules/incrementalfs\.ko
u:object_r:vendor_incremental_module:s0
Jeśli używasz CONFIG_INCREMENTAL_FS=y
, dołącz do pliku ciąg
jedną z tych opcji:
Jeśli używasz aplikacji CONFIG_INCREMENTAL_FS=m
(tylko w przypadku Androida 11):
dołącz plik z jednym z tych elementów:
Utwórz i dodaj plik vold.te
do urządzenia
/system/sepolicy/vendor
o następującej zawartości:
Zezwól na ładowanie przyrostowego sterownika systemu plików:
Dołącz te reguły SE Linux do istniejącego pliku file.te
znaleziono w folderze /system/sepolicy/vendor
:
Dołącz te reguły SE Linux do istniejącego file_contents
w folderze /system/sepolicy/vendor
znaleziono plik:
Uaktualnienie sterownika jądra systemu
Urządzenia aktualizujące się do Androida 12 mogą zawierać starszą wersję systemu IncFS sterownika. W przypadku tych urządzeń firma AOSP zaleca zaktualizowanie sterownika IncFS do wersji aktualnej wersji (w tym przypadku v2) z tych powodów:
- Wersja opublikowana z Androidem 11 jest wstępną implementacją IncFS, kierowany wyłącznie do obsługi instalacji ADB.
- Android 12 używa sterownika IncFS do strumieniowego przesyłania instalacji gier Play. który wymaga nowych funkcji i optymalizacji IncFS w wersji 2, aby ułatwić użytkownikom i uzyskiwanie dodatkowych informacji.
- Wersja 1 umożliwia streaming gier, ale również z karami za wydajność i większe wykorzystanie baterii, procesora i pamięci RAM niż wersja 2.
- Wersja V2 zapewnia większy komfort korzystania ze strumieniowania z płynnymi animacjami postępu, precyzyjne raportowanie wykorzystania miejsca na dysku i zapobieganie strumieniowaniu aplikacji innych firm i innych zakłóceń.
Aby uaktualnić sterownik IncFS w jądrze, zastosuj następujące poprawki do: jądro w wersji 4.14 lub 4.19:
- Poprawka jądra 4.14
- Poprawka jądra 4.19
W przypadku wszystkich innych niestandardowych wersji jądra przenieś jeden z zestawów poprawek. Ta
mają wpływ tylko na katalog fs/incfs
i dokładnie działają
istniejącego kodu w wersji 1.
- Poprawka jądra 4.14 do sterownika w wersji 1
- Poprawka jądra 4.19 do usługi w wersji 1
- Poprawka jądra 5.4 do sterownika w wersji 1
Nadal używaj sterownika IncFS w taki sam sposób jak oryginału, ale teraz do zaktualizowanego Androida 11, jako wbudowanej części obrazu jądra. lub jako osobny moduł. Nie zmieniaj płyty systemowej ani właściwości systemu. konfiguracji.
Nowe urządzenia z obrazem jądra GKI otrzymują najnowszy sterownik IncFS (wersja 2) automatycznie skonfigurowane jako część obrazu jądra. Nie jest to wymagane wykonaj dodatkowe czynności.
Konfiguracja modułu do załadowania została wycofana na Androidzie 12 i nie jest obsługiwane na nowych urządzeniach. Jest dozwolony tylko w przypadku uaktualnień lub dla dostawcy obraz zawiesza się, gdy oryginalne jądro miało już go jako moduł.
Implementacje referencyjne
Tę implementację można uznać za część obrazu jądra lub (w przypadku Androida 11) jako modułu ładowanego.
Moduł ładowany (urządzenie Pixel 4)- Dodaj gotowe moduły jądra
- Dodaj i włącz zmianę właściwości systemowej modułu jądra na urządzeniu
- Aktualizowanie reguł SE w systemie Linux
Weryfikacja i testowanie
Sprawdź implementację, używając testów jednostek, CTS i GTS.
wskaźnik CTS
Użyj konta
CtsIncrementalInstallHostTestCases
.
GTS
atest GtsIncrementalInstallTestCases
:
/gts-tests/tests/packageinstaller/incremental/src/com/google/android/packageinstaller/incremental/gts/IncrementalInstallerTest.java
Testowanie IncFS
- Skonfiguruj środowisko programistyczne.
- Wykonaj zadania wdrożeniowe opisane w sekcji dotyczącej implementacji.
- Przeprowadź te testy ręczne:
mmma system/incremental_delivery/incfs/tests
atest libincfs-test
atest IncrementalServiceTest
atest PackageManagerShellCommandTest
PackageManagerShellCommandIncrementalTest
Testowanie IncFS za pomocą pakietu SDK na Androida (ADB i apksigner)
- Konfiguracja w środowisku programistycznym.
- Wykonaj zadania wdrożeniowe opisane w sekcji dotyczącej implementacji.
- Flash kompilacji na docelowym urządzeniu fizycznym lub emulatorze.
- Wygeneruj lub pobierz istniejący plik APK.
- Utwórz klucz podpisywania debugowania.
- Podpisz plik APK w formacie v4 z folderu
build-tools
../apksigner sign --ks debug.keystore game.apk
- Zainstaluj plik APK na urządzeniu z
platform-tools
folderu Dysku../adb install game.apk
Znajdź te testy
- /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