Przyrostowy system plików

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:

  1. Skonfiguruj maszynę, której używasz do programowania do stworzenia jądra systemu.
  2. 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
  3. Sprawdź, czy poniższe zmiany wymagane w przypadku IncFS zostały wprowadzone płatność w oddziale:
  4. Dołącz CONFIG_INCREMENTAL_FS=y lub na tylko Androidzie 11, CONFIG_INCREMENTAL_FS=m na dole pliku defconfig. Aby zobaczyć przykład, kliknij jeden z tych linków:
  5. Tworzenie jądra
  6. Umieść jądro w kompilacji obrazu urządzenia z Androidem.
  7. 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):
  8. Jeśli używasz CONFIG_INCREMENTAL_FS=y, dołącz do pliku ciąg jedną z tych opcji:

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

    Jeśli używasz aplikacji CONFIG_INCREMENTAL_FS=m (tylko w przypadku Androida 11): dołącz plik z jednym z tych elementów:

    • PRODUCT_PROPERTY_OVERRIDES += \
    • ro.incremental.enable=module:/vendor/lib/modules/incrementalfs.ko
  9. Zobacz przykładowe pliki device.mk dla emulatora Androida i Pixel 4.
  10. Tylko na Androidzie 11: jeśli używasz CONFIG_INCREMENTAL_FS=m, dodaj reguły SE Linux.
  11. Utwórz i dodaj plik vold.te do urządzenia /system/sepolicy/vendor o następującej zawartości:

    • vold.te

    Zezwól na ładowanie przyrostowego sterownika systemu plików:

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

    Dołącz te reguły SE Linux do istniejącego pliku file.te znaleziono w folderze /system/sepolicy/vendor:

    • file.te – przykład znajdziesz w tym pliku file.te).
    • Sterownik przyrostowego systemu plików
    • type vendor_incremental_module, vendor_file_type, file_type;

    Dołącz te reguły SE Linux do istniejącego file_contents w folderze /system/sepolicy/vendor znaleziono plik:

    • file_contents plik – zobacz przykładowy plik file_contents.
    • # Incremental file system driver
    • /vendor/lib/modules/incrementalfs\.ko
    • u:object_r:vendor_incremental_module:s0

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:

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.

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) . Emulator Androida (jako część obrazu jądra)

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

  1. Skonfiguruj środowisko programistyczne.
  2. Wykonaj zadania wdrożeniowe opisane w sekcji dotyczącej implementacji.
  3. 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
.
Przykład instalacji
Rys. 1 Przykład instalacji

Znajdź te testy