编译系统Makefile

Android平台的编译系统,其实就是用Makefile写出来的一个独立项目。它定义了编译的规则,实现了“自动化编译”,不仅把分散在数百个Git库中的代码整合起来、统一编译, 而且还把产物分门别类地输出到一个目录,打包成手机ROM,还可以生成应用开发时所使用的SDK、NDK等。
因此,采用Makefile编写的编译系统,也可以称为Makefile编译系统。

相关概念

Android.mk、Ninja、Soong、Blueprint、kati、Android.bp的概念之间的联系为:

  • Android.mk
    Makefile编译系统的一部分,定义了一个模块的必要参数,使模块随着平台编译。通俗来讲就是告诉编译系统,以什么样的规则编译你的源代码,并生成对应的目标文件。

  • Ninja
    Ninja是一个致力于速度的小型编译系统,如果把其他的编译系统看作高级语言,那么Ninja 目标就是汇编。

  • Soong
    Soong是谷歌用来替代此前的Makefile编译系统的替代品,负责解析Android.bp文件,并将之转换为Ninja文件

  • Blueprint
    Blueprint用来解析Android.bp文件翻译成Ninja语法文件。

  • kati
    kati是谷歌专门为了Android而开发的一个小项目,基于Golang和C++。 目的是把Android中的Makefile,转换成Ninja文件。

  • Android.bp
    Android.bp,是用来替换Android.mk的配置文件。

源码整编

  • 初始化环境:source build/envsetup.sh
  • 选择编译目标:lunch

编译目标的格式组成为BUILD-BUILDTYPE,比如aosp_arm-eng的BUILD为aosp_arm,BUILDTYPE为eng。

BUILD表示编译出的镜像可以运行在什么环境,aosp代表Android开源项目,arm表示系统是运行在arm架构的处理器上。
BUILDTYPE 指的是编译类型,有以下三种:
user:用来正式发布到市场的版本,权限受限,如没有 root 权限,不能 dedug,adb默认处于停用状态。
userdebug:在user版本的基础上开放了 root 权限和 debug 权限,adb默认处于启用状态。一般用于调试真机。
eng:开发工程师的版本,拥有最大的权限(root等),具有额外调试工具的开发配置。一般用于模拟器。

如果你没有Nexus设备,只想编译完后运行在模拟器查看,那么BUILD可以选择aosp_x86,BUILDTYPE选择eng

  • 编译命令
    mm:编译当前目录下的模块,不编译它所依赖的其它模块。
    mma:编译当前目录下的模块及其依赖项。
    mmm:编译指定目录下的模块,不编译它所依赖的其它模块。
    mmma:编译指定路径下所有模块,并且包含依赖。

make clobber和make clean —> rm -rf out/
make systemimage和make snod

  • 生成镜像

system.img:系统镜像,里面包含了Android系统主要的目录和文件,通过init.c进行解析并mount挂载到/system目录下。
userdata.img:用户镜像,是Android系统中存放用户数据的,通过init.c进行解析并mount挂载到/data目录下。
ramdisk.img:根文件系统镜像,包含一些启动Android系统的重要文件,比如init.rc。

相关参考

http://liuwangshu.cn/framework/aosp/3-compiling-aosp.html

Android编译系统Makefile相关推荐

  1. 【转载】Android编译系统Makefile(Android.mk)写法

    声明:本文转载自http://www.cnblogs.com/hesiming/archive/2011/03/15/1984444.html 版权和最终解释权给原作者所有,谢谢. android编译 ...

  2. 【Android.mk】android编译系统makefile文件Android.mk的写法

    (1)Android.mk文件首先需要指定LOCAL_PATH变量,用于查找源文件.由于一般情况下 Android.mk和需要编译的源文件在同一目录下,所以定义成如下形式: LOCAL_PATH:=$ ...

  3. android编译系统学习 .

    android的编译文件主要依赖于mk文件,其源码编译名字是Android.mk,而不我们常见的Makefile文件. android目录下的Makefile文件,include了build/core ...

  4. 深入浅出 - Android系统移植与平台开发(十)- Android编译系统与定制Android平台系统(瘋耔修改篇二)...

    第四章.Android编译系统与定制Android平台系统 4.1Android编译系统 Android的源码由几十万个文件构成,这些文件之间有的相互依赖,有的又相互独立,它们按功能或类型又被放到不同 ...

  5. Android编译系统入门(二)

    Android.mk的使用方法 在上一篇Android编译系统入门(一)中我们只要介绍了Android系统使用make命令默认编译的依赖树是droid,而droid是一个伪目标,它有两个先决条件dro ...

  6. Android编译系统简要介绍和学习计划

    在Android源码环境中,我们开发好一个模块后,再写一个Android.mk文件,就可通过m/mm/mmm/make等命令进行编译.此外,通过make命令还可制作各种系统镜像文件,例如system. ...

  7. Android系统(138)--- Android编译系统

    android编译系统分析 1:source build/envsetup.sh与lunch 虽然已经有很多人分析过android的编译系统的代码了,我也看过他们的博客,也学到了不少知识,但单纯的看别 ...

  8. Android编译默认英语,Android 编译系统 (一)

    1.Makefile & Android build system 在进行讲述Android编译系统之前,应该先了解一下编译时所使用的Makefile,或者说复习下这方面的知识,这样才能更好的 ...

  9. android.bp 编译,Android编译系统中的Android.bp

    Android.bp,是用来替换Android.mk的配置文件. 它使用Blueprint框架来解析,最终转换成Ninja文件. 与Android.mk不同的是,Android.bp是纯粹的配置文件, ...

最新文章

  1. 【opencv】7. cv::VideoWriter的使用,把图片写进video
  2. Bug接口地址找不到
  3. Excel2007数据透视表学习(四)改变数据透视表布局
  4. vue将经纬度转换成地理名称_新武汉北,红安有了一个新的地理名称,恒大项目将对标上海迪士尼...
  5. 通过filebeat、logstash、rsyslog采集nginx日志的几种方式
  6. 百度C2C对决淘宝的两把利器
  7. LeetCode之同构字符串
  8. HDU 4919 打表找规律 java睑板 map 递归
  9. 高质量图片缩略图生成(编程笔记)
  10. 高性能mysql之慎用BLOB与TEXT
  11. Python福彩3D单选单复式排列计算器
  12. 矩阵的秩(Rank)
  13. rufus linux 教程,图文回复rufus使用教程【操作步骤】
  14. 568A和568B的线序
  15. ASP.NET(C#)对接国际验证码接口DEMO示例
  16. Java实现HighCharts纯后台图表生成
  17. 大物复习整理(自用)
  18. 做领导要会说话!高情商的18个说话技巧,受益无穷!
  19. 51nod 1479 小Y的数论题
  20. 数学建模拿到题目时思路

热门文章

  1. 实现Dart版本对象存储(COS)插件
  2. linux namp使用教程,nmap教程之nmap命令使用示例(nmap使用方法)
  3. 马化腾确认微信推出公众号付费阅读功能
  4. 用css画圆的长度固定的1/4边
  5. 蓝桥秘密冲刺计划(10.3)史丰收速算
  6. wav格式怎么转换?介绍三个转换wav格式的方法
  7. 用python分析HTTP请求中各过程用时情况(通过分析抓包文件pcap实现)
  8. cygwin下面编译proxmark3(at 2015.09.09)
  9. php 路由实现_php实现路由接口 | ZJINH-Blog
  10. prefetch 和preload_Preload和Prefetch以及前端项目中的配置