Google은 흑인 공동체를 위한 인종 간 평등을 진전시키기 위해 노력하고 있습니다. Google에서 어떤 노력을 하고 있는지 확인하세요.

증분 파일 시스템

증분 파일 시스템(IncFS)은 Android OS가 Android 디버그 브리지(ADB)를 통해 스트리밍된 APK를 수신할 수 있게 해주는 커널 모듈입니다. 자체 포함된 커널 모듈은 기존 Android 파일 시스템 상단에 위치하는 새로운 가상 파일 시스템을 만들고, Android 11 프레임워크 및 SDK의 변경사항을 보완하여 앱 및 게임 개발자가 ADB를 통해 대용량 APK를 Android 11 기기에 배포할 수 있도록 해줍니다.

커널 변경으로 새로운 APK 서명 체계 v4 형식이 사용 가능하고, 새 시스템 서비스인 Android 패키지 관리자에서 Android 프레임워크를 변경하고 Android 디버그 브리지를 변경할 수 있습니다.

구현

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에 필요한 다음 변경사항이 있는지 확인합니다.
  • defconfig 파일 하단에 CONFIG_INCREMENTAL_FS=y 또는 CONFIG_INCREMENTAL_FS=m 라인을 추가합니다. 다음 링크에서 예를 확인할 수 있습니다.
  • 커널 빌드
  • 커널을 Android 기기 이미지 빌드에 삽입합니다.
  • 대상 Android 기기와 관련해 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
    • Android Emulator 및 Pixel 4용 device.mk 예시 파일이 있습니다.
  • 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;
    • /system/sepolicy/vendor 폴더에 있는 기존 file.te 파일에 다음 SE Linux 규칙을 추가합니다.
      • 예시 file.te 파일
      • 증분 파일 시스템 드라이버
      • type vendor_incremental_module, vendor_file_type, file_type;
    • /system/sepolicy/vendor 폴더에 있는 기존 file_contents 파일에 다음 SE Linux 규칙을 추가합니다.
      • 예시 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

IncFs(증분 파일 시스템) 테스트

  • 개발 환경을 설정합니다.
  • 구현 섹션에 요약된 구현 작업을 완료합니다.
  • 다음 수동 테스트를 실행합니다.
    • $ mmma system/incremental_delivery/incfs/tests
    • $ atest libincfs-test
    • $ atest IncrementalServiceTest
    • $ atest PackageManagerShellCommandTest PackageManagerShellCommandIncrementalTest

Android SDK로 IncFS 테스트(ADB 및 apksigner)

  • 개발 환경을 설정합니다.
  • 구현 섹션에 요약된 구현 작업을 완료합니다.
  • 대상 실제 기기나 에뮬레이터에서 빌드를 플래시합니다.
  • 기존 APK를 생성하거나 가져올 수 있습니다.
  • 디버그 서명 키를 만듭니다.
  • build-tools 폴더에서 v4 서명 형식을 사용하여 APK에 서명합니다.
    • $ ./apksigner sign --ks debug.keystore game.apk
  • platform-tools 폴더에서 기기에 APK를 설치합니다.
    • $ ./adb install game.apk
설치 예
그림 1: 설치 예

테스트는 어디에서 찾을 수 있나요?