Android ninja介绍
ninja简介
早期的Android系统都是采用Android.mk的配置来编译源码,从Android 7.0开始引入ninja。ninja是一个编译框架,会根据相应的ninja格式的配置文件进行编译,使用ninja的主要目的是用来加快Android源码的编译速度
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中的ninja程序
prebuilts/build-tools/linux-x86/bin/ninja
Android中编译生成的ninja文件
out/soong/build.ninja
out/soong/.bootstrap/build.ninja
out/soong/.bootstrap/build-globs.ninja
out/soong/.minibootstrap/build.ninja
out/soong/.minibootstrap/build-globs.ninja
out/combined-<product_name>.ninja
out/build-87939e401eb63e7a3ee5d558a8d326e2.ninja
out/build-<product_name>-package.ninja
out/build-87939e401eb63e7a3ee5d558a8d326e2-cleanspec.ninja
转换关系
通过Kati将Android.mk转换成ninja格式的文件
通过Blueprint + Soong将Android.bp转换成ninja格式的文件
通过androidmk将Android.mk转换成Android.bp,但针对没有分支、循环等流程控制的Android.mk才有效。
转换关系图如下:
Android.bp
-------------------------------------
cc_library_shared {name: "libinbp",
}cc_binary {name: "binaryinbp",srcs: ["main.cpp"],shared_libs: ["libinbp","libinmake" // This is not possible, building gives error: binaryinbp" depends on undefined module "libinmake"]
}Android.mk
-------------------------------------
include $(CLEAR_VARS)
LOCAL_MODULE := libinmake
include $(BUILD_SHARED_LIBRARY)include $(CLEAR_VARS)
LOCAL_SRC_FILES := main.cpp
LOCAL_MODULE := binaryinmake
LOCAL_SHARED_LIBRARIES := \libinmake \libinbp
include $(BUILD_EXECUTABLE)
常见用法
// 在增量编译方面,ninja比make单独编译某个模块快很多,常见的模块有apk jar包等
prebuilts/build-tools/linux-x86/bin/ninja -f out/build-<product_name>.ninja ${model_name}
// example 1
prebuilts/build-tools/linux-x86/bin/ninja -f out/build-<product_name>.ninja services
// example 2
prebuilts/build-tools/linux-x86/bin/ninja -f out/build-<product_name>.ninja Launcher3// 链接文件方便编译
ln -s prebuilts/build-tools/linux-x86/bin/ninja ninja
ln -s out/combined-aosp_arm64.ninja build.ninja
ninja -f build.ninja ${model_name}
google Soong介绍
https://source.android.google.cn/setup/build
Android ninja介绍相关推荐
- android AsyncTask介绍(转)
android AsyncTask介绍 AsyncTask和Handler对比 1 ) AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接 ...
- Android类库介绍
Android类库介绍 GPhone开发包Android SDK含了很多丰富的类库: android.util 涉及系统底层的辅助类库 android.os 提供了系统服务.消息传输.IPC管道 an ...
- 1.android体系结构介绍
一.Android的介绍 android介绍见百度百科:Android的介绍,度娘把Android介绍的这么清楚,如果谷歌是Android的爹,那度娘就是娘了. 二.Android的架构图 andro ...
- 【转】Android bluetooth介绍(三): 蓝牙扫描(scan)设备分析
原文网址:http://blog.csdn.net/xubin341719/article/details/38584469 关键词:蓝牙blueZ A2DP.SINK.sink_connect.s ...
- 作业Android自我介绍
***Android自我介绍***
- Android HIDL 介绍学习之客户端调用
应上一篇文章Android HIDL 介绍学习_Super Jang的博客-CSDN博客_安卓hidl读者的要求,本文更新客户端调用方法. hidl的客户端调用相比服务端的实现要简单很多,本次我们通过 ...
- Android开发介绍
Android开发介绍 这个教程设计是帮助你学习基础的Android开发和快速搭建您的开发环境.这个是在我的Window 7上编写的,当然它也支持Linux(uBuntu).Mac OS其他支持And ...
- android 模拟器的使用(Android模拟器介绍及创建)
做了这么久的android开发,一直想把在开发过程中积累的经验或问题总结一下,可是都没有时间,现在有一点点空闲,所以慢慢把我在android中遇到的问题整理一下写出来,供自己以后参考,也希望和大家一起 ...
- Android bluetooth介绍(一):基本概念及硬件接口
关键词:蓝牙硬件接口 UART PCM blueZ 版本:基于android4.2之前版本 bluez 内核:linux/linux3.08 系统:android/android4.1.3.4 ...
最新文章
- asp.net实现C#代码加亮显示
- Python 还能实现图片去雾?FFA 去雾算法、暗通道去雾算法用起来!(附代码)...
- Linux服务器Cache占用过多内存导致系统内存不足问题的排查解决
- SET_TABLE_FOR_FIRST_DISPLAY 参数 I_SAVE
- moead算法流程步骤_数据聚类(一)常见聚类算法的基本原理[图解]
- 关于字节序(大端法、小端法)的定义
- LeetCode 389. 找不同(位运算)
- MyBatis-Plus_快速入门0222
- C#实现 Linq 序列的Distinct—— IEnumerable.Distinct()——IEqualityComparer
- 网页Loading,让页面加载完再显示
- 微信小程序初体验,入门练手项目--通讯录,后台是阿里云服务器(一)
- 管理多个java版本,OS X中使用jEnv管理多个Java版本
- 《生活中的魔法数学》读后感
- nodejs mysql process_nodeJS之进程process对象
- 2019年7月3号第九次练习(27移除元素)
- 百度大脑驾驶证识别使用攻略
- 【Free5GC】test.sh脚本测试流程
- Tableau-可视化操作(五)
- c语言程序 出圈游戏,【出圈】 (C语言代码)
- Python——星期的字典1——7