美文网首页
2021-06-25 系统编译常用的make 命令

2021-06-25 系统编译常用的make 命令

作者: fjasmin | 来源:发表于2021-06-25 15:24 被阅读0次

    [Android 源码下相关编译命令及刷机]

    从事Android源码开发,对于Android Build系统下的常用编译命令必须熟悉,现列出常用的一些命令。而关于Android Build系统的详细介绍请参看https://www.ibm.com/developerworks/cn/opensource/os-cn-android-build/

    引用上述链接中的两段话,介绍一下Android Build系统:

    整个 Build 系统中的 Make 文件可以分为三类:

    -[1] Build 系统核心文件,此类文件定义了整个 Build 系统的框架,而其他所有 Make 文件都是在这个框架的基础上编写出来的。
    Build 系统核心文件全部位于 /build/core目录下
    
    -[2] 针对某个产品(一个产品可能是某个型号的手机或者平板电脑)的 Make 文件,这些文件通常位于 device 目录下,该目录下又以公司名以及产品名分为两级目录
    
    -[3] 针对某个模块(关于模块后文会详细讨论)的 Make 文件。整个系统中,包含了大量的模块,每个模块都有一个专门的 Make 文件,这类文件的名称统一为“Android.mk”,该文件中定义了如何编译当前模块。Build 系统会在整个源码树中扫描名称为“Android.mk”的文件并根据其中的内容执行模块的编译。整个 Build 系统的入口文件是源码树根目录下名称为“Makefile”的文件,当在源代码根目录上调用 make 命令时,make 命令首先将读取该文件。Makefile 文件的内容只有一行:“include build/core/main.mk”。该行代码的作用很明显:包含 build/core/main.mk 文件。在 main.mk 文件中又会包含其他的文件,其他文件中又会包含更多的文件,这样就引入了整个 Build 系统。
    

    1、编译整个Android系统:

    
    source build/envsetup.sh          //初始化编译环境,并引入一些辅助的shell函数
    
    lunch  XXX               //编译选项,不同的项目不同
    
    make -j8                //开启8个线程编译,可任选,具体根据编译服务器的核数而定//上述编译后,还需要编译modem,一般需要先切换至modem目录,然后执行相关脚本,不同项目也不同。//需要说明的是,不编译modem或者modem编译失败,并不影响单独模块的编译;但可能会影响到刷机.
    
    

    以下列出envsetup.sh中定义的常用函数,即命令如下:

    名称             说明
    croot          切换到源码树的根目录            
    
    m             在源码树的根目录执行 make
    mm            Build 当前目录下的模块
    mmm           Build 指定目录下的模块
    
    mma            编译当前目录下的模块及其依赖项
    mmma            编译指定目录下的模块及其依赖项
    
    cgrep             在所有 C/C++ 文件上执行 grep
    jgrep             在所有 Java 文件上执行 grep
    resgrep          在所有 res/*.xml 文件上执行 grep
    godir            转到包含某个文件的目录路径
    printconfig      显示当前 Build 的配置信息
    add_lunch_combo    在 lunch 函数的菜单中添加一个条目
    

    2、常用的make 目标:

    make help             显示主要的make目标
    
    make clean             清理,等同于 rm -rf out/
    
    make sdk            编译出 Android 的 SDK。
    
    make clean-sdk         清理 SDK 的编译产物 
    
    make update-api        更新API,    在 framework API 改动之后,需要首先执行该命令来更新 API,公开的 API 记录在frameworks/base/api 目录下
    
    make bootimage         生成boot.img
        
    make recoveryimage     生成recovery.img
    
    make userdataimage     生成userdata.img
    
    make cacheimage        生成cache.img
    
    make systemimage      生成system.img
    

    3、产品的编译类型:、

    
    //若设备还未root,可执行下述两个命令
    adb root        
    adb remount
    
    
    //执行push
    adb push ...    /system/app/Gallery2/
    

    4、单独编译某个模块:

    (1)cd到模块目录(含有Android.mk),然后执行命令:mm

    (2)有些模块调用了系统的一些hide函数,因此需要在根目录下编译:make XXX ; 否则编译不过,例如SystemUI.

    将编译好的模块(也就是apk),push到设备上的步骤如下:以图库模块为例。

    //若设备还未root,可执行下述两个命令
    adb root        
    adb remount
    
    
    //执行push
    adb push ...    /system/app/Gallery2/
    

    相关文章

      网友评论

          本文标题:2021-06-25 系统编译常用的make 命令

          本文链接:https://www.haomeiwen.com/subject/fgloyltx.html