Android.bp 基础

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"],
    }

  • 再次编译运行,编译运行过程参考上一节操作

相关推荐
千里马学框架15 小时前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台15 小时前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone15 小时前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc16 小时前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo17 小时前
Kotlin 协程中的 Job 结构化并发与取消
android
sun00770018 小时前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼19 小时前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone20 小时前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen20 小时前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone20 小时前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui