android mm 到底执行了什么?
----------------------------------------
author: hjjdebug
date:   2015年 05月 08日 星期五 16:10:39 CST
email:  hejinjing@tom.com
----------------------------------------
付实例介绍, 查看注释可以明白到底发生了什么。
mm()
if [ -f build/core/envsetup.mk -a -f Makefile ]; then
        make $@;
    else
        T=$(gettop);                # 获取顶层目录
        local M=$(findmakefile);    # 获取Android.mk 目录
        local MODULES=;
        local GET_INSTALL_PATH=;
        local ARGS=;
        local M=`echo $M|sed 's:'$T'/::'`;  # 去除顶层目录,成相对路径
        if [ ! "$T" ]; then
            echo "Couldn't locate the top of the tree.  Try setting TOP.";
        else
            if [ ! "$M" ]; then
                echo "Couldn't locate a makefile from the current directory.";
            else
                for ARG in $@;
                do
                    case $ARG in
                        GET-INSTALL-PATH)
                            GET_INSTALL_PATH=$ARG
                        ;;
                    esac;
                done;
                if [ -n "$GET_INSTALL_PATH" ]; then
                    MODULES=;
                    ARGS=GET-INSTALL-PATH;
                else
                    MODULES=all_modules;    #  MODULES 赋值 all_modules
                    ARGS=$@;
                fi;                # 进入顶层目录,指明makefile, 指明目标及参数
                ONE_SHOT_MAKEFILE=$M make -C $T -f build/core/main.mk $MODULES $ARGS;
            fi;
        fi;
    fi
}

经注释, mm 秘密荡然无存。与自己知识融为一体。

另外: ONE_SHOT_MAKEFILE 专为mm 定义,进一步搜索本目录下编译的模块列表,具体看代码。

mmm 命令可以单独指明一个模块名称。这里不详述了。

gettop ()
{
    local TOPFILE=build/core/envsetup.mk;
    if [ -n "$TOP" -a -f "$TOP/$TOPFILE" ]; then   #条件一般不满足,会走下面else
        echo $TOP;
    else
        if [ -f $TOPFILE ]; then
            PWD= /bin/pwd;
        else
            local HERE=$PWD;        # 取到原始目录
            T=;
            while [ \( ! \( -f $TOPFILE \) \) -a \( $PWD != "/" \) ]; do
                \cd ..;                # 不满足条件,退一级目录
                T=`PWD= /bin/pwd`;    # T 保留当前路径
            done;
            \cd $HERE;                # 重回原始目录
            if [ -f "$T/$TOPFILE" ]; then
                echo $T;            # 打印顶层目录
            fi;
        fi;
    fi
}

例如:
在 ~/myandroid/system/media/camera/src 下执行 gettop, 打印 /home/hjj/myandroid

findmakefile ()
{
    TOPFILE=build/core/envsetup.mk;
    local HERE=$PWD;
    T=;
    while [ \( ! \( -f $TOPFILE \) \) -a \( $PWD != "/" \) ]; do
        T=`PWD= /bin/pwd`;
        if [ -f "$T/Android.mk" ]; then
            echo $T/Android.mk;            # 找到了Android.mk 就打印,返回
            \cd $HERE;
            return;
        fi;
        \cd ..;                # 未到顶层则退一级
    done;
    \cd $HERE
}

在 ~/myandroid/system/media/camera/src 下执行 gettop, 输出
/home/hjj/myandroid/system/media/camera/src/Android.mk

另外还有一个问题, 我想显示出具体编译的命令,应该怎么做。

找啊找,终于找到你了。 showcommands

例如: mm showcommands

将显示完整编译命令。

