1. 什么是 Android.bp 文件?
- Android.bp 文件是 Android 构建系统的一部分,用于定义模块的构建逻辑。它采用 JSON 类似的语法,简单、结构化,可读性更强。构建系统会根据这些规则生成需要的目标文件。
- 主要功能:
- 定义模块类型(例如应用程序、库、工具等)。
- 描述模块依赖关系。
- 指定源文件、标志和输出路径。
2. Android.bp 文件的语法基础
2.1 基本结构
bash
模块类型 {
属性名1: "值1",
属性名2: ["值2", "值3"],
}
2.2 常见数据类型
-
字符串: 用于表示路径或模块名称,使用双引号。
name: "MyModule"
-
列表: 用于存储多个值,用方括号括起。
srcs: ["file1.c", "file2.c"]
-
布尔值: true 或 false,用来表示开关。
enabled: true
3. 常见模块类型
3.1 cc_library_shared
定义共享库模块(.so 文件)。
cc_library_shared {
name: "mylib",
srcs: ["mylib.cpp"],
shared_libs: ["liblog"], # 依赖其他共享库
include_dirs: ["include"], # 指定头文件目录
}
3.2 cc_library_static
定义静态库模块(.a 文件)。
cc_library_static {
name: "mylib_static",
srcs: ["mylib_static.cpp"],
}
3.3 cc_binary
定义可执行文件模块。
cc_binary {
name: "mytool",
srcs: ["main.cpp"],
shared_libs: ["liblog"], # 依赖共享库
}
3.4 android_app
定义 APK 模块。
android_app {
name: "MyApp",
srcs: ["src/**/*.java"],
manifest: "AndroidManifest.xml",
static_libs: ["mylib"],
}
4. 关键属性解析
4.1 name
模块的唯一名称,必须全局唯一。
name: "MyModule"
4.2 srcs
指定源文件列表,可以包含 C/C++ 文件、Java 文件等。
srcs: ["file1.cpp", "file2.c"]
4.3 shared_libs 和 static_libs
-
shared_libs: 声明依赖的共享库(.so 文件)。
-
static_libs: 声明依赖的静态库(.a 文件)。
shared_libs: ["liblog", "libc"],
static_libs: ["libmylib"],
4.4 include_dirs
指定头文件搜索路径。
include_dirs: ["include"],
4.5 cflags 和 ldflags
-
cflags: 传递给编译器的标志(如优化或警告标志)。
-
ldflags: 传递给链接器的标志。
cflags: ["-Wall", "-O2"],
ldflags: ["-lm"],
5. 上节案例改造成Android.bp编译
-
上节内容:Android.mk 基础
-
改造 static_lib 下的 Android.bp:
cc_library_static {
name: "libhello_static",
srcs: ["hello_static.cpp"],
} -
改造 shared_lib 下的 Android.bp:
cc_library_shared {
name: "libhello_shared",
srcs: ["hello_shared.cpp"],
} -
改造 executable 下的 Android.bp:
cc_binary {
name: "hello_executable",
srcs: ["main.cpp"],
static_libs: ["libhello_static"],
shared_libs: ["libhello_shared"],
} -
再次编译运行,编译运行过程参考上一节操作