Android 编译错误:missing dependencies
- 1. 编译错误log
- 2. 分析方向
- 2.1 缺少依赖库
- 2.2 缺少sdk_version:
- 2.3 缺少响应的 lib下so库
1. 编译错误log
echo "module netd_client_example missing dependencies: libnetd_client{os:android
,image:vendor.34,arch:arm64_armv8-a-branchprot_kryo300,sdk:,link:shared}" && false
2. 分析方向
2.1 缺少依赖库
添加依赖库
shared_libs: [
"liblog",
"libbinder",
"libutils",
"libcutils",
"libcurl",
"libbase",
"libnetd_client"
],
2.2 缺少sdk_version:
cc_binary {
name: "netd_client_example",
srcs: ["main.cpp"],
defaults: ["hidl_defaults"],
vendor: true,
sdk_version: "current",
原因:
-
最近在调查时发现,如果vendor分区的库或bin依赖了system分区的库时,会有此报错,原因是构建系统不允许在供应商模块和框架模块之间建立依赖关系,并且构建系统会在以下情况下发出错误:
- 未设置 vendor:true 的模块依赖于设置了 vendor:true 的模块,或
- 设置了 vendor:true 的模块依赖于既未设置 vendor:true 也未设置 vendor_available:true 的非 llndk_library 模块。
因此我们可以检查是否有跨分区的依赖,检查是否可以通过添加vendor:true在不影响功能的情况解决跨分区依赖问题
-
Android 11 取消了 product 分区捆绑,使其独立于 system 和 vendor 分区。构建时,Make 和 Soong 将通过检查 platform_apis 和 sdk_version 字段来验证 product 分区中的 Java 模块是否不使用隐藏 API。product 分区中应用的 sdk_version 必须填写 current、system_current 或 API 的数字版本,platform_apis 字段必须为为空。
2.3 缺少响应的 lib下so库
根据第一步中添加依赖库查找out目录下 out/xxx/lib 已经out/xx/lib64 是否存在响应的so库
cc_binary {
name: "rtkethernet_client",
defaults: ["hidl_defaults"],
srcs: ["Test.cpp"],
shared_libs: [
"liblog",
"libhardware",
"libhidlbase",
"libhidltransport",
"libutils",
"libui",
],
}
比如上面编译错误,查看后发现 只有out/xxx/vendor/lib/android.hidl.base@1.0.so 而lib64下没有。