- 浏览: 133019 次
- 性别:
- 来自: 北京
最新评论
-
scpcyzxb:
[b][*][*][/b]
Java网络编程 -
choclover:
How to get android source code ...
Android:android.git.kernel.org 无法访问时下载源代码的解决方法 -
100432177:
你好 我想问下, 设置闹钟的时候点击 repeat 设置星 ...
关于闹钟源码中是如何设置两个闹钟的问题 -
Jack22:
莫言,也就是你来我这里说句话,别人都是看了就走,不太够意思
设计模式------单例模式 -
莫言_MoYan:
设计模式------单例模式
每次进入到android source目录后的第一件事恐怕就是先执行. build/envsetup.sh,完成一些命令的初始化,今天主要分析envsetup.sh。
1. 命令-也就是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
function findmakefile() # 查找makefile
function mm() # make from current directory
function mmm() # make the supplied directories
function croot() # 回到根目录
function cproj()
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 () # 跳到指定目录
# add the default one here
add_lunch_combo generic-eng
# Execute the contents of any vendorsetup.sh files we can find.
for f in `/bin/ls vendor/*/vendorsetup.sh vendor/*/build/vendorsetup.sh 2> /dev/null`
do
echo "including $f"
. $f
done
2. lunch命令
已经有人分析过了,直接搬过来:
http://www.lupaworld.com/home.php?mod=space&uid=131820&do=blog&id=149462
下面是详细解释,好多都没有用到过,看来我的确是个菜鸟
1. build/envsetup.sh
build/envsetup.sh提供了几个有用的shell命令,使用
$. build/envsetup.sh
可以引入到shell环境中。下面整理并简述。特别,envsetup.sh还同时会引入vendor/和device /目录下的vendorsetup.sh脚本。
help
显示帮助,列出提供的命令
get_abs_build_var
列出make脚本中某变量的值,前缀上当前路径。ref dumpvar.mk
使用方法:
get_abs_build_var VAR_NAME
VAR_NAME是需要显示的make脚本中的变量。
例如:
get_abs_build_var TARGET_PRODUCT
返回
<Your Android Root>\<VAR_NAME Value>
get_build_var
列出make脚本中某变量的值。ref dumpvar.mk
Usage:
get_build_var VAR_NAME
VAR_NAME是需要显示的make脚本中的变量。
Return:
<VAR_NAME Value>
Example:
get_abs_build_var TARGET_PRODUCT
check_product
检查指定的TARGET_PRODUCT是否允许,默认的有sim和generic。如果不允许,则输出错误信息,允许则无回显。
Usage:
check_product <YourTargetProduct>
Example:
check_product generic
check_variant
检查variant是否支持,支持则返回0,不支持则返回1。允许的variant列表定义在envsetup.sh中的VARIANT_CHOICES中,默认是user,userdebug,eng。定制android时,可以在VARIANT_CHOICES中添加vairant。
Usage:
check_variant <YourVariant>
Example:
check_variant eng
setpaths
奇次执行时,将ANDROID_BUILD_PATHS路径加到PATH中。偶次执行时,将ANDROID_BUILD_PATHS路径从PATH中去除。ANDROID_BUILD_PATHS包括android编译中要使用到的路径,例如ANDROID_EABI_TOOLCHAIN,ANDROID_TOOLCHAIN,ANDROID_QTOOLS,ANDROID_JAVA_TOOLCHAIN,ANDROID_PRODUCT_OUT等等。
Usage:
setpaths
printconfig
输出类似如下形势的配置信息。
============================================
PLATFORM_VERSION_CODENAME=AOSP
PLATFORM_VERSION=AOSP
TARGET_PRODUCT=generic
TARGET_BUILD_VARIANT=eng
TARGET_SIMULATOR=
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=OPENMASTER
============================================
set_stuff_for_environment
依次调用settitle, set_java_home,setpaths,set_sequence_number。设置android编译需要的环境变量。
set_sequence_number
输出环境变量BUILD_ENV_SEQUENCE_NUMBER。
settitle
设置shell的prompt提示,PROMPT_COMMAND中加入TARGET_PRODUCT,TARGET_BUILD_VARIANT,和TARGET_BUILD_APPS等信息提示。
choosesim
配置环境变量TARGET_SIMULATOR。linux下会提示用户选择device或simulator。然后调用set_stuff_for_environment设置。
choosetype
配置环境变量TARGET_BUILD_TYPE_SIMULATOR。会提示用户选择release或debug。然后调用set_stuff_for_environment设置。
chooseproduct
配置环境变量TARGET_PRODUCT。会提示用户选择release或debug。然后调用set_stuff_for_environment设置。
choosevariant
配置环境变量TARGET_BUILD_VARIANT。会提示用户选择release或debug。
choosecombo
依次调用choosesim,choosetype,chooseproduct,choosevariant,set_stuff_for_environment配置,然后调用printconfig输出。
add_lunch_combo
向环境变量LUNCH_MENU_CHOICES标识的列表中添加项。envsetup.sh中默认添加了full-eng,full_x86-eng,和simulator。
print_lunch_menu
列出LUNCH_MENU_CHOICES中的所有选项。
lunch
点菜,用户选择/指定product,variant后,lunch命令设置环境变量TARGET_PRODUCT,TARGET_BUILD_VARIANT,TARGET_SIMULATOR,TARGET_BUILD_TYPE,随后调用set_stuff_for_environment设置,并printconfig显示。
Usage:
lunch [<YourProduct>-<YourBuildVariant>]
不给参数时,将提示用户选择。
Example:
lunch
lunch generic-eng
tapas
用户给定variant和一个或多个app name,就是LOCAL_PACKAGE_NAME的名字。tapas设定
export TARGET_PRODUCT=generic
export TARGET_BUILD_VARIANT=$variant
export TARGET_SIMULATOR=false
export TARGET_BUILD_TYPE=release
export TARGET_BUILD_APPS=$apps
Usage:
tapas <YourVariant>? <YourAppName>*
?代表可选,*代表0个,1个或多个。YourVariant 和YourAppName的次序可颠倒。
Example:
tapas user Calculator Calender
gettop
返回当前android代码树的顶层路径。前提是当前路径位于android代码树中。
m
等价于在当前android代码树的顶层路径下执行make命令。
findmakefile
查找当前或最接近自己的祖辈路径上的Android.mk,返回Android.mk的路径,假设当前路径处于android代码树中。
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
给定package的路径,则mm会make相应的package。
例如,
mmm package/apps/Calculator
croot
改变当前路径到代码树顶层。
cproj
改变当前路径到最近的还有Android.mk文件的祖父辈路径。
pid
使用adb shell ps命令列出手机上指定名字的进程的pid。
Usage:
pid <YourName>
systemstack
使用kill -3system_server将系统进程中的线程信息写入/data/anr/traces.txt。
gdbclient
建立gdb调试环境,包括两步,手机上运行gdbserver,本机上运行arm-eabi-gdb。
Usage:
gdbclient <EXE> <PORT> <AppName>
EXE: AppName的执行名。
PORT:gdbserver的端口,例如, 192.168.2.102:5039
AppName:手机中ps列出的app名字,据此查pid。
sgrep
查找当前目录及子目录中所有.c,.h,.cpp,.S,.java,.mk,.xml,.sh文件,即源码文件中包含特定单词的行,并颜色显示输出。
Usage:
sgrep <YourWord>
Example:
sgrep Calendar
jgrep
同sgrep,但只查.java文件。
cgrep
同sgrep,但只查c相关的文件,即.c,.cc,.cpp,.h文件。
resgrep
同sgrep,但只查res相关的.xml文件。
mgrep
同sgrep,但只查make相关的脚本文件,包括Makefile文件,Makefile目录下的所有文件,.make文件,.mak文件和.mk文件。
treegrep
查找当前目录及子目录中所有.c,.h,.cpp,.S,.java,.xml文件,即源码文件中包含特定单词的行,并颜色显示输出。
getprebuilt
输出prebuilt的路径。
tracedmdump
生成dexlist文件qtrace.dexlit,dmtrace数据文件dmtrace,和调用dmtracedump工具生成的dmtrace解析文件dmtrace.html,将生成文件放到指定路径。
Usage:
tracedmdump <YourDirName>
如果YourDirName中不含’\’,则将放置的路径是$ANDROID_PRODUCT_OUT/traces/YourDirName。
runhat
貌似使用kill -10的方法得到heap dump并取到本地。使用hat以http方式展现出来。hat可能是个lightweight http server,不曾用过。
getbugreports
将手机/sdcard/bugreports目录下的文件下载到本地并压缩打包。
startviewserver
用指定端口启动viewserver。
Usage:
startviewserver <Port>
不指定端口,则默认4939。
stopviewserver
关闭viewserver。
isviewserverstarted
检查viewserver是否可用。
smoketest
编译smoketest并安装手机运行。
runtest
运行development/testrunner/runtest.py $@
godir
给出一个词,godir会输出一个路径列表供用户选择要进入的路径。路径列表包含的路径满足,路径名中包含这个词,或这路径下的文件有文件名含这个词。out/路径下不考虑。
Usage:
godir <YourKey>
Usage:
godir Calculator
set_java_home
设置JAVA_HOME环境变量为/usr/lib/jvm/java-6-sun。
发表评论
-
Android程序运行时权限与文件系统权限的区别
2012-07-05 16:41 1555要区分apk运行时的拥有的权限与在文件系统上被访问(读写 ... -
Android中如何修改系统时间(应用程序获得系统权限)
2012-07-05 16:39 1262在 android 的API中有提供 SystemClo ... -
Android模拟器的一些问题
2011-12-08 10:10 1718最近在公司开发一款4.0手机,苦于新的板子没有到货,只好 ... -
Android 对话框(Dialog)大全 建立你自己的对话框
2011-12-01 14:03 1226Activities提供了一种方便管理的创建、保存、回复 ... -
Android:android.git.kernel.org 无法访问时下载源代码的解决方法
2011-10-21 10:58 9691今天正准备编译Android源码,根据官网的指示,首先应该执行 ... -
ubuntu开发环境下eclipse的alt+/自动补全功能不能用
2011-10-19 14:12 7153在ubuntu系统下,运行eclipse后发现已经用的相当顺手 ... -
android ndk 之Android.mk编写
2011-10-18 15:28 969转载:http://aswang.iteye.com/b ... -
Java网络编程
2011-08-24 10:52 1744Java的基本网络支持 1. InetAddre ... -
在eclipse中导入gingerbread源代码后出现如下build path错误
2011-08-04 13:53 1624Project 'gingerbread' is missin ... -
Android的AVD不能启动模拟器的问题
2011-07-27 12:39 2976这两天把android的SDK更新到3.2 ADT插件更新到 ... -
android的wifi模块中AIDL的通讯
2011-07-26 10:58 1829android系统中的wifi的前端显示在应用Settin ... -
ubuntu 11.04下搭建android开发/编译环境 安装必要工作用软件
2011-07-15 11:14 2646在ubuntu下工作一段时间 ... -
改变Eclipse提示框的黑色背景
2011-07-14 17:56 10714【问题描述】 最新版的Eclipse 3.6跟最新 ... -
Android的logcat用法
2011-07-13 10:35 23537android的logcat详细用法 Android日志系 ... -
android 源代码 debug
2011-07-12 17:56 3493用eclipse + ADT作为android开发工 ... -
Broadcast简介
2011-07-06 20:18 5593在Android中,Broadcast是一种广泛运用的在 ... -
android 遇到的问题 SSID BSSID ESSID
2011-07-05 20:41 2601随着无线技术的普 ... -
Android 中的WiFi学习笔记(转载)
2011-07-04 10:52 8144Android的WiFi 我们通常看到WiFi的守护 ... -
读源码心得
2011-06-28 15:44 6381. XML中变量的命名 : 功能描述_类型 比如alarm ... -
Parcelable
2011-06-28 15:31 1060android提供了一种新的类型:Parcel。本类被用作封装 ...
相关推荐
Android 编译系统是一个复杂的系统,它包括 build/envsetup.sh、Android.mk 和编译脚本三个部分。通过对这些部分的分析,我们可以更好地理解 Android 的编译过程,从而更好地控制编译过程,提高开发效率。
Prerequisites: Make sure gclient is checking out tools necessary to target Android: your .gclient file should contain a line like: ... ./build/android/envsetup.sh Note that this clobbers any previo
rootroot@rootroot-E400:~/wyb/r58_evb_sc5806/lichee$ ./build.sh config Welcome to mkscript setup progress All available chips: 0. sun50iw1p1 1. sun8iw1p1 2. sun8iw3p1 3. sun8iw5p1 4. sun8iw6p1 5...
source build/envsetup.sh lunch qssi-userdebug /lito-userdebug ./build.sh dist -qssi_only -j24 2>&1 | tee build.txt ./build.sh dist -target_only -j24 2>&1 | tee build.txt ./build.sh dist -merge_only -...
RK3588_Android12环境搭建与版本编译下载, 1. 编译依赖库 apt-get install liblz4-tool ...source build/envsetup.sh lunch rk3588_xr-userdebug ./build.sh -AUCKu 3. 输出目录 rockdev\Image-rk3588_xr
编译: 先退回到源码目录:/home/ych/Work/rk3399/fw/proj/firefly-rk3399-Industry source build/envsetup.sh mmm external/i2c-tools-4.1/5.生成工具目录:/home/ych/Work/rk3399/fw/proj/firefly-rk3399-Industry...
先source build/envsetup.sh,在lunch,然后mmm+目录
1. **source build/envsetup.sh**: 这是启动编译环境的第一步,它会执行envsetup.sh脚本,将其中定义的各种命令加载到当前的shell环境中。envsetup.sh包含了多个辅助函数,如`help`用于显示帮助信息,`get_abs_build...
3. 在源码根目录下运行 build/envsetup.sh 或 source build/envsetup.sh。 4. 运行 mmm packages/apps/Launcher2/,继续运行 mkyaffs2image -f out/target/product/generic/system out/target/product/generic/...
首先,`build/envsetup.sh`是Android编译过程中的一个关键脚本,它初始化了编译环境并定义了一系列函数,这些函数用于设置路径、检查产品和变体的合法性,以及执行其他必要的环境配置。例如,`help()`函数提供用户...
我们将重点解析`source build/envsetup.sh`命令及其内部函数,深入理解Android编译过程中的关键步骤。 #### 二、`source build/envsetup.sh`命令详解 `source build/envsetup.sh`命令是Android构建环境设置的重要...
`envsetup.mk`则根据`envsetup.sh`设置的环境变量来配置编译路径。`product`和`board`配置分别处理产品特性和硬件平台特性,如APK的包含与硬件功能的支持。`combo`文件定义了不同主机和目标平台的编译器和编译选项...
我们可以使用以下命令编译zlib和openssl:`$source build/envsetup.sh` `$mmm -B external/zlib` `$mmm -B external/openssl` 之后,我们可以编译OpenSSH模块:`$mmm -B external/openssh` 编译完成后,将生成以下...
$ build/envsetup.sh $ makects ``` 3. 此时,编译过程会生成测试计划、测试包、测试用例以及测试报告等目录。 - **2.1.3 32位系统步骤** 对于32位系统,需要进行额外的配置才能成功编译CTS: 1. 安装...
而`build/core/envsetup.mk`则主要处理由`envsetup.sh`脚本设置的环境变量,这些变量用于配置编译过程中的输出目录。 在产品设定的读取阶段,`build/core/product_config.mk`调用`build/core/product.mk`中的`get-...
1. 运行 build/envsetup.sh 或 source build/envsetup.sh,以便加载环境变量。 2. 运行 mmm packages/apps/Launcher2/,以便编译 Launcher2 应用程序。 3. 运行 mkyaffs2image -f out/target/product/generic/system...
source build/envsetup.sh lunch i8320-eng make -j2 # 或者 make -j2 PRODUCT-i8320-eng ``` 此外,你可能还需要编译和安装TI的Android SGX SDK,以支持图形硬件加速。这需要下载并运行安装脚本,然后根据生成的...
2. 设置环境变量:`source build/envsetup.sh` 3. 执行编译命令:`mmm external/iperf-2.0.4` #### 七、目标文件位置 编译完成后,在以下目录中可以找到编译生成的iperf文件: - `Android_root/build/out/target/...
`build/envsetup.sh`包含了环境设置的相关函数,它帮助设置编译所需的环境变量,并且可以与`envsetup.mk`协同工作。 七、版本管理 版本信息在`version_defaults.mk`中定义,包括平台版本、SDK版本等,这对于保持...