Android 编译系统之Android.bp

从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",
    
  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
android.bpAndroid 编译系统中的一个重要组成部分,它提供了一种条件编译的机制来支持在不同条件下构建不同的代码。 条件编译是一种根据不同的条件选择性地编译代码的技术。在 Android.bp 中,我们通过定义变量和使用条件表达式来控制编译过程。 首先,我们可以在 Android.bp 中定义变量,例如: var_name: { src: ["source_file1.cpp", "source_file2.cpp"], cflags: ["-DENABLE_FEATURE1"], } 在上述的例子中,我们定义了一个名为 var_name 的变量,它包含了两个源文件,并且定义了一个编译标志 ENABLE_FEATURE1。 然后,在同一个 Android.bp 文件中,我们可以使用条件表达式来根据不同的条件选择性地编译代码,例如: if (config.PREDEFINED_FLAG) { srcs: ["source_file3.cpp"], } else { srcs: ["source_file4.cpp"], } 在上述的例子中,我们根据预定义的标志 PREDEFINED_FLAG 来决定是否包含 source_file3.cpp 或 source_file4.cpp。如果 PREDEFINED_FLAG 为真,编译器将会包含 source_file3.cpp,否则将会包含 source_file4.cpp。 条件编译的好处是可以根据不同的情况,在同一个代码库中构建多个版本,以适应不同的需求和环境。它可以帮助开发人员提高代码的可维护性和灵活性,并且有效管理代码库中的各种配置和功能。 总结起来,Android.bp 提供了条件编译的机制,通过定义变量和使用条件表达式来选择性地编译代码。这种技术可以帮助开发人员根据不同的需求和环境构建多个版本的代码,提高代码的可维护性和灵活性。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值