Android.bp学习

news2024/11/6 9:37:42

一. Android.bp概念

Android.bp 文件首先是 Android 系统的一种编译配置文件,是用来代替原来的 Android.mk文件的。在Android7.0 以前,Android 都是使用 make 来组织各模块的编译,对应的编译配置文件就是 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 配置方式,所以我们要提前学习bp。

这里涉及到Ninja, kati, Soong, bp概念,接下来分别简单介绍一下。

Ninja

ninja是一个编译框架,会根据相应的ninja格式的配置文件进行编译,但是ninja文件一般不会手动修改,而是通过将Android.bp文件转换成ninja格文件来编译。

Android.bp

Android.bp的出现就是为了替换Android.mk文件。bp跟mk文件不同,它是纯粹的配置,没有分支、循环等流程控制,不能做算数逻辑运算。如果需要控制逻辑,那么只能通过Go语言编写。

Soong

Soong类似于之前的Makefile编译系统的核心,负责提供Android.bp语义解析,并将之转换成Ninja文件。Soong还会编译生成一个androidmk命令,用于将Android.mk文件转换为Android.bp文件,不过这个转换功能仅限于没有分支、循环等流程控制的Android.mk才有效。

Blueprint

Blueprint是生成、解析Android.bp的工具,是Soong的一部分。Soong负责Android编译而设计的工具,而Blueprint只是解析文件格式,Soong解析内容的具体含义。Blueprint和Soong都是由Golang写的项目,从Android 7.0,prebuilts/go/目录下新增Golang所需的运行环境,在编译时使用。

Kati

kati是专为Android开发的一个基于Golang和C++的工具,主要功能是把Android中的Android.mk文件转换成Ninja文件。代码路径是build/kati/,编译后的产物是ckati。

重要的事情说三篇,Android.mk可以引用Android.bp中的模块,反之Android.bp不能引用Android.mk中的模块。

重要的事情说三篇,Android.mk可以引用Android.bp中的模块,反之Android.bp不能引用Android.mk中的模块。

重要的事情说三篇,Android.mk可以引用Android.bp中的模块,反之Android.bp不能引用Android.mk中的模块。

二. Android mk转换成Android bp

1.安装androidmk 工具

我们以rk3399来举例说明

source build/envsetup.sh

lunch rk3399_roc_pc_plus-userdebug

make androidmk

生成androidmk转换工具,路径为:/out/soong/host/linux-x86/bin/androidmk

2.转换

androidmk Android.mk > Android.bp

三.Android bp语法

1.编译静态库

首先我们把vendor下创建一个Study的目录,然后再Study创建一个test1的目录,tree如下:

我们的目标是把test.c编译成一个静态库

test.c代码如下:

#include <stdio.h>

int test(void)
{
	printf("hello Androoid.mk\r\n");
	return 0;
}

Android.bp代码如下:

cc_library_static {
    name: "test3",
    srcs: ["test.c"],
}

编译方法:

方法1:在android 跟目录下敲指令:make test3

方法2:在vendor/Study/test3目录下敲指令mm

注意:两个方法都需要先source build/envsetup.sh -> lunch选择41

test.a生成在out/target/product/rk3399_roc_pc_plus/obj_arm/STATIC_LIBRARIES/test3_intermediates/test3.a

NOTED:我们发现生成的并不是libtest3.a,而是test3.a,这个要注意下

其中cc_library_static就是编译成c/c++ 静态库,可以有以下类型

name就是模组的名称

srcs就是源文件

2.编译动态库

首先我们把vendor下创建一个Study的目录,然后再Study创建一个test2的目录,tree如下:

我们的目标是把test.c编译成一个静态库

test.c代码如下:

#include <stdio.h>

int test(void)
{
	printf("hello Androoid.mk\r\n");
	return 0;
}

Android.bp代码如下:

cc_library_shared {
    name: "test4",
    srcs: ["test.c"],
}

编译方法:

方法1:在android 跟目录下敲指令:make test4

方法2:在vendor/Study/test4目录下敲指令mm