android mm 到底执行了什么?相关推荐

  1. 将Android进行到底之Dagger2(一)

    系列文章目录 将Android进行到底之Dagger2(二) 将Android进行到底之Dagger2(三) 文章目录 系列文章目录 前言 一.什么是依赖注入? 二.IOC与Dagger2 1.IOC ...

  2. Android mm编译

    源码编译过程: 1.先执行 . build/envsetup.sh 2.再执行 lunch 3.执行make make otapackage -j6 Android mm编译 android下m.mm ...

  3. android sql 顺序执行问题,怎么才能执行第一个完毕,才能继续执行第二个

    有这样一个需求 Android界面在执行操作B之前必须要取从数据库取一个值判断(操作A)是否能进行下一步B操作 如果取的A取值符合要求则继续执行操作B 如果A不符合则不能执行B 怎么控制啊 事务是异步 ...

  4. 使用Java让android手机自动执行重复重启

    使用Java让android手机自动执行重复重启 public static void main(String[] args)throws IOException,Exception { for(in ...

  5. 【错误记录】记录 Android 命令行执行 Java 程序中出现的错误 ( dx 打包 PC 可执行文件报错 | dalvik 命令执行 kotlin 编译的 dex 文件报错 )

    文章目录 前言 一.Android 命令行与 PC 可执行 JAR 文件不兼容 二.Android 命令行使用 dalvik 命令不能直接执行 Kotlin 编译的 dex 文件 前言 尝试在 And ...

  6. Android 系统到底提供了哪些东西,供我们可以开发出优秀的应用程序(文末送书)

    Android 系统到底提供了哪些东西,供我们可以开发出优秀的应用程序. 作者:坚果 公众号:"大前端之旅" 华为云享专家,InfoQ签约作者,阿里云专家博主,51CTO博客首席体 ...

  7. Android 系统(242)---Android init.rc执行顺序

    Android init.rc执行顺序 1. 所有的action运行于service之前 2.  下面为各个section的执行顺序,英文编号的section是系统内建的(写死在init.c中的命令) ...

  8. QAbstractTableModel中的data()到底执行几遍???

    有一个问题:QAbstractTableModel中的data()函数到底执行几遍??? 发现问题的过程  1.一个普通的继承 QAbstractTableModel 的类 class Currenc ...

  9. android游戏基址,Android上可执行ELF文件中的段不能有基址

    Android上可执行ELF文件中的段不能有基址 @(Android研究)[android] [TOC] 场景 我使用Android NDK的编译工具交叉编译qemu项目(编译可在Android上运行 ...

最新文章

  1. hadoop启动_Mac OS X 上搭建 Hadoop 开发环境指南
  2. 收藏 | 卷积神经网络 C++ 从零开始实现
  3. 子网地址,广播地址,子网掩码,主机地址范围,求法总结
  4. C++ - const 与 迭代器(iterator) 使用 详解
  5. java 静态初始化 调用_java JVM-类加载静态初始化块调用顺序
  6. Java内部类作用全解
  7. 洛谷P1373 小a和uim之大逃离 动态规划
  8. TensorFlow Hub介绍:TensorFlow中可重用的机器学习模块库
  9. 生活在别处——“Samsung Cloud Print”云打印体验
  10. 【BZOJ4518】征途,斜率优化DP
  11. python正则化_Python正则表达式
  12. 【演化计算】【论文研读】Completely Automated CNN Architecture Design Based on Blocks
  13. Linux环境SOCKET编程1:套接字
  14. 类库、委托、is/as
  15. MACOS,应用签名后就崩溃?
  16. 博图编写温度程序_数字式温度控制器程序设计
  17. pdf 分形 张济忠_分形理论及其研究方法.pdf
  18. 操作系统——7.虚拟存储技术
  19. 英特尔凌动处理器_教你看懂英特尔处理器:什么是Core i3,i5,i7 和Pentium?
  20. win10提高开机速度只需要5步

热门文章

  1. 【渝粤题库】广东开放大学 秘书实务21 形成性考核
  2. SAP ABAP PARAMETERS
  3. 《惢客创业日记》2021.02.15-16(周一)什么是理想主义者?
  4. 拉普拉斯变换-常微分方程
  5. 免费国际域名动态IP捆绑
  6. Idea的常见插件和快捷键
  7. 如何查看.dat文件内容
  8. easyui-combobox的使用
  9. 有主机出现报警“刷新硬件 IPMI 系统事件日志”出现常规性系统错误“Retrleve IPMI DEL request to host failed,事件中有很多相关报警
  10. springboot定时任务中异常处理方案