androidbp构建编译C++代码
- 软件开发
- 2025-09-13 07:30:02

Android BP 编译方式介绍
在 Android 构建系统中,Blueprint(简称 BP)是一种基于 JSON 的构建配置文件格式,代替了传统的 Android.mk 文件。Blueprint 文件的主要扩展名是 .bp,它是 Android 的 Soong 构建系统所使用的配置文件格式。
Blueprint 文件的作用是定义如何编译、链接和打包项目中的组件,例如库(静态库、动态库)、可执行文件、AIDL 文件、资源等。
BP 文件的基本语法
模块定义:
每个模块通常由一个函数调用定义,例如 cc_library_shared、cc_binary 等。每个模块有自己的属性,用于描述如何构建。属性值:
属性值通常是字符串、布尔值、列表或者嵌套的结构。注释:
使用 // 来添加单行注释。常见模块类型
以下是一些常用模块类型及其用途:
cc_library_shared:
用于定义共享库(.so 文件)。cc_library_static:
用于定义静态库(.a 文件)。cc_binary:
用于定义可执行文件。java_library:
用于定义 Java 库。java_binary:
用于定义 Java 的可执行文件(jar 文件)。BP 文件示例
以下是一个完整的项目示例,展示了如何使用 BP 文件定义模块。
项目结构 my_project/ ├── Android.bp # 所有模块的配置文件 ├── src/ │ ├── main.cpp # 主程序入口 │ └── utils.cpp # 工具代码 ├── include/ │ └── utils.h # 公共头文件 ├── lib/ │ └── Android.bp # 静态库的 BP 文件 │ └── helper.cpp # 静态库实现 │ └── helper.h # 静态库头文件Android.bp 示例 顶层 Android.bp // 定义共享库 cc_library_shared { name: "my_shared_lib", srcs: ["src/utils.cpp"], include_dirs: ["include"], // 编译选项 cflags: ["-Wall", "-Werror"], shared_libs: ["libhelper"], // 依赖的共享库 } // 定义可执行文件 cc_binary { name: "my_executable", srcs: ["src/main.cpp"], include_dirs: ["include"], // 链接所需的库 shared_libs: ["my_shared_lib"], // 依赖的共享库 static_libs: ["libhelper"], // 依赖的静态库 } lib/Android.bp // 定义静态库 cc_library_static { name: "libhelper", srcs: ["helper.cpp"], cflags: ["-Wall", "-Werror"], export_include_dirs: ["."], // 导出 include 目录以供其他模块使用 }
代码文件 src/main.cpp #include "utils.h" #include <iostream> int main() { std::cout << "Calling utility function..." << std::endl; print_hello(); return 0; } src/utils.cpp #include "utils.h" #include <iostream> void print_hello() { std::cout << "Hello from Utils!" << std::endl; } include/utils.h #ifndef UTILS_H #define UTILS_H void print_hello(); #endif // UTILS_H lib/helper.cpp #include "helper.h" #include <iostream> void helper_function() { std::cout << "Helper function called!" << std::endl; } lib/helper.h #ifndef HELPER_H #define HELPER_H void helper_function(); #endif // HELPER_H
构建步骤
准备环境:
确保已经安装了 Android 构建工具(如 lunch 和 m)。在 Android 源码根目录下运行环境初始化命令:source build/envsetup.sh选择目标平台:
使用 lunch 选择构建目标,例如:lunch aosp_arm64-userdebug构建模块:
使用 m 命令构建指定模块,例如:m my_executable运行生成的可执行文件:
编译完成后,生成的可执行文件通常位于 out/target/product/<platform>/system/bin/ 目录下。重要属性说明
name: 模块的名称,必须唯一。
srcs: 模块的源文件列表。
include_dirs: 指定头文件目录。
shared_libs: 指定模块所依赖的共享库。
static_libs: 指定模块所依赖的静态库。
cflags: 指定编译时的 C/C++ 标志。
export_include_dirs: 导出头文件目录,供其他模块使用。
总结
通过使用 Android 的 BP 文件(Android.bp),可以方便地定义模块及其依赖关系。使用 cc_library_shared、cc_library_static 和 cc_binary 等模块类型,可以轻松地构建动态库、静态库和可执行文件。合理地组织项目结构和配置 BP 文件,可以让构建流程更加高效和清晰。
androidbp构建编译C++代码由讯客互联软件开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“androidbp构建编译C++代码”