You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编译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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 05:39:54