注意:两个方法都需要先source build/envsetup.sh -> lunch选择41

test.so生成在out/target/product/rk3399_roc_pc_plus/obj_arm/SHARED_LIBRARIES/test4_intermediates/test4.so

NOTED:我们发现生成的并不是libtest4.so,而是test4.so,这个要注意下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/95747.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【生信算法】利用HMM纠正测序错误(Viterbi算法的python实现)

利用HMM纠正测序错误&#xff08;Viterbi算法的python实现&#xff09; 问题背景 对两个纯系个体M和Z的二倍体后代进行约~0.05x的低覆盖度测序&#xff0c;以期获得后代个体的基因型&#xff0c;即后代中哪些片段分别来源于M和Z。已知&#xff1a; 后代中基因型为MM、MZ&…

C++ 内存管理

由于C++需要程序员自己完成堆区的内存回收,因此有可能存在内存泄漏的风险。而Java、Python不需要程序员去考虑内存泄漏的问题,虚拟机都做了内存管理。只要可以跨平台的编程语言都需要做内存对齐,C++、Java、Python都是一样的。内存的定义 程序运行时所需的内存空间分为 固定…

什么是知识,什么是知识图谱,有什么作用,有哪些应用领域?

知识图谱可以帮助机器理解世界&#xff0c;提高人工智能模型的性能。它还可以用于数据挖掘、信息检索、问答系统和语义搜索等领域&#xff0c;提高系统的准确性和可理解性。知识图谱的建模方式和技术也可以用于生物信息学和社交网络分析等领域。 知识图谱背景 在给出知识图谱…

【踩坑笔记】STM32 HAL库+泥人W5500模块

1.HAL库与标准库转换 泥人提供的模块收发程序 HAL库下的收发&#xff08;这里只提供部分接口&#xff0c;其它同样改发&#xff09;&#xff1a; 下边这条是标准库自带的函数&#xff0c;这里只用来和HAL库转换 改完之后&#xff0c;想验证自己的驱动改好没有&#xff0c;…

时序建模的主要流程

一、收集、预处理数据 收集&#xff1a;使用R包TSA的数据集&#xff0c;描述数据的基本统计特征【均值、方差、原始时序图】数据预处理&#xff1a;因为数据来源可靠&#xff0c;故针对数据预处理只做空缺值检查&#xff0c;其基本检测方法如下&#xff1a; 根据时间起点与时间…

nodejs+vue095设计学生选课成绩管理系统

目 录 目 录 III 1绪论 1 1.1课题研究的背景与意义 1 1.2 国内外研究现状和发展趋势 1 1.3课题研究的内容 2 2 关键技术介绍 3 前端技术&#xff1a;nodejsvueelementui 前端&#xff1a;HTML5,CSS3、JavaScript、VUE 1、 node_modules文件夹(有npn ins…

古典乐器网页设计成品 大学生音乐网站制作模板 大学生静态音乐HTML网页源码 dreamweaver网页作业 简单网页课程成品

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

单链表---对传参为双指针的理解

​​​​​​​​​​​ 上一篇中我们提到了单链表头指针的创建 如果链表为空时&#xff0c;头指针为NULL。接下来要实现节点的插入和删除。 在链表头部插入新节点&#xff0c;因此头指针指向的地址也应发生改变&#xff0c;即指向新节点的地址&#xff0c;因为在此时新节点就是…

消息队列之 Kafka + EFLFK集群部署

目录 介绍 Zookeeper 概述 Zookeeper 定义 Zookeeper 工作机制 Zookeeper 特点 Zookeeper 数据结构 Zookeeper 应用场景 Zookeeper 选举机制 部署 Zookeeper 集群 操作过程&#xff08;3台服务器操作相同&#xff09; 消息队列概述 为什么需要消息队列&#xff08;M…

C#语言实例源码系列-实现电脑显示器的各种设置

专栏分享点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册 &#x1f449;关于作者 众所周知&#xff0c;人生是一个漫长的流程&#xff0c;不断克服困难&#xff0c;不断反思前进的过程。在这个过程中…

