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

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

相关推荐
娅娅梨17 小时前
Android- Surface, SurfaceView, TextureView, SurfaceTexture 原理图解
android·surface
2501_9159184118 小时前
HTTPS 端口号详解 443 端口作用、iOS 抓包方法、常见 HTTPS 抓包工具与网络调试实践
android·网络·ios·小程序·https·uni-app·iphone
程序员码歌19 小时前
明年35岁了,如何破局?说说心里话
android·前端·后端
非门由也20 小时前
Android studio安装教程——超详细(含安装包安装教程)
android·ide·android studio
平淡风云20 小时前
Android应用添加日历提醒功能
android·日历
骐骥11 天前
2025-09-08升级问题记录:app提示“此应用专为旧版Android打造..”或“此应用与最新版 Android 不兼容”
android·升级·不兼容·target sdk·专为旧版 android 系统
Zender Han1 天前
Flutter 视频播放器——flick_video_player 介绍与使用
android·flutter·ios·音视频
尚久龙1 天前
安卓学习 之 用户登录界面的简单实现
android·运维·服务器·学习·手机·android studio·安卓
Modu_MrLiu1 天前
Android实战进阶 - 启动页
android·实战进阶·启动页·倒计时场景
出门吃三碗饭1 天前
编译器构造:从零手写汇编与反汇编程序(一)
android·汇编