공급업체 스냅샷 생성

Android 11은 소스 트리의 Android 버전과 관계없이 vendor.img를 빌드하는 데 사용할 수 있는 VNDK 스냅샷 빌드 아티팩트 및 공급업체 스냅샷을 지원합니다. 따라서 이전 공급업체 및 최신 시스템 이미지와 같은 혼합된 버전의 이미지를 사용할 수 있습니다.

다음과 같은 혼합 이미지 버전은 지원되지 않습니다.

  • Android.mk. Soong은 공급업체 스냅샷을 생성하므로 Android.mk에 정의된 모듈은 공급업체 스냅샷으로 캡처되지 않습니다(Android.mk의 SoC 독점 모듈도 작동하지 않을 수 있음).

  • 새니타이저. 공급업체 및 VNDK 스냅샷은 새니타이저를 지원하지 않습니다. 새니타이저 변형이 별도로 빌드되어야 하기 때문입니다.

공급업체 스냅샷 정보

공급업체 스냅샷은 OEM 소유 스냅샷입니다. /vendor에 설치되었지만 AOSP에서 유지되는 사전 빌드된 C++ 모듈 집합입니다. 이전 Android 버전의 공급업체 스냅샷을 캡처하지 않고 새 Android 버전으로 업그레이드하면 공급업체 파티션이 중단될 수 있습니다. 공급업체 스냅샷 모듈이 API 또는 ABI 호환성 없이 삭제되거나 변경될 수 있기 때문입니다.

공급업체 스냅샷에는 AOSP의 다음 모듈이 포함되어 있습니다.

  • vendor: truevendor_available: true가 있는 공유, 정적 및 헤더 라이브러리
  • vendor_available: true가 있는 VNDK 정적 라이브러리
  • vendor: truevendor_available: true가 있는 실행 파일과 객체 파일

다음 디렉터리 아래의 모듈은 SoC 소유 하드웨어 코드로 간주되고 무시됩니다.

  • device/
  • vendor/
  • hardware/. 다음은 제외
    • hardware/interfaces
    • hardware/libhardware
    • hardware/libhardware_legacy

SoC 소유 하드웨어 코드는 다른 디렉터리에도 있을 수 있습니다. 현재 공급업체 스냅샷은 이러한 구성을 지원하지 않습니다.

공급업체 스냅샷 빌드

다음 명령어를 사용하여 공급업체 스냅샷을 빌드합니다.

. build/envsetup.sh
lunch target
m dist vendor-snapshot

이러한 명령어는 $DIST_DIRvendor-$(TARGET_DEVICE).zip 파일을 만듭니다. 아래 예는 공급업체 스냅샷 ZIP 파일을 보여 줍니다.

vendor-$(TARGET_DEVICE).zip
├── arch-arm64-armv8-a
│   ├── binary         -> binary files, *.json files
│   ├── header         -> *.json files
│   ├── object         -> *.o files, *.json files
│   ├── shared         -> *.so files, *.json files
│   └── static         -> *.a files, *.json files
├── arch-arm-armv8-a   -> (arch-arm64-armv8-a)
├── configs            -> *.rc files, *.xml files
├── include            -> exported header files (*.h, *.hh, etc.)
└── NOTICE_FILES       -> license txt files
  • JSON 파일에는 모듈 이름, 내보낸 디렉터리, init_rc 파일, vintf_fragments 파일과 같은 플래그가 포함됩니다.
  • configs 디렉터리에는 init_rcvintf_fragments 플래그의 .rc.xml 파일이 포함됩니다.

공급업체 스냅샷 설치

공급업체 스냅샷을 설치하려면 대상 디렉터리로 이동하여 다음 명령어를 사용하세요.

python3 development/vendor_snapshot/update.py --local $DIST_DIR --install-dir \
    vendor/vendor name/vendor_snapshot VER

이 명령어는 /vendor/vendor name/vendor_snapshot/vVER/$(TARGET_ARCH)/Android.bp를 생성합니다. 다음 예는 공급업체 스냅샷의 디렉터리 구조를 보여 줍니다.

vendor/vendor name/vendor_snapshot/
├── v30
│   ├── arm64
│   │   ├── arch-arm64-armv8-a
│   │   │   ├── binary         -> (prebuilt libs)
│   │   │   ├── object         -> (prebuilt libs)
│   │   │   ├── shared         -> (prebuilt libs)
│   │   │   └── static         -> (prebuilt libs)
│   │   ├── arch-arm-armv8-a   -> (same as above)
│   │   ├── configs            -> (config files)
│   │   ├── include            -> (exported header files)
│   │   ├── NOTICE_FILES       -> (license files)
│   │   └── Android.bp         -> (snapshot modules)
│   ├── arm                    -> (same as above)
│   ├── x86_64                 -> (same as above)
│   └── x86                    -> (same as above)
└── (other vendor versions)    -> (same as above)

공급업체 이미지 빌드

VNDK 스냅샷 빌드 아티팩트와 공급업체 스냅샷을 사용하면 소스 트리의 Android 버전과 관계없이 vendor.img를 빌드할 수 있어 혼합 버전의 이미지를 만들 수 있습니다. VNDK 스냅샷과 공급업체 스냅샷을 모두 설치한 후 BOARD_VNDK_VERSION을 공급업체의 버전으로 설정합니다. 예:

# BoardConfig.mk
BOARD_VNDK_VERSION := 29

BOARD_VNDK_VERSIONcurrent가 아닌 값으로 설정되면 빌드 시스템이 다음을 실행합니다.

  • BOARD_VNDK_VERSION의 VNDK 스냅샷 모듈 및 공급업체 스냅샷 모듈을 사용 설정합니다. 각 스냅샷 모듈은 이름이 같은 C++ 소스 모듈을 재정의합니다.
  • ro.vndk.versionBOARD_VNDK_VERSION으로 설정합니다.
  • BOARD_VNDK_VERSION의 VNDK 스냅샷 모듈을 system_ext에 설치합니다.