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介绍相关推荐

  1. android AsyncTask介绍(转)

    android AsyncTask介绍 AsyncTask和Handler对比 1 ) AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接 ...

  2. Android类库介绍

    Android类库介绍 GPhone开发包Android SDK含了很多丰富的类库: android.util 涉及系统底层的辅助类库 android.os 提供了系统服务.消息传输.IPC管道 an ...

  3. 1.android体系结构介绍

    一.Android的介绍 android介绍见百度百科:Android的介绍,度娘把Android介绍的这么清楚,如果谷歌是Android的爹,那度娘就是娘了. 二.Android的架构图 andro ...

  4. 【转】Android bluetooth介绍(三): 蓝牙扫描(scan)设备分析

    原文网址:http://blog.csdn.net/xubin341719/article/details/38584469 关键词:蓝牙blueZ  A2DP.SINK.sink_connect.s ...

  5. 作业Android自我介绍

    ***Android自我介绍***

  6. Android HIDL 介绍学习之客户端调用

    应上一篇文章Android HIDL 介绍学习_Super Jang的博客-CSDN博客_安卓hidl读者的要求,本文更新客户端调用方法. hidl的客户端调用相比服务端的实现要简单很多,本次我们通过 ...

  7. Android开发介绍

    Android开发介绍 这个教程设计是帮助你学习基础的Android开发和快速搭建您的开发环境.这个是在我的Window 7上编写的,当然它也支持Linux(uBuntu).Mac OS其他支持And ...

  8. android 模拟器的使用(Android模拟器介绍及创建)

    做了这么久的android开发,一直想把在开发过程中积累的经验或问题总结一下,可是都没有时间,现在有一点点空闲,所以慢慢把我在android中遇到的问题整理一下写出来,供自己以后参考,也希望和大家一起 ...

  9. Android bluetooth介绍(一):基本概念及硬件接口

    关键词:蓝牙硬件接口 UART  PCM  blueZ  版本:基于android4.2之前版本 bluez 内核:linux/linux3.08 系统:android/android4.1.3.4 ...

最新文章

  1. asp.net实现C#代码加亮显示
  2. Python 还能实现图片去雾?FFA 去雾算法、暗通道去雾算法用起来!(附代码)...
  3. Linux服务器Cache占用过多内存导致系统内存不足问题的排查解决
  4. SET_TABLE_FOR_FIRST_DISPLAY 参数 I_SAVE
  5. moead算法流程步骤_数据聚类(一)常见聚类算法的基本原理[图解]
  6. 关于字节序(大端法、小端法)的定义
  7. LeetCode 389. 找不同(位运算)
  8. MyBatis-Plus_快速入门0222
  9. C#实现 Linq 序列的Distinct—— IEnumerable.Distinct()——IEqualityComparer
  10. 网页Loading,让页面加载完再显示
  11. 微信小程序初体验,入门练手项目--通讯录,后台是阿里云服务器(一)
  12. 管理多个java版本,OS X中使用jEnv管理多个Java版本
  13. 《生活中的魔法数学》读后感
  14. nodejs mysql process_nodeJS之进程process对象
  15. 2019年7月3号第九次练习(27移除元素)
  16. 百度大脑驾驶证识别使用攻略
  17. 【Free5GC】test.sh脚本测试流程
  18. Tableau-可视化操作(五)
  19. c语言程序 出圈游戏,【出圈】 (C语言代码)
  20. Python——星期的字典1——7

热门文章

  1. Uncertainty Modeling and Optimization-不确定性建模与优化-理论篇(高速更新中)
  2. 行业首选|墨菲安全实力入选《开发安全产品及服务购买决策参考》
  3. 【里程碑】牛X的一塌糊涂,不需要目标板额外做任何代码,实时检测RTOS的任务执行情况,支持在线和脱机玩法
  4. Web前端Lec12 - HTTP协议
  5. 基于面部表情的情绪识别-论文学习
  6. 一行代码就可以替换n个仓储文件
  7. POI DataValidation 删除数据有效性验证
  8. Linux下安装USB转串口驱动(PL2303)
  9. 八、CSS基础选择器
  10. 第二集:你真的会吸气吗 ?科学呼吸法(汇播课程演说笔记)