type
status
date
slug
summary
tags
category
icon
password
C/C++是一种非常古老的编程语言,在大型项目开发管理过程中,单靠MAKE,CMAKE等工具已经不满足需求了,因此催生出了各种个样的构建工具,比如Google自家的GN,Bazel等,还有CMake,XMake,Vcpkg等.工具虽然多种多样,但是要解决问题是一样的,思路也大同小异.
从Android 7.0开始,ASOP开始引入Soong构建系统,用来替换之前的Make.
Soong使用bp文件来描述构建:
cc_library_shared { name: “libxmlrpc++”, rtti: true, cppflags: [ “-Wall”, “-Werror”, “-fexceptions”, ], export_include_dirs: [“src”], srcs: [“src/**/*.cpp”], target: { darwin: { enabled: false, }, }, }
这个语法和Google的GN,Bazel有点像.
Android.bp 文件格式
bp文件中不包含任何条件语句和控制语句,所有复杂的问题都由Go编写逻辑处理.
模块/Module
Android.bp中的模块都以模块类型开头,模块类型有很多,具体的参考Soong模块类型.
cc_binary { name: "gzip", srcs: ["src/test/minigzip.c"], shared_libs: ["libz"], stl: "none", }
每个模块下都必须有一个唯一的name属性,不同的模块类型下面的属性各不相同,还比价灵活.后面总结下一些常见的模块和它的属性.
C++
对于C++模块来说,我们一般关注三种类型:
- cc_binary 即二进制执行文件
cc_binary { name: "android.hardware.biometrics.fingerprint@2.1-service", defaults: ["hidl_defaults"], init_rc: ["android.hardware.biometrics.fingerprint@2.1-service.rc"], vintf_fragments: ["android.hardware.biometrics.fingerprint@2.1-service.xml"], vendor: true, relative_install_path: "hw", srcs: [ "BiometricsFingerprint.cpp", "service.cpp", ], shared_libs: [ "libcutils", "liblog", "libhidlbase", "libhardware", "libutils", "android.hardware.biometrics.fingerprint@2.1", ], }
srcs: 表示模块包含的源文件
init_rc : 表示如果该模块被安装,这些rc配置文件也会被安装
shared_lib : 表示会被链接到该模块的动态链接库
vendor: 模块是否与特定的SOC有关
relative_install_path: 安装到默认安装目录的子目录
- cc_library_shared 动态链接库
- cc_library_static 静态链接库
java
- android_app
- java_library
默认模块
默认模块可用于在多个模块中重复使用相同的属性。例如:
cc_defaults { name: "gzip_defaults", shared_libs: ["libz"], stl: "none", } cc_binary { name: "gzip", defaults: ["gzip_defaults"], srcs: ["src/test/minigzip.c"], }
预编译的模块
某些预编译的模块name与源码中模块的name相同.
总结
- 遇到不清楚的属性,模块类型,直接查文档就行
- 作者:姜康
- 链接:https://jiangkang.tech/article/8a76cd89-ec4d-4e34-9f2d-c02607a937e0
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章