原文网址:http://blog.csdn.net/mliubing2532/article/details/7567164

如果你只需要修改某一个模块的内容,但是却每次都要执行make, 最后等待很长时间。使用模块编译,那只需要在你所在的模块的目录或者其子目录,执行mm,便可以编译出一个单独的apk,这样岂不快哉!

build/envsetup.sh提供了几个有用的shell命令,使用$.build/envsetup.sh(注意点号)或者$sourcebuild/envsetup.sh
可以引入到shell环境中。下面整理并简述。特别,envsetup.sh还同时会引入vendor/和device /目录下的vendorsetup.sh脚本。
命令-也就是envsetup.sh中的函数

function help()                   # 显示帮助信息
function get_abs_build_var()           # 获取绝对变量
function get_build_var()              # 获取绝对变量
function check_product()             # 检查product
function check_variant()              # 检查变量
function setpaths()                # 设置文件路径
function printconfig()               # 打印配置
function set_stuff_for_environment()        # 设置环境变量
function set_sequence_number()          # 设置序号
function settitle()                  # 设置标题
function choosetype()               # 设置type
function chooseproduct()              # 设置product
function choosevariant()               # 设置variant
function tapas()                    # 功能同choosecombo
function choosecombo()             # 设置编译参数
function add_lunch_combo()           # 添加lunch项目
function print_lunch_menu()           # 打印lunch列表
function lunch()                  # 配置lunch
function m()     #make from top                    相当于在ics/下执行make,编译整个Android源码
function findmakefile()              # 查找makefile
function mm()    #make from current directory     编译当前目录
function mmm()  #make the supplied directories   从提供的路径开始编译
function croot()                 # 回到根目录
function cproj()                                                                    #改变当前路径到最近的还有Android.mk文件的祖父辈路径。
function pid()
function systemstack()
function gdbclient()
function jgrep()                 #查找java文件
function cgrep()                  #查找c/cpp文件
function resgrep()
function tracedmdump()
function runhat()
function getbugreports()
function startviewserver()
function stopviewserver()
function isviewserverstarted()
function smoketest()
function runtest()
function godir ()                  # 跳到指定目录

1 、 三个m的含义:

以下是在help中看到的信息

- m:       Makes from the top of the tree.
- mm:      Builds all of the modules in the current directory.
- mmm:     Builds all of the modules in the supplied directories.

m,显然是make

mm ,在编译单一模块的时候可以在当前目录下使用,如果当前路径是代码树顶层,则mm相当于make。如果是深层,测mm相当于ONE_SHOT_MAKEFILE=$M make -C $T files$@$M是findmakefile发现的Android.mk,$T是代码树顶层路径,files是main.mk中定义的phony goal,就是完成$M对应目录范围内,所有android需编译的modules以及辅助说明txt文件。

mmm 可以在android目录下使用,给定package的路径,则mm会make相应的package。

例如,mmm package/apps/Calculator
 
croot
改变当前路径到代码树顶层。

cproj

改变当前路径到最近的还有Android.mk文件的祖父辈路径。

pid

使用adb shell ps命令列出手机上指定名字的进程的pid。
Usage:
       pid <YourName>

具体步骤: 
        1)打开~/.baserc文件,加入source ~/I850/build/envsetup.sh. 加入你自己该文件所在的路径,

这样就免去了每次启动新的终端执行mm命令之前,需要引用此文件(这步很重要,一定要添加到用户环境变量当中)。

2)完成步骤1之后,就可以在你的模块里面随意执行mm了,要想使用其他快速命令,可以查看envsetup.sh文件,比如cgrep,jgrep,resgrep在不同类型的文件里面进行相应的查询。还有m,mmm等等

3)还可以使用adb push 将你的apk push到模拟器或者手机终端,也可以在工程根目录通过make -snod生成新的system.img

2、   修改APK应用:在packages中的应用如果修改后都可以单独编译。先执行 
$. build/envsetup.sh #初始化
$mmm packages/providers/ContactsProvider/
##用mm/mmm来编译生成的.apk并不会打包到system.img中,需要我们手动通过make snod把system文件夹打包为system.img
##可以使用make snod将模块打包到system.img中,也可以使用 adb install *.apk安装
注:通过mmm packages/providers/ContactsProvider/ 编译后的apk在 out/target/product/generic/system/app
这时候通过 adb install out/target/product/generic/system/app/xxx.apk 安装你刚修改过的apk就可以在模拟器上看到你修改的效果了。

adb push方式进去:

adb shell mount -o rw,remount -t ext3 /dev/block/mmcblk0p2 /system   挂载并获取写入权限
adb push xxx.apk /system/app

