【转】Android source build/envsetup.sh学习笔记

原文网址: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[email protected]$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分钟。

时间: 2024-11-08 19:07:27

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

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

本文原创作者:Cloud Chou. 欢迎转载,请注明出处和本文链接 准备好编译环境后,编译Rom的第一步是 source build/envsetup.sh,该步骤把envsetup.sh里的函数声明为当前会话终端可用的命令.这些命令能让我们切换目录,提交代码,编译Rom更方便.如果记不住所有命令,只要你记住hmm就可以了,也可通过hmm命令看到支持的命令列表. 1. 命令分类: 1.1 编译用的命令 命令名称 使用方式 说明 breakfast 别名bib breakfast [produc

编译android源码报错:build/envsetup.sh: 1: Syntax error:

编译android源码时报错: build/envsetup.sh: 1: Syntax error: "(" unexpected 解决方法: 执行$sudo dpkg-reconfigure dash命令,并选择"否" 编译android源码报错:build/envsetup.sh: 1: Syntax error:

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

我们已经出台SlidingMenu使用:Android开源项目SlidingMenu本学习笔记(一个),接下来再深入学习下.依据滑出项的Menu切换到相应的页面 文件夹结构: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGVuZzB6aGFvdGFp/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" > 点击Bluetooth能够切换到对应的

Android开源项目SlidingMenu的学习笔记(二)

在前面已经介绍了SlidingMenu的用法:Android开源项目SlidingMenu的学习笔记(一),接下来再深入学习下,根据滑出项的Menu切换到对应的页面 目录结构: 点击Bluetooth可以切换到相应的界面 关键代码 MainActivity.java package com.dzt.slidingmenudemo; import android.app.Fragment; import android.app.FragmentManager; import android.app

Android Activity和Intent机制学习笔记

Activity Android中,Activity是所有程序的根本,所有程序的流程都运行在Activity之中,Activity具有自己的生命周期(见http://www.cnblogs.com/feisky/archive/2010/01/01/1637427.html,由系统控制生命周期,程序无法改变,但可以用onSaveInstanceState保存其状态). 对于Activity,关键是其生命周期的把握(如下图),其次就是状态的保存和恢复(onSaveInstanceState onR

【Android适配器系列】BaseAdapter学习笔记

慕客网-Android必学-BaseAdapter的使用与优化-学习笔记 什么是数据适配器 数据适配器是数据源与视图(View)之间的桥梁,建立了两者之间的适配关系.数据的来源是各种各样的,但View能显示的格式却是有一定要求的,数据适配器是把各种各样的数据源转化成为View能显示的数据格式. 优点: 将数据的来源与数据的显示进行了解耦,降低程序的耦合性,提高可扩展性. BaseAdapter是Android各种各样适配器里最通用的适配器. BaseAdapter基本结构 public int

Android 6.0 权限知识学习笔记

最近在项目上因为6.0运行时权限吃了亏,发现之前对运行时权限的理解不足,决定回炉重造,重新学习一下Android Permission. 进入正题: Android权限 在Android系统中,权限分为三种:正常权限.危险权限和特殊权限: 正常权限:不会直接给用户隐私权带来风险.如果您的应用在其清单中列出了正常权限,系统将自动授予该权限. 危险权限:涵盖应用需要涉及用户隐私信息的数据或资源,或者可能对用户存储的数据或其他应用的操作产生影响的区域.例如,能够读取用户的联系人属于危险权限.如果应用声

Android推送进阶课程学习笔记

今天在慕课网学习了Android进阶课程推送的服务器端处理回执的消息 .这集课程主要介绍了,当服务器往客户端推送消息的时候,客户端需要发送一个回执回来确认收到了推送消息才算一次完整的推送过程. 具体的实现方法为服务器推送一个消息到客户端的时候,会生成一个相应的uuid标识这个消息,并把这个消息以及uuid存储到数据库中,客户端收到消息后,取出其中的uuid并将这个uuid发给服务器端,服务端收到这个uuid,根据uuid到数据库里删除了对应的消息记录,整个推送算完成.这里先贴出比较核心的发送代码

android多层树形结构列表学习笔记

android中既有组件只有 expandlistview来实现二级的分级目录,但是如果是任意级的分级目录呢?今天看到了一个DEMO,学习一下~ 一.filebean类 simpleadapter的数据源的数据单元(需转化为nodes),包含以下三个属性和构造函数 private int _id; private int parentId; private String name; private long length; public FileBean(int _id, int parentI