本文已参与「新人创作礼」活动,一起开启掘金创作之路。
前言
现在大多数项目需要集成三方的so, 二进制, rc, etc, 配置文件,ko等,下面的方法基本可以覆盖,备用
语法参考
语法参考谷歌官方的语法详细说明官方链接
实例
预编译集成二进制文件/bin 和启动rc
- 源文件 vendor/bin/hw/android.hardware.configstore@1.1-service
- rc文件 android.hardware.configstore@1.1-service.rc
- proprietary: 是否私有,等价与vendor属性
- vendor 是否放到vendor/bin目录(属于vendor分区)
- relative_install_path 安装的相对路径(既是指定安装路径,vendor 为true bin会安装到/vendor/bin,指定了相对安装路径(相对/vendor/bin)后就会放到指定路径,本例子就会放到/vendor/bin/hw)
- required 依赖的module name
- strip 预编译集成 bin和 so 此属性必须配置 none为trtue
- init_rc 此bin所需要的启动rc,如果不需要可以去掉此属性
cc_prebuilt_binary {
name: "android.hardware.configstore@1.1-service",
proprietary: true,
vendor: true,
required: ["configstore@1.1.policy"],
relative_install_path: "hw",
strip: {
none: true,
},
srcs: ["vendor/bin/hw/android.hardware.configstore@1.1-service"],
init_rc: ["android.hardware.configstore@1.1-service.rc"],
}
预编译集成配置文件
-
Android 10 开始Android.bp 才支持集成此类文件
-
sub_dir 放置到etc的子文件夹
-
vendor 放到vendor分区(此例子预编译etc会安装到/vendor/etc)
prebuilt_etc {
name: "configstore@1.1.policy",
vendor: true,
srcs: ["seccomp_policy/configstore@1.1-arm64.policy"],
sub_dir: "seccomp_policy",
}
预编译集成动态库 so
- vendor_available vendor是否可用,设置为true,则system vendor分区各自安装一份
- multilib 指定32或者64位的原始文件
- compile_multilib 预编译32 64 还是都要
- vndk 是否使能VNDK
- export_include_dirs 导出的头文件路径
- shared_libs 指定依赖的动态库
- export_shared_lib_headers 导出的头文件库
cc_prebuilt_library_shared {
name: "android.hardware.configstore-utils",
vendor_available: true,
vndk: {
enabled: true,
},
strip: {
none: true,
},
multilib: {
lib64: {
srcs: ["system/lib64/android.hardware.configstore-utils.so"],
},
lib32: {
srcs: ["system/lib/android.hardware.configstore-utils.so"],
},
},
compile_multilib: "both",
export_include_dirs: ["include"],
shared_libs: [
"android.hardware.configstore@1.0",
"android.hardware.configstore@1.1",
"libbase",
"libhidlbase"
],
export_shared_lib_headers: [
"android.hardware.configstore@1.0",
"android.hardware.configstore@1.1",
"libbase",
"libhidlbase"
],
}