编译LineageOS时使用Vendor Snapshot遇依赖缺失问题求助
我正在编译LineageOS,由于厂商限制,需要为vendor镜像使用旧版VNDK(v30),以此运行部分厂商提供的vendor二进制文件来获得硬件支持。
AOSP通过Vendor Snapshots支持该功能,我已按文档要求在Lineage-18.1分支成功构建了v30快照压缩包。随后切换到Lineage-20分支,使用以下命令安装vendor快照:
python3 development/vendor_snapshot/update.py --local /path/to/snapshot.zip --install-dir vendor/VENDORNAME/vendor_snapshot 30
尝试用以下命令构建vendorimage时:
BOARD_VNDK_VERSION=30 mka vendorimage
出现报错,提示无法找到vendor快照中的依赖:
error: hardware/interfaces/power/aidl/default/apex/Android.bp:46:1: dependency "android.hardware.power-service.example" of "com.android.hardware.power" missing variant: os:android,image:vendor.30,arch:arm64_armv8-2a_cortex-a75 available variants: os:android,image:vendor.33,arch:arm64_armv8-2a_cortex-a75 (alias to os:android,image:vendor.33,arch:arm64_armv8-2a_cortex-a75,sdk:) os:android,image:vendor.33,arch:arm64_armv8-2a_cortex-a75,sdk:
我已确认android.hardware.power-service.example存在于快照中,且通过strace观察到构建系统读取了vendor/VENDORNAME/vendor_snapshot/v30/arm64/Android.bp文件,但构建行为仍如同未安装快照一般,这并非个别依赖问题,而是构建系统完全未识别快照内容。
请问我是否遗漏了快照安装的某个步骤?
附注:android.hardware.power-service.example在vendor/VENDORNAME/vendor_snapshot/v30/arm64/Android.bp中的定义:
vendor_snapshot_binary { arch: { arm64: { src: "arch-arm64-armv8-2a/binary/android.hardware.power-service.example", }, }, compile_multilib: "64", init_rc: [ "configs/power-default.rc", ], name: "android.hardware.power-service.example", relative_install_path: "hw", shared_libs: [ "libbase", "libbinder_ndk", "android.hardware.power-ndk_platform", "libc++", "libc", "libm", "libdl", ], target_arch: "arm64", vendor: true, version: "30", vintf_fragments: [ "configs/power-default.xml", ], }
以下是几个需要检查的关键步骤,你可能遗漏了其中一项:
确认设备配置中启用Vendor Snapshot
在设备的BoardConfig.mk(通常位于device/VENDORNAME/DEVICENAME/BoardConfig.mk)中添加或确认以下配置:BOARD_USE_VENDOR_SNAPSHOT := true BOARD_VNDK_VERSION := 30仅在构建命令中指定
BOARD_VNDK_VERSION可能不足以让构建系统完整识别快照配置,需要在BoardConfig中固化这些参数。检查快照安装后的索引文件
安装快照后,构建系统需要通过vendor_snapshot.mk索引文件识别快照内容。确认vendor/VENDORNAME/vendor_snapshot/v30/vendor_snapshot.mk是否存在,且内容正确引用对应架构的Android.bp文件,例如:include $(call all-subdir-makefiles)如果该文件缺失,手动创建并添加上述内容。
确保设备的Vendor.mk引用快照目录
在device/VENDORNAME/DEVICENAME/Vendor.mk中添加对快照目录的引用:ifeq ($(BOARD_USE_VENDOR_SNAPSHOT),true) include vendor/VENDORNAME/vendor_snapshot/v30/vendor_snapshot.mk endif这一步能确保构建系统在编译vendor镜像时加载快照中的规则。
清理并重新初始化构建环境
构建系统可能缓存了旧配置,执行以下命令清理并重新初始化:make clean source build/envsetup.sh lunch DEVICENAME-userdebug BOARD_VNDK_VERSION=30 mka vendorimage避免增量构建导致的缓存问题。
检查快照版本与Lineage分支的兼容性
Lineage-20基于Android 13(API 33),而v30对应Android 11。需要确认快照中的二进制文件是否与Android 13的构建系统兼容,部分旧版VNDK快照可能需要调整vendor_snapshot_binary规则中的version字段或依赖库版本,确保与目标分支的构建规则匹配。
内容的提问来源于stack exchange,提问作者acker9

