当前位置: 首页 > news >正文

Android.bp 基础

1. 什么是 Android.bp 文件?

  • Android.bp 文件是 Android 构建系统的一部分,用于定义模块的构建逻辑。它采用 JSON 类似的语法,简单、结构化,可读性更强。构建系统会根据这些规则生成需要的目标文件。
  • 主要功能:
    • 定义模块类型(例如应用程序、库、工具等)。
    • 描述模块依赖关系。
    • 指定源文件、标志和输出路径。

2. Android.bp 文件的语法基础

2.1 基本结构

模块类型 {属性名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"],
}
  • 再次编译运行,编译运行过程参考上一节操作
http://www.dtcms.com/a/345127.html

相关文章:

  • 安全帽检测算法如何提升工地安全管理效率
  • AI 向量库:从文本到数据的奇妙之旅​
  • 编排之神--Kubernetes中包管理Helm工具详解
  • Jmeter压测实操指南
  • 金融量化入门:Pandas 时间序列处理与技术指标实战(含金叉死叉 / 均线策略)
  • GaussDB SQL引擎(1)-SQL执行流程
  • 从创新到落地:技术驱动下的企业管理变革新趋势
  • python-对图片中的人体换背景色
  • 小杰机械视觉(three day)——图象旋转、镜像、缩放、矫正
  • Android UI界面绘制
  • AI赋能体育训练突破:AI动作捕捉矫正精准、战术分析系统提效率,运动员破瓶颈新路径
  • AI计算提效关键。自适应弹性加速,基于存算架构做浮点运算
  • 自学嵌入式第二十五天:数据结构-队列、树
  • JavaWeb前端05(Vue工程化,Vue组件两种风格:组合式API 和 选项式API)及简单案例)
  • 文件下载和文件上传漏洞
  • FTP/TCP上传下载文件
  • C++ 判断: 深度解析与实战指南
  • 华中产业带跨境电商进阶:亚马逊加速器驱动下的多维度能力重构
  • CSS @media 媒体查询
  • Python从入门到自动化运维
  • 凌霄飞控开发日志兼新手教程——基础篇:认识基本的文件内容和相关函数作用(25电赛备赛版)
  • Quarkus 从入门到精通完整指南Q
  • Python socket远程部署工具服务
  • 云原生作业(k8s总结)
  • 爬虫基础学习-配置代理、以及项目实践
  • Spring Cloud系列—SkyWalking告警和飞书接入
  • CGI-CVE-2016-5385
  • 【实时Linux实战系列】实时网络流量监测与管理
  • tauri配置允许执行eval脚本,在打包cocos游戏web/phone移动端的时候一定要配置
  • canvas绘制图片等比缩放