从Android 7.0 (N)开始, Google开始逐步使用Android.bp代替原来的Android.mk进行编译.
Google称之为soong, 具体可以参考:
https://android.googlesource.com/platform/build/soong
使用Android.bp编译时, 目前还存在一些问题:
1.对C/C++代码, 如果需要使用宏开关时, 由于android整个编译系统还没完全切换过来, 导致 在项目mk文件定义的开关, 还不能生效.
2.对于条件编译, 需要添加go文件进行控制.
对于问题1, 一是通过export命令, 把相应的开关设置到环境变量, go文件就能读取到了.
二是, 把开关集中放到某一个文件中, 然后在go文件中直接读取这个文件.
对于问题2, 下面会通过例子给出一个说明.
下面是一个libsysutils模块Android.bp的内容: libsysutils_defaults以上及相关内容是新添加关键部分, 用来支持go文件进行条件编译. 如果想让TLV_FEATURE_ENABLED起作用, 需要export TLV_FEATURE_ENABLED=yes.
Android.bp:
bootstrap_go_package {
name: "soong-libsysutils",
pkgPath: "android/soong/system/core/libsysutils",
deps: [
"blueprint",
"blueprint-pathtools",
"soong",
"soong-android",
"soong-cc",
"soong-genrule",
],
srcs: [
"libsysutils.go",
],
pluginFor: ["soong_build"],
}
libsysutils_defaults {
name: "libsysutils_defaults",
}
cc_library_shared {
name: "libsysutils",
vendor_available: true,
defaults: [
"libsysutils_defaults",
],
srcs: [
"src/SocketListener.cpp",
"src/FrameworkListener.cpp",
"src/NetlinkListener.cpp",
"src/NetlinkEvent.cpp",
"src/FrameworkCommand.cpp",
"src/SocketClient.cpp",
"src/ServiceManager.cpp",