Android.bp 文件

发布于:2025-06-29 ⋅ 阅读:(17) ⋅ 点赞:(0)
1. 文件定位
  • 用途:Android 构建系统(Soong)的核心配置文件,替代传统 Android.mk
  • 语法基础:类似 JSON 的声明式语法,无流程控制语句(如 if-else
  • 设计目标:提升大型项目的构建效率和模块化管理能力
2. 核心语法结构
module_type {                  # 模块类型标识
    name: "module_name",        # 唯一模块名(强制)
    srcs: ["file1.cpp", ...],   # 源文件列表
    deps: ["dep_module1", ...], # 依赖模块列表
    // 其他属性...
}
3. 常见模块类型
模块类型 用途 关键属性
cc_binary C/C++ 可执行文件 cflags, ldflags
cc_library C/C++ 库(动态/静态) shared_libs, static_libs
java_library Java 库 libs, sdk_version
android_app APK 应用 certificate, privileged
android_test Android 测试模块 test_suites, test_config
prebuilt_etc 预置配置文件 src, sub_dir
4. 核心属性详解
属性 描述 示例
name 唯一模块标识(必填) name: "libaudio_utils"
srcs 源文件列表(支持通配符) srcs: ["src/*.cpp"]
deps 跨语言通用依赖 deps: ["liblog"]
shared_libs 动态链接库依赖 shared_libs: ["libutils"]
static_libs 静态链接库依赖 static_libs: ["libbase"]
cflags C/C++ 编译选项 cflags: ["-Wall", "-O2"]
sdk_version 指定 Android SDK 版本 sdk_version: "current"
vendor 标记为 Vendor 分区模块 vendor: true
product_specific 标记为 Product 分区模块 product_specific: true
5. 完整示例解析
cc_library {
    name: "libexample",
    srcs: [
        "example.cpp",
        "helper.cpp"
    ],
    cflags: ["-Wall"],                    # 编译告警
    shared_libs: ["liblog"],               # 动态依赖
    static_libs: ["libutils"],             # 静态依赖
    vendor: true,                          # 输出到 /vendor
}
  • 输出文件/vendor/lib[64]/libexample.so
  • 依赖关系:链接 liblog.so (动态) + libutils.a (静态)
6. 高级功能
  1. 条件编译 - 按平台差异化配置

    cc_binary {
        name: "my_binary",
        srcs: ["main.cpp"],
        target: { 
            android_arm: { cflags: ["-DARM_OPT"] }, 
            android_x86: { cflags: ["-DX86_AVX"] }
        }
    }
    
  2. 变量复用 - 减少重复配置

    common_flags = ["-Wall", "-Werror"]
    cc_binary {
        name: "app1",
        cflags: common_flags,
    }
    
  3. 模块继承 - 共享基础配置

    cc_defaults {
        name: "base_config",
        cflags: ["-O3"],
        shared_libs: ["libbase"],
    }
    
    cc_library {
        name: "liboptimized",
        defaults: ["base_config"],  # 继承配置
        srcs: ["optimized.cpp"],
    }
    
7. 工作总结
  1. 命名唯一性:全局确保 name 不冲突
  2. 路径处理:优先用 glob(["**/*.cpp"]) 替代硬编码路径
  3. 依赖管理
    • 动态库 → shared_libs
    • 静态库 → static_libs
    • 跨语言 → deps
  4. 分区控制
    • 系统核心 → 默认路径
    • Vendor 模块 → vendor: true
    • Product 模块 → product_specific: true
  5. 构建优化
    • 避免在 Android.bp 中添加复杂逻辑
    • cc_defaults 实现配置复用

网站公告

今日签到

点亮在社区的每一天
去签到