| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> Android.bp 语法和使用 -> 正文阅读 |
|
[移动开发]Android.bp 语法和使用 |
1.? Android.bp 文件是什么?????????Android.bp 文件首先是 Android 系统的一种编译配置文件,是用来代替原来的 Android.mk ????????在 Android7.0 开始,Google 引入了 ninja 和 kati 来编译,为啥引入 ninja?因为随着 Android 越来越庞大,module 越来越多,编译时间也越来越久,而使用 ninja 在编译的并发处理上较 make 有很大的提升。Ninja 的配置文件就是Android.bp,Android 系统使用 Blueprint 和 Soong 工具来解析 Android.bp 转换生成 ninja文件。为了兼容老的 mk 配置文件,Android 当初也开发了 Kati 工具来转换 mk 文件生成ninja,目前 Android Q 里边,还是支持 Android.mk 方式的。相信在将来的版本中,会彻底让 mk 文件废弃,同时 Kati 也就淘汰了,只保留 bp 配置方式,所以我们要提前学习 ????????这里涉及到Ninja, kati, Soong, bp概念,接下来分别简单介绍一下。 1.1 Ninja ninja是一个编译框架,会根据相应的ninja格式的配置文件进行编译,但是ninja文件一般不会手动修改,而是通过将Android.bp文件转换成ninja格文件来编译。 1.2 Android.bp Android.bp的出现就是为了替换Android.mk文件。bp跟mk文件不同,它是纯粹的配置,没有分支、循环等流程控制,不能做算数逻辑运算。如果需要控制逻辑,那么只能通过Go语言编写。 1.3 Soong Soong类似于之前的Makefile编译系统的核心,负责提供Android.bp语义解析,并将之转换成Ninja文件。Soong还会编译生成一个androidmk命令,用于将Android.mk文件转换为Android.bp文件,不过这个转换功能仅限于没有分支、循环等流程控制的Android.mk才有效。 1.4 Blueprint Blueprint是生成、解析Android.bp的工具,是Soong的一部分。Soong负责Android编译而设计的工具,而Blueprint只是解析文件格式,Soong解析内容的具体含义。Blueprint和Soong都是由Golang写的项目,从Android 7.0,prebuilts/go/目录下新增Golang所需的运行环境,在编译时使用。 1.5 Kati kati是专为Android开发的一个基于Golang和C++的工具,主要功能是把Android中的Android.mk文件转换成Ninja文件。代码路径是build/kati/,编译后的产物是ckati。 ? ? ? ? 2.? 语法对应规则????????我们可能已经习惯了Android.mk 中的语法,现在要变更为 Android.bp, 为了便于理解,可以找到源码,查看Android.mk 与 Android.bp 语法对应规则: 源码位置:?/build/soong/androidmk/cmd/androidmk/android.go 中, 这里我只粘贴一部分,完整代码请查看源文件。
3.? 如何把Android.mk 文件转换成 Android.bp? ? ? ? ?1. 在工程源码中: ? ? ? ? ?1.? ?source build/envsetup.sh ? ? ? ? ?2.? ?lunch? xxx? ? ? ? ? ?3.? ?make? androidmk? ? ? ? ? ?生成androidmk转换工具,路径为:/out/soong/host/linux-x86/bin/androidmk ? ? ? ? 2.? 直接把你要转换的Android.mk 文件放置到此目录下,然后执行命令: ? ? ??????????androidmk? ?Android.mk? >? Android.bp 4.? 语法讲解? ? ? ? 为了便于理解,把Android.mk 和 Android.bp 的语法放在一起说明,更容易理解一点: 4.1 编译不同类型的模块? ? ? ? 4.1.1?编译成 Java 库
? ? ? ? 4.1.2?编译成 Java 静态库
? ? ? ? 4.1.3?编译成 App 应用
? ? ? ? 4.1.4? 编译成?Native?动态库
? ? ? ? 4.1.5?编译成 Native 静态库
? ? ? ? ? 4.1.6?编译成 Native 执行程序
? ? ? ? 4.1.7?编译成头文件库
? 4.2?文件路径? ? ? ? 4.2.1?本地头文件路径
? ? ? ? 4.2.2?导出的头文件路径
? ? ? ? 4.2.3?资源文件路径
4.3?库依赖? ? ? ? 4.3.1?依赖的静态库
? ? ? ? 4.3.2?依赖的动态库
? ? ? ? 4.3.3?依赖的头文件库
? ? ? ? 4.3.4?依赖的 Java 库
???????? 4.4?安装到不同分区中? ? ? ? 4.4.1?安装到vendor中
? ? ? ? 4.4.2?安装到product中
? ? ? ? 4.4.3?安装到odm中
4.5?编译参数? ? ? ? 4.5.1?C flags
? ? ? ? 4.5.2?Cpp flags
? ? ? ? 4.5.3?Java flags
???????? 4.6 后续再总结继续更新 |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 3:47:52- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |