android mm 到底执行了什么?
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 到底执行了什么?相关推荐
- 将Android进行到底之Dagger2(一)
系列文章目录 将Android进行到底之Dagger2(二) 将Android进行到底之Dagger2(三) 文章目录 系列文章目录 前言 一.什么是依赖注入? 二.IOC与Dagger2 1.IOC ...
- Android mm编译
源码编译过程: 1.先执行 . build/envsetup.sh 2.再执行 lunch 3.执行make make otapackage -j6 Android mm编译 android下m.mm ...
- android sql 顺序执行问题,怎么才能执行第一个完毕,才能继续执行第二个
有这样一个需求 Android界面在执行操作B之前必须要取从数据库取一个值判断(操作A)是否能进行下一步B操作 如果取的A取值符合要求则继续执行操作B 如果A不符合则不能执行B 怎么控制啊 事务是异步 ...
- 使用Java让android手机自动执行重复重启
使用Java让android手机自动执行重复重启 public static void main(String[] args)throws IOException,Exception { for(in ...
- 【错误记录】记录 Android 命令行执行 Java 程序中出现的错误 ( dx 打包 PC 可执行文件报错 | dalvik 命令执行 kotlin 编译的 dex 文件报错 )
文章目录 前言 一.Android 命令行与 PC 可执行 JAR 文件不兼容 二.Android 命令行使用 dalvik 命令不能直接执行 Kotlin 编译的 dex 文件 前言 尝试在 And ...
- Android 系统到底提供了哪些东西,供我们可以开发出优秀的应用程序(文末送书)
Android 系统到底提供了哪些东西,供我们可以开发出优秀的应用程序. 作者:坚果 公众号:"大前端之旅" 华为云享专家,InfoQ签约作者,阿里云专家博主,51CTO博客首席体 ...
- Android 系统(242)---Android init.rc执行顺序
Android init.rc执行顺序 1. 所有的action运行于service之前 2. 下面为各个section的执行顺序,英文编号的section是系统内建的(写死在init.c中的命令) ...
- QAbstractTableModel中的data()到底执行几遍???
有一个问题:QAbstractTableModel中的data()函数到底执行几遍??? 发现问题的过程 1.一个普通的继承 QAbstractTableModel 的类 class Currenc ...
- android游戏基址,Android上可执行ELF文件中的段不能有基址
Android上可执行ELF文件中的段不能有基址 @(Android研究)[android] [TOC] 场景 我使用Android NDK的编译工具交叉编译qemu项目(编译可在Android上运行 ...
最新文章
- hadoop启动_Mac OS X 上搭建 Hadoop 开发环境指南
- 收藏 | 卷积神经网络 C++ 从零开始实现
- 子网地址,广播地址,子网掩码,主机地址范围,求法总结
- C++ - const 与 迭代器(iterator) 使用 详解
- java 静态初始化 调用_java JVM-类加载静态初始化块调用顺序
- Java内部类作用全解
- 洛谷P1373 小a和uim之大逃离 动态规划
- TensorFlow Hub介绍:TensorFlow中可重用的机器学习模块库
- 生活在别处——“Samsung Cloud Print”云打印体验
- 【BZOJ4518】征途,斜率优化DP
- python正则化_Python正则表达式
- 【演化计算】【论文研读】Completely Automated CNN Architecture Design Based on Blocks
- Linux环境SOCKET编程1:套接字
- 类库、委托、is/as
- MACOS,应用签名后就崩溃?
- 博图编写温度程序_数字式温度控制器程序设计
- pdf 分形 张济忠_分形理论及其研究方法.pdf
- 操作系统——7.虚拟存储技术
- 英特尔凌动处理器_教你看懂英特尔处理器:什么是Core i3,i5,i7 和Pentium?
- win10提高开机速度只需要5步
热门文章
- 【渝粤题库】广东开放大学 秘书实务21 形成性考核
- SAP ABAP PARAMETERS
- 《惢客创业日记》2021.02.15-16(周一)什么是理想主义者?
- 拉普拉斯变换-常微分方程
- 免费国际域名动态IP捆绑
- Idea的常见插件和快捷键
- 如何查看.dat文件内容
- easyui-combobox的使用
- 有主机出现报警“刷新硬件 IPMI 系统事件日志”出现常规性系统错误“Retrleve IPMI DEL request to host failed,事件中有很多相关报警
- springboot定时任务中异常处理方案