2025년 3월 27일부터 AOSP를 빌드하고 기여하려면 aosp-main
대신 android-latest-release
를 사용하는 것이 좋습니다. 자세한 내용은 AOSP 변경사항을 참고하세요.
공급업체 스냅샷 생성
컬렉션을 사용해 정리하기
내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.
Android 11은 소스 트리의 Android 버전과 관계없이 vendor.img
를 빌드하는 데 사용할 수 있는 VNDK 스냅샷 빌드 아티팩트 및 공급업체 스냅샷을 지원합니다. 따라서 이전 공급업체 및 최신 시스템 이미지와 같은 혼합된 버전의 이미지를 사용할 수 있습니다.
다음과 같은 혼합 이미지 버전은 지원되지 않습니다.
공급업체 스냅샷 정보
공급업체 스냅샷은 OEM 소유 스냅샷입니다. /vendor
에 설치되었지만 AOSP에서 유지되는 사전 빌드된 C++ 모듈 집합입니다. 이전 Android 버전의 공급업체 스냅샷을 캡처하지 않고 새 Android 버전으로 업그레이드하면 공급업체 파티션이 중단될 수 있습니다. 공급업체 스냅샷 모듈이 API 또는 ABI 호환성 없이 삭제되거나 변경될 수 있기 때문입니다.
공급업체 스냅샷에는 AOSP의 다음 모듈이 포함되어 있습니다.
vendor: true
나 vendor_available:
true
가 있는 공유, 정적 및 헤더 라이브러리
vendor_available: true
가 있는 VNDK 정적 라이브러리
vendor: true
나 vendor_available: true
가 있는 실행 파일과 객체 파일
다음 디렉터리 아래의 모듈은 SoC 소유 하드웨어 코드로 간주되고 무시됩니다.
device/
vendor/
hardware/
. 다음은 제외hardware/interfaces
hardware/libhardware
hardware/libhardware_legacy
SoC 소유 하드웨어 코드는 다른 디렉터리에도 있을 수 있습니다. 현재 공급업체 스냅샷은 이러한 구성을 지원하지 않습니다.
공급업체 스냅샷 빌드
다음 명령어를 사용하여 공급업체 스냅샷을 빌드합니다.
. build/envsetup.sh
lunch target
m dist vendor-snapshot
이러한 명령어는 $DIST_DIR
에 vendor-$(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_rc
및 vintf_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_VERSION
이 current
가 아닌 값으로 설정되면 빌드 시스템이 다음을 실행합니다.
BOARD_VNDK_VERSION
의 VNDK 스냅샷 모듈 및 공급업체 스냅샷 모듈을 사용 설정합니다. 각 스냅샷 모듈은 이름이 같은 C++ 소스 모듈을 재정의합니다.
ro.vndk.version
을 BOARD_VNDK_VERSION
으로 설정합니다.
BOARD_VNDK_VERSION
의 VNDK 스냅샷 모듈을 system_ext
에 설치합니다.
이 페이지에 나와 있는 콘텐츠와 코드 샘플에는 콘텐츠 라이선스에서 설명하는 라이선스가 적용됩니다. 자바 및 OpenJDK는 Oracle 및 Oracle 계열사의 상표 또는 등록 상표입니다.
최종 업데이트: 2025-07-27(UTC)
[[["이해하기 쉬움","easyToUnderstand","thumb-up"],["문제가 해결됨","solvedMyProblem","thumb-up"],["기타","otherUp","thumb-up"]],[["필요한 정보가 없음","missingTheInformationINeed","thumb-down"],["너무 복잡함/단계 수가 너무 많음","tooComplicatedTooManySteps","thumb-down"],["오래됨","outOfDate","thumb-down"],["번역 문제","translationIssue","thumb-down"],["샘플/코드 문제","samplesCodeIssue","thumb-down"],["기타","otherDown","thumb-down"]],["최종 업데이트: 2025-07-27(UTC)"],[],[],null,["# Generate vendor snapshots\n\nAndroid 11 supports [VNDK snapshot build\nartifacts](/docs/core/architecture/vndk/snapshot-generate#vendor-snapshots)\nand vendor snapshots, which you can use to build `vendor.img` regardless of the\nAndroid version on the source tree. This enables mixed versions of images, such\nas an older vendor and a newer system image.\n\nMixed image versions aren't supported for the following.\n\n- `Android.mk.` Because Soong generates the vendor snapshot, modules defined in\n `Android.mk` aren't captured as a vendor snapshot (SoC-proprietary modules in\n `Android.mk` also aren't guaranteed to work).\n\n- **Sanitizer.** Vendor and VNDK snapshots don't support sanitizer as sanitizer\n variants need to be built separately.\n\nAbout vendor snapshots\n----------------------\n\nA vendor snapshot is an OEM-owned snapshot. It's a set of prebuilt C++ modules\ninstalled in `/vendor` but maintained on AOSP. Without capturing a vendor\nsnapshot of the previous Android version, upgrading to a new Android version\nmight break the vendor partition because vendor snapshot modules can be removed\nor changed without API or ABI compatibility.\n\nA vendor snapshot contains following modules on AOSP.\n\n- Shared, static, and header libraries with `vendor: true` or `vendor_available:\n true`\n- VNDK static libraries with `vendor_available: true`\n- Executables and object files with `vendor: true` or `vendor_available: true`\n\nModules under the following directories are considered SoC-owned hardware code\nand are ignored.\n\n- `device/`\n- `vendor/`\n- `hardware/`, except for\n - `hardware/interfaces`\n - `hardware/libhardware`\n - `hardware/libhardware_legacy`\n\nSoC-owned hardware codes might also exist in other directories. At this time,\nvendor snapshots don't support such configurations.\n\nBuild vendor snapshots\n----------------------\n\nBuild a vendor snapshot using the following commands. \n\n . build/envsetup.sh\n lunch \u003cvar translate=\"no\"\u003etarget\u003c/var\u003e\n m dist vendor-snapshot\n\nThese commands create a `vendor-$(TARGET_DEVICE).zip` file in\n`$DIST_DIR`. The following example shows a vendor snapshot zip file: \n\n vendor-$(TARGET_DEVICE).zip\n ├── arch-arm64-armv8-a\n │ ├── binary -\u003e binary files, *.json files\n │ ├── header -\u003e *.json files\n │ ├── object -\u003e *.o files, *.json files\n │ ├── shared -\u003e *.so files, *.json files\n │ └── static -\u003e *.a files, *.json files\n ├── arch-arm-armv8-a -\u003e (arch-arm64-armv8-a)\n ├── configs -\u003e *.rc files, *.xml files\n ├── include -\u003e exported header files (*.h, *.hh, etc.)\n └── NOTICE_FILES -\u003e license txt files\n\n- The JSON files contain flags such as module name, exported directories, `init_rc` files, and `vintf_fragments` files.\n- The `configs` directory contains `.rc` and `.xml` files from flags `init_rc` and `vintf_fragments`.\n\nInstall vendor snapshots\n------------------------\n\n| **Note:** For details on uploading VNDK snapshots, see [Using locally built VNDK\n| snapshots](/docs/core/architecture/vndk/snapshot-generate#using-local-snapshots).\n\nTo install a vendor snapshot, navigate to the destination directory and use the\nfollowing commands. \n\n python3 development/vendor_snapshot/update.py --local $DIST_DIR --install-dir \\\n vendor/\u003cvar translate=\"no\"\u003evendor\u003cspan class=\"devsite-syntax-w\"\u003e \u003c/span\u003ename\u003c/var\u003e/vendor_snapshot \u003cvar translate=\"no\"\u003eVER\u003c/var\u003e\n\nThis command generates\n`/vendor/`\u003cvar translate=\"no\"\u003evendor name\u003c/var\u003e`/vendor_snapshot/v`\u003cvar translate=\"no\"\u003eVER\u003c/var\u003e`/$(TARGET_ARCH)/Android.bp`.\nThe following example shows the directory structure of a vendor snapshot: \n\n vendor/\u003cvar translate=\"no\"\u003evendor name\u003c/var\u003e/vendor_snapshot/\n ├── v30\n │ ├── arm64\n │ │ ├── arch-arm64-armv8-a\n │ │ │ ├── binary -\u003e (prebuilt libs)\n │ │ │ ├── object -\u003e (prebuilt libs)\n │ │ │ ├── shared -\u003e (prebuilt libs)\n │ │ │ └── static -\u003e (prebuilt libs)\n │ │ ├── arch-arm-armv8-a -\u003e (same as above)\n │ │ ├── configs -\u003e (config files)\n │ │ ├── include -\u003e (exported header files)\n │ │ ├── NOTICE_FILES -\u003e (license files)\n │ │ └── Android.bp -\u003e (snapshot modules)\n │ ├── arm -\u003e (same as above)\n │ ├── x86_64 -\u003e (same as above)\n │ └── x86 -\u003e (same as above)\n └── (other vendor versions) -\u003e (same as above)\n\nBuild vendor images\n-------------------\n\nUsing [VNDK snapshot build\nartifacts](/docs/core/architecture/vndk/snapshot-generate#vendor-snapshots)\nand a vendor snapshot, you can build `vendor.img` regardless of the Android\nversion on the source tree, making it possible to create mixed versions of\nimages. After installing both the VNDK snapshot and vendor snapshot, set\n`BOARD_VNDK_VERSION` to the vendor's version. For example: \n\n # BoardConfig.mk\n BOARD_VNDK_VERSION := 29\n\nWhen `BOARD_VNDK_VERSION` is set to a value other than `current`, the build\nsystem:\n\n- Enables VNDK snapshot modules and vendor snapshot modules of `BOARD_VNDK_VERSION`. Each snapshot module overrides a C++ source module having the same name.\n- Sets `ro.vndk.version` to `BOARD_VNDK_VERSION`.\n- Installs VNDK snapshot modules of `BOARD_VNDK_VERSION` to `system_ext`."]]