IT开发者百科  > 所属分类  >  开发环境   
[1] 评论[0] 编辑

Android source build/envsetup.sh学习笔记

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


build/envsetup.sh提供了几个有用的shell命令,使用$.build/envsetup.sh(注意点号)或者$source build/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分钟。

Stay hungry, stay foolish!

附件列表


1

Java-Android手机千人开发交流QQ群:38088312,PHP开发千人高级交流QQ群:50194090,欢迎加入学习!本站为
非赢利站点,挖掘网络资源,分享个人兴趣,如有侵犯您的版权,请联系我们,我们会第一时间删除内容或添加转载出处,敬请谅解!

如果您认为本词条还有待完善,请 编辑

上一篇 Android 开发环境搭建    下一篇 高通平台主动产生dump的方法

标签

暂无标签

同义词

暂无同义词