Добавочная файловая система

Добавочная файловая система (IncFS) - это модуль ядра, который позволяет ОС Android получать потоковые APK-файлы через Android Debug Bridge (ADB). Автономный модуль ядра создает новую виртуальную файловую систему, которая находится поверх существующей файловой системы Android и дополняет изменения в структуре Android 11 и SDK, позволяя разработчикам приложений и игр развертывать большие APK через ADB на устройстве Android 11.

Изменение ядра включает новый формат схемы подписи APK v4 , поддерживает изменения структуры Android в диспетчере пакетов Android, новые системные службы и изменения в Android Debug Bridge.

Выполнение

OEM-производителям и производителям SoC необходимо добавить новый драйвер ядра в свои сборки Android-устройств. Если драйвер ядра построен как модуль, он загружается по запросу. Если никакое приложение не установлено с помощью инкрементной установки ADB, устройство не загружает драйвер ядра. При сборке в составе образа ядра всегда загружается драйвер.

Драйвер ядра является частью более крупной системы, позволяющей устанавливать APK-файлы в потоковом режиме. Партнерам не нужно использовать точный код IncFS, представленный в примерах реализации. Однако, чтобы обеспечить единообразие взаимодействия на всех устройствах, партнеры должны убедиться, что в реализации API есть файловая система, которая имеет функции чтения файлов и функции чтения / записи каталогов, как определено здесь .

Кроме того, партнерские реализации должны иметь параметры монтирования и специальные файлы, которые функционально соответствуют образцу реализации IncFS.

Ниже описаны необходимые изменения для реализации:

  • Настройте машину разработки для сборки ядра.
  • Нацельтесь на общее ядро ​​из ветки common-android-mainline .
    • $ repo init -u https://android.googlesource.com/kernel/manifest -b common-android-mainline
    • $ repo sync
  • Убедитесь, что следующие изменения, необходимые для IncFS, находятся в проверке ветки:
  • Добавьте строку CONFIG_INCREMENTAL_FS=y или CONFIG_INCREMENTAL_FS=m в defconfig файла defconfig . Примеры можно найти по следующим ссылкам:
  • Собрать ядро
  • Вставьте ядро ​​в сборку образа Android-устройства .
  • Для вашего целевого устройства Android добавьте одну из следующих строк системных свойств device.mk файл device.mk :
    • Если вы используете CONFIG_INCREMENTAL_FS=y
    • PRODUCT_PROPERTY_OVERRIDES += \
    • ro.incremental.enable=yes
    • Если вы используете CONFIG_INCREMENTAL_FS=m
    • PRODUCT_PROPERTY_OVERRIDES += \
    • ro.incremental.enable=module:/vendor/lib/modules/incrementalfs.ko
    • Есть примеры файлов device.mk для эмулятора Android иPixel 4 .
  • Только при использовании CONFIG_INCREMENTAL_FS=m добавьте правила SE Linux .
    • Создайте и добавьте файл 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
      • Драйвер инкрементальной файловой системы
      • type vendor_incremental_module, vendor_file_type, file_type;
    • Добавьте следующие правила SE Linux к существующему файлу file_contents находящемуся в вашей папке /system/sepolicy/vendor :
      • Пример файла file_contents
      • # Incremental file system driver
  • /vendor/lib/modules/incrementalfs\.ko
  • u:object_r:vendor_incremental_module:s0

Эталонные реализации

Есть два подхода к этой реализации: либо как загружаемый модуль, либо как часть образа ядра.

Валидация и тестирование

Подтвердите реализацию с помощью функциональных модульных тестов, CTS и GTS.

CTS

GTS

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

Тестирование IncF (инкрементная файловая система)

  • Настройте среду разработки.
  • Выполните задачи внедрения, указанные в разделе внедрения.
  • Выполните следующие ручные тесты:
    • $ mmma system/incremental_delivery/incfs/tests
    • $ atest libincfs-test
    • $ atest IncrementalServiceTest
    • $ atest PackageManagerShellCommandTest PackageManagerShellCommandIncrementalTest

Тестирование IncFS с Android SDK (ADB и apksigner)

  • Настройте среду разработки.
  • Выполните задачи внедрения, указанные в разделе внедрения.
  • Запрограммируйте сборку на целевом физическом устройстве или эмуляторе.
  • Создайте или получите существующий apk.
  • Создайте ключ подписи отладки .
  • Подпишите apk форматом подписи v4 из папки build-tools .
    • $ ./apksigner sign --ks debug.keystore game.apk
  • Установите apk на устройство из папки platform-tools .
    • $ ./adb install game.apk
Пример установки
Рисунок 1 : Пример установки

Где можно найти эти тесты?