???配套系列教学视频链接:
? ? ??安卓系列教程之ROM系统开发-百问100ask
说明
系统:AOSP Android10.0
设备:Android x86模拟器
前言
? ? 本文重点描述Android.bp几种常见的预编译模块规则
常见的预编译的模块有:
var prebuiltTypes = map[string]string{
"SHARED_LIBRARIES": "cc_prebuilt_library_shared",
"STATIC_LIBRARIES": "cc_prebuilt_library_static",
"EXECUTABLES": "cc_prebuilt_binary",
"JAVA_LIBRARIES": "java_import",
"ETC": "prebuilt_etc",
}
一,预编译etc配置文件
模板: frameworks/base/data/etc/Android.bp
prebuilt_etc {
name: "Vendor_my_idc",
src: "Vendor_5135_Product_0005.idc",
filename_from_src: true,
sub_dir:"usr",
}
另外一种写法:?
prebuilt_etc {
name: "Vendor_5135_Product_0005.idc",
src: "Vendor_5135_Product_0005.idc",
sub_dir:"usr",
}
最后路径是在out/target/product/产品名/system/etc/usr/
如果需要安装到其他路径,可以如下配置:
product_specific: true | product/etc/subdir | proprietary?: true | vendor/etc/subdir |
二, 预编译可执行程序
模板:?system/core/logcat/Android.bp
cc_prebuilt_binary {
name: "logpersist.start",
srcs: ["logpersist"],
init_rc: ["logcatd.rc"],
required: ["logcatd"],
symlinks: [
"logpersist.stop",
"logpersist.cat",
],
strip: {
none: true,
},
}
其实编译的是一个脚本, 必须要求logcatd模块存在, 并且可以生成软连接。
三,预编译动态库
cc_prebuilt_library_shared {
name: "libmycjson-pre",
srcs: ["x86_64/libmycjson-pre.so"],
compile_multilib?: “64”,
}
总结
其实Android.bp做预编译没有Android.mk那么灵活, 只限定于几个常见的目标路径, 无法用LOCAL_MODULE_PATH来指定路径。
|