3、修改framework:如果在Contacts.java中修改了,必须重新编译下framework。先执行 
$ . build/envsetup.sh #初始化
#网上有的说要执行 make update-api,实际上直接make PRODUCT-sdk-sdk就可以将修改后的framework编译到sdk中。 #编译framework后,那些修改了的应用可以不用再单独编译了。4~6分钟
$ make PRODUCT-sdk-sdk #重新生成SDK 10~20分钟。

【转】Android source build/envsetup.sh学习笔记的更多相关文章

  1. Android编译执行envsetup.sh,产生工具命令m、mm、mmm、mmma、tapas 、croot、cgrep、jgrep、 resgrep、godir

    一般来说编译一个sdk或者一个比较大的工程项目,第一步都是执行 envsetup.sh这个脚本,比如编译android,qt源码以及其他一些嵌入式的sdk. 而且执行的时候需要特别注意使用 sourc ...

  2. 【转】Android编译系统详解(一)——build/envsetup.sh

    出处 http://www.cloudchou.com/android/post-134.html 本文原创作者:Cloud Chou. 欢迎转载,请注明出处和本文链接 准备好编译环境后,编译Rom的 ...

  3. build/envsetup.sh内lunch解析

    ........ # 测试device是否存在且是一个目录 并且 只查找device目录4层以上的子目录,名字为vendorsetup.sh 并且 将命令执行的错误报告直接送往回收站 不显示在屏幕上 ...

  4. build/envsetup.sh 生成的命令详解表

    参考: https://wiki.cyanogenmod.org/w/Envsetup_help 它是一个.sh文件,用source后就生成android编译相关函数,具体如下. 速查 Invokin ...

  5. build/envsetup.sh中hmm、get_abs_build_var、get_build_var解析

    function hmm() { # 打印帮助信息 cat <<EOF Invoke ". build/envsetup.sh" from your shell to ...

  6. Android开源项目SlidingMenu本学习笔记(两)

    我们已经出台SlidingMenu使用:Android开源项目SlidingMenu本学习笔记(一个),接下来再深入学习下.依据滑出项的Menu切换到相应的页面 文件夹结构: watermark/2/ ...

  7. 【Android】在build/envsetup.sh中添加自己的命令(函数)

    由于测试的需要,经常需要手动刷入boot.img和system.img,把它写到envsetup.sh就可以每次使用一行命令来代替了: function flashtestimage(){ if [[ ...

  8. Android程序员的Flutter学习笔记

    作为忠实与较资深的Android汪, 最近抽出了一些时间研究了一下Google的亲儿子Flutter, 尚属皮毛, 只能算是个简单的记录吧. Google自2017年第一次提出Flutter, 到20 ...

  9. [转载]Android 编译环境 build/envsetup.sh分析

    2013-12-23 11:28:40 转载自: http://blog.csdn.net/evilcode/article/details/7005757 请到转载地址阅读原文, 转载以备查询.

随机推荐

  1. iOS 简单理解类的本质

    1.类也是个对象 类是一个对象是Class类型的对象简称类对象 Class类型的定义 // 一个任意的类型,表示一个Objective-C类 typedef struct objc_class *Cl ...

  2. mysql常见的hint(转载的)

    mysql常用的hint对于经常使用oracle的朋友可能知道,oracle的hint功能种类很多,对于优化sql语句提供了很多方法.同样,在mysql里,也有类似的hint功能.下面介绍一些常用的. ...

  3. platform_driver_register()--如何match之后调用probe

    int platform_driver_register(struct platform_driver *drv) { drv->driver.bus = &platform_bus_t ...

  4. C语言之指针

    以32为系统为例. 1.指针与地址指针是一种变量,保存了所指向对象的地址.1.1 定义int i = 10;int *p = &i; //定义了一个指针p,它指向一个int型的变量&是 ...

  5. Mysql,Oracle,Java数据类型对应

    Mysql Oracle Java BIGINT NUMBER(19,0) java.lang.Long BIT RAW byte[] BLOB BLOB RAW byte[] CHAR CHAR j ...

  6. appfabric 简单应用

    http://msdn.microsoft.com/en-us/library/ee790941(v=azure.10).aspx Preparing the Visual Studio Projec ...

  7. @Transient注解

    以下两个包都包含@Transient注解 java.beans.Transient; javax.persistence.Transient; 使用@Transient时注意区别二者

  8. delphi xe5 android listbox的 TMetropolisUIListBoxItem

    listbox实现以下效果: \ 关键代码,采用数据集的方式 type PpatientData=^RpatientData; RpatientData= record patient_id:stri ...

  9. white-space 属性设置如何处理元素内的空白

    定义和用法white-space 属性设置如何处理元素内的空白. 这个属性声明建立布局过程中如何处理元素中的空白符.值 pre-wrap 和 pre-line 是 CSS 2.1 中新增的. 默认值: ...

  10. oracle数据库的建表,删除字段,添加字段,修改字段,修改字段......

    1. 使用oracle创建一张表: SQL> create table loginuser( id ,), username ), password ), email ), descriable ...