Android 编译系统之Android.bp

本文介绍了Android从Android 7.0开始使用的新的编译系统Soong,它用Android.bp替代了Android.mk。文章讨论了使用Android.bp时遇到的C/C++宏开关问题和条件编译问题,并提供了解决方案。内容包括Android.bp文件格式、模块、变量、类型、运算符、默认模块、格式化工具以及从Android.mk转换到Android.bp的工具和两者之间的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从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",
    
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值