zoukankan      html  css  js  c++  java
  • 【转】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$@$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分钟。

  • 相关阅读:
    1697 ⑨要写信
    1220 数字三角形
    4979 数塔
    bzoj1618[Usaco2008 Nov]Buying Hay 购买干草
    bzoj1066[SCOI2007]蜥蜴
    bzoj1008[HNOI2008]越狱
    cf437D The Child and Zoo
    cf437C The Child and Toy
    cf437B The Child and Set
    cf437A The Child and Homework
  • 原文地址:https://www.cnblogs.com/wi100sh/p/4308713.html
Copyright © 2011-2022 走看看