ARM S5PV210 汇编实现时钟设置代码详解

一、时钟设置的步骤分析 第1步&#xff1a;CLK_SRC寄存器的设置分析 先选择不使用 PLL。让外部 24MHz 原始时钟直接过去&#xff0c;绕过 APLL 那条路。 CLK_SRC 寄存器其实是用来设置 MUX 开关的。在这里先将该寄存器设置为全 0&#xff0c;主要是 bit0 和bit4 设置为 0&am…

安全智能分析技术白皮书 数据共享

数据共享 定义内涵 数据共享 是指在多个用户或多个程序之间遵循一定规则共同享用数据&#xff0c;并进行各种操作、运算和分析的一种技术。数据共享包括数据发布、接口、交换等内容。 技术背景 随着数字经济成为拉动全球经济增长的新引擎&#xff0c;大数据成为经济中重要的…

聊聊零拷贝?

什么是零拷贝 零拷贝是指计算机在执行IO操作的时候&#xff0c;CPU不需要将数据从一个存储区复制到另一个存储区&#xff0c;进而减少上下文切换以及CPU拷贝的时间&#xff0c;这是一种IO操作优化技术 零拷贝不是没有拷贝数据&#xff0c;而是减少用户态&#xff0c;内核态的…

【Python】sklearn中的K-Means聚类

文章目录初步认识初值选取小批初步认识 k-means翻译过来就是K均值聚类算法&#xff0c;其目的是将样本分割为k个簇&#xff0c;而这个k则是KMeans中最重要的参数&#xff1a;n_clusters&#xff0c;默认为8。 下面做一个最简单的聚类 import numpy as np import matplotlib.…

Python基础语法之学习print()函数

在AI时代&#xff0c;编程已不是程序猿、攻城狮的专属属性&#xff0c;而是一个工具&#xff0c;或是一种技巧&#xff0c;本质上跟Word、PPT没啥区别。如果大家现在想掌握一门编程技能的话&#xff0c;那一定是 Python, 因为它既简洁高效&#xff0c;又能快速入门上手。本文将…

JavaWeb语法三:线程不安全问题的原因和解决方案

目录 1.线程的状态 2.线程不安全的原因 2.1&#xff1a;原子性 2.2&#xff1a; 可见性 2.3&#xff1a;有序性 3.解决线程不安全问题 3.1&#xff1a;synchronized 3.1.1&#xff1a;互斥 3.1.2&#xff1a;可重入 3.2&#xff1a;volatile关键字 3.3&#xff1a;w…

傻白入门芯片设计,盘点GPU业界的大佬(十五)

在PC个人电脑时代&#xff0c;英特尔&#xff08;Inter&#xff09;是无可争议的芯片巨头&#xff0c;凭借着X86架构在数据中心CPU中的压倒性地位&#xff0c;一度垄断全球90%的市场份额。然而在人工智能时代&#xff0c;以英伟达&#xff08;NVIDIA&#xff09;为首的GPU、AI芯…

大学生心里健康

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 网站前台&#xff1a;关于我们、联系信息文章信息、咨间师信息、服务信息、测试信息 管理员功能&#xff1a; 1、管理关…

[激光原理与应用-60]:激光器 - 光学 - 光的四大理论框架与其层次:几何光学、波动光学、电磁光学、电子光学

目录 第1章 光的四大理论框架与层次 第2章 光的四大理论各自的特点 2.1 几何光学&#xff08;粒子性&#xff09;》光学特征 2.2 波动光学&#xff08;波动性&#xff09; 2.3 电磁光学&#xff08;电学性&#xff09; 2.4 量子光学&#xff08;能量&#xff09; 第1章 光…

【信管4.2】定义范围与WBS

定义范围与WBS上次课程已经说过&#xff0c;今天的内容是非常重要的&#xff0c;可以说是整个范围管理的核心内容。因此&#xff0c;也请各位打醒十二分精神&#xff0c;一起来学习这两个非常重要的过程吧。定义范围定义范围&#xff0c; 是指定项目和产品详细描述的过程&#…