介绍
Android.bp是Android构建系统中用于定义模块和构建规则的配置文件,它使用一种简单的声明式语法。以下是Android.bp的一些常见语法规则和约定:
-
注释:
单行注释使用//符号。
多行注释使用/和/包围。
和go语言相同// 这是单行注释 /* 这是多行注释 */
-
模块定义:
每个模块都以module_type字段开始,指定模块的类型,例如cc_library、java_library等。
模块定义由大括号{}包围,包含模块的属性和规则。cc_library {name: "my_lib",srcs: ["file1.cpp", "file2.cpp"],shared_libs: ["lib1", "lib2"], }
-
属性和值:
属性以名称和冒号:组成,后跟相应的值。
值可以是字符串、整数、布尔值、列表等,具体取决于属性的类型。
字符串值通常使用双引号括起来,但也可以不括起来,只要字符串中不包含空格等特殊字符。name: "my_module",
-
version: 1,
enabled: true,
srcs: [“file1.cpp”, “file2.cpp”], -
列表属性:
列表属性使用方括号[]来定义,元素之间用逗号分隔。
列表属性可以包含字符串、整数、布尔值等。srcs: ["file1.cpp", "file2.cpp", "file3.cpp"],
-
变量和函数:
Android.bp支持一些内置变量和函数,用于获取构建系统的信息或执行特定操作。target: {android: {srcs: ["android_src.cpp"],},host: {srcs: ["host_src.cpp"],}, },
这些是Android.bp的一些基本语法规则和约定。Android构建系统使用这些规则来构建Android操作系统,开发者可以根据项目需求自定义Android.bp文件来定义模块和构建规则。有关更详细的语法规则和属性,请参阅Android构建系统的官方文档。
以下是一些常见的预定义属性(以下没有定义模块属性):
-
name:定义模块的名称,通常是唯一标识符。
name: "my_module",
-
srcs:指定模块的源文件,可以是一个文件列表。
srcs: ["file1.cpp", "file2.cpp"],
-
deps:指定模块的依赖关系,即依赖于其他模块的模块列表。
deps: ["dependency_module1", "dependency_module2"],
-
visibility:指定模块的可见性,确定哪些模块可以访问它。
visibility: ["//my/module:visible_module"],
-
cflags、cppflags、ldflags:用于指定C/C++编译和链接的标志。
cflags: ["-Wall", "-O2"], cppflags: ["-DDEBUG"], ldflags: ["-L/path/to/lib", "-lmylib"],
-
shared_libs、static_libs:指定模块的动态链接库和静态链接库的依赖关系。
shared_libs: ["lib1", "lib2"], //编译依赖的动态库lib1和lib2 static_libs: ["lib3", "lib4"], //编译依赖的静态库lib3和lib4
-
host_supported、device_supported:指定模块是否支持主机构建和目标设备构建。
host_supported: true, device_supported: true,
-
installable:指定模块是否可以被安装到系统镜像中。
installable: true,
-
product_specific: 指定编译出来放在/product/目录下(默认是放在/system目录下)
product_specific: true
-
vendor: 指定编译出来放在/vendor/目录下(默认是放在/system目录下)
vendor: true,
案例:
//hello.cpp源码
#include <cstdio>
#include <android/log.h>#define LOG_TAG "ezconn"
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG ,__VA_ARGS__)
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG ,__VA_ARGS__)int main() {printf("hello ezconn\n");LOGD("hello ezconn");return 0;
}cc_binary { //模块类型为可执行文件name: "Hello1", //模块名Hello1srcs: ["hello.cpp"], //源文件列表vendor: true, //编译出来放在/vendor/bin目录下(默认是放在/system目录下)shared_libs: [ //编译依赖的动态库"liblog",],
}
案例2
//hello.cpp源码
#include <cstdio>
int main()
{printf("Hello Android\n");return 0;
}cc_binary {name: "Hello2", //模块名Hello2srcs: ["hello.cpp"],product_specific: true, //编译出来放在/product/bin目录下(默认是放在/system目录下)cflags: ["-Werror"], //添加编译选项
}
这些是Android.bp文件中一些常见的预制属性。每个属性用于不同的目的,开发者可以根据模块的类型和需求来使用它们。此外,Android构建系统还支持许多其他属性,这些属性可以根据具体的构建任务和模块类型进行自定义。有关更多属性和其详细说明,请参阅Android构建系统的官方文档。