android8.1 source build/envsetup.sh分析 增加删除lunch
https://blog.csdn.net/weixin_39694445/article/details/84753142
Android 编译过程
1. 初始化参数设置 环境变量
2. 检查环境变量 配置目标环境(导入luncher)
3. 选择lunch 读取目标配置平台信息(分支特性、文件)
4. 清空输出目录
5. 执行编译
6. 打包
source build/envsetup.sh 分析
1. 加载编译命令
- lunch: lunch <product_name>-<build_variant>
- tapas: tapas [<App1> <App2> ...] [arm|x86|mips|armv5|arm64|x86_64|mips64] [eng|userdebug|user]
- croot: Changes directory to the top of the tree.
- m: Makes from the top of the tree.
- mm: Builds all of the modules in the current directory, but not their dependencies.
- mmm: Builds all of the modules in the supplied directories, but not their dependencies.To limit the modules being built use the syntax: mmm dir/:target1,target2.
- mma: Builds all of the modules in the current directory, and their dependencies.
- mmma: Builds all of the modules in the supplied directories, and their dependencies.
- provision: Flash device with all required partitions. Options will be passed on to fastboot.
- cgrep: Greps on all local C/C++ files.
- ggrep: Greps on all local Gradle files.
- jgrep: Greps on all local Java files.
- resgrep: Greps on all local res/*.xml files.
- mangrep: Greps on all local AndroidManifest.xml files.
- mgrep: Greps on all local Makefiles files.
- sepgrep: Greps on all local sepolicy files.
- sgrep: Greps on all local source files.
- godir: Go to the directory containing a file.
执行后是这样的
godv@godv-OptiPlex-7070:~/godv/AOSP/android-8.1.0_r1$ source build/envsetup.sh
including device/asus/fugu/vendorsetup.sh
including device/generic/car/vendorsetup.sh
including device/generic/mini-emulator-arm64/vendorsetup.sh
including device/generic/mini-emulator-armv7-a-neon/vendorsetup.sh
including device/generic/mini-emulator-mips64/vendorsetup.sh
including device/generic/mini-emulator-mips/vendorsetup.sh
including device/generic/mini-emulator-x86_64/vendorsetup.sh
including device/generic/mini-emulator-x86/vendorsetup.sh
including device/generic/uml/vendorsetup.sh
including device/google/dragon/vendorsetup.sh
including device/google/marlin/vendorsetup.sh
including device/google/muskie/vendorsetup.sh
including device/google/taimen/vendorsetup.sh
including device/huawei/angler/vendorsetup.sh
including device/lge/bullhead/vendorsetup.sh
including device/linaro/hikey/vendorsetup.sh
including sdk/bash_completion/adb.bash
2. 加载平台信息
godv@godv-OptiPlex-7070:~/godv/AOSP/android-8.1.0_r1$ lunch You're building on LinuxLunch menu... pick a combo:1. aosp_arm-eng2. aosp_arm64-eng3. aosp_mips-eng4. aosp_mips64-eng5. aosp_x86-eng6. aosp_x86_64-eng7. full_fugu-userdebug8. aosp_fugu-userdebug9. aosp_car_emu_arm-userdebug10. aosp_car_emu_arm64-userdebug11. aosp_car_emu_x86-userdebug12. aosp_car_emu_x86_64-userdebug13. mini_emulator_arm64-userdebug14. m_e_arm-userdebug15. m_e_mips64-eng16. m_e_mips-userdebug17. mini_emulator_x86_64-userdebug18. mini_emulator_x86-userdebug19. uml-userdebug20. aosp_dragon-userdebug21. aosp_dragon-eng22. aosp_marlin-userdebug23. aosp_marlin_svelte-userdebug24. aosp_sailfish-userdebug25. aosp_walleye-userdebug26. aosp_walleye_test-userdebug27. aosp_taimen-userdebug28. aosp_angler-userdebug29. aosp_bullhead-userdebug30. aosp_bullhead_svelte-userdebug31. hikey-userdebug32. hikey960-userdebugWhich would you like? [aosp_arm-eng]
这里打开 build/envsetup.sh 分析 lunch函数 可以发现lunch后面的选择项是由LUNCH_MENU_CHOICES提供的
function lunch()
{local answerif [ "$1" ] ; thenanswer=$1elseprint_lunch_menuecho -n "Which would you like? [aosp_arm-eng] "read answerfilocal selection=if [ -z "$answer" ]thenselection=aosp_arm-engelif (echo -n $answer | grep -q -e "^[0-9][0-9]*$")thenif [ $answer -le ${#LUNCH_MENU_CHOICES[@]} ]thenselection=${LUNCH_MENU_CHOICES[$(($answer-1))]}...
}
LUNCH_MENU_CHOICES 是在add_lunch_combo()中被添加进去的 也就是说add_lunch_combo()就是添加lunch分支
function add_lunch_combo()
{local new_combo=$1local cfor c in ${LUNCH_MENU_CHOICES[@]} ; doif [ "$new_combo" = "$c" ] ; thenreturnfidoneLUNCH_MENU_CHOICES=(${LUNCH_MENU_CHOICES[@]} $new_combo)
}
在执行了 source build/envsetup.sh 后会 including device/asus/fugu/vendorsetup.sh 这些脚本 会发现这些脚本本质上就是调用add_lunch_combo来添加lunch分支的
#
# Copyright 2013 The Android Open Source Project
...add_lunch_combo full_fugu-userdebug
add_lunch_combo aosp_fugu-userdebug
执行lunch 6 OUT_DIR 输出目录
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=8.1.0
TARGET_PRODUCT=aosp_x86_64
TARGET_BUILD_VARIANT=eng
TARGET_BUILD_TYPE=release
TARGET_PLATFORM_VERSION=OPM1
TARGET_BUILD_APPS=
TARGET_ARCH=x86_64
TARGET_ARCH_VARIANT=x86_64
TARGET_CPU_VARIANT=
TARGET_2ND_ARCH=x86
TARGET_2ND_ARCH_VARIANT=x86_64
TARGET_2ND_CPU_VARIANT=
HOST_ARCH=x86_64
HOST_2ND_ARCH=x86
HOST_OS=linux
HOST_OS_EXTRA=Linux-4.15.0-142-generic-x86_64-with-Ubuntu-16.04-xenial
HOST_CROSS_OS=windows
HOST_CROSS_ARCH=x86
HOST_CROSS_2ND_ARCH=x86_64
HOST_BUILD_TYPE=release
BUILD_ID=OPM1.171019.011
OUT_DIR=out
AUX_OS_VARIANT_LIST=
继续执行 export 查看当前环境变量
...
declare -x ANDROID_BUILD_TOP="/home/godv/godv/AOSP/android-8.1.0_r1"
declare -x ANDROID_DEV_SCRIPTS="/home/godv/godv/AOSP/android-8.1.0_r1/development/scripts:/home/godv/godv/AOSP/android-8.1.0_r1/prebuilts/devtools/tools:/home/godv/godv/AOSP/android-8.1.0_r1/external/selinux/prebuilts/bin:/home/godv/godv/AOSP/android-8.1.0_r1/prebuilts/misc/linux-x86/dtc:/home/godv/godv/AOSP/android-8.1.0_r1/prebuilts/misc/linux-x86/libufdt"
declare -x ANDROID_EMULATOR_PREBUILTS="/home/godv/godv/AOSP/android-8.1.0_r1/prebuilts/android-emulator/linux-x86_64"
declare -x ANDROID_HOST_OUT="/home/godv/godv/AOSP/android-8.1.0_r1/out/host/linux-x86"
declare -x ANDROID_HOST_OUT_TESTCASES="/home/godv/godv/AOSP/android-8.1.0_r1/out/host/linux-x86/testcases"
declare -x ANDROID_JAVA_TOOLCHAIN="/usr/lib/jvm/java-8-openjdk-amd64/bin"
declare -x ANDROID_PRE_BUILD_PATHS="/usr/lib/jvm/java-8-openjdk-amd64/bin:"
declare -x ANDROID_PRODUCT_OUT="/home/godv/godv/AOSP/android-8.1.0_r1/out/target/product/generic_x86_64"
...
不同的分支下面有sh中对应的mk 里面配置了不同的命令
android8.1 source build/envsetup.sh分析 增加删除lunch相关推荐
- 【转】Android source build/envsetup.sh学习笔记
原文网址:http://blog.csdn.net/mliubing2532/article/details/7567164 如果你只需要修改某一个模块的内容,但是却每次都要执行make, 最后等待很 ...
- build/envsetup.sh脚本分析
1. Android编译系统分析 编译脚本及系统变量 build/envsetup.sh脚本分析 在编译源代码之前通常需要在android源代码顶层目录执行 . ./build/envsetup.sh ...
- android 编译步骤分析之envsetup.sh
1. cd AP 进入AP目录,如果已经进入到了A目录,可以忽略 2. source build/envsetup.sh 初始编译环境,envsetup.sh里面是一些编译命令 ...
- 编译Android源码(2) ---- envsetup.sh文件分析
在Android源码下载完成后,只需要简单的三个步骤就能把Android编译完成( http://source.android.com/source/building.html): 1.当前目录切换到 ...
- 【Bash百宝箱】Android envsetup.sh及lunch
文章目录 1.envsetup.sh 2.lunch 3.make 在Android开发环境中编译一个目标时,一般要执行下面三行命令: $ . build/envsetup.sh $ lunch &l ...
- 全志a64linux内核编译,全志A64 lichee编译脚本build.sh分析
全志A64 lichee编译脚本build.sh分析 发布时间:2018-08-22 15:58, 浏览次数:269 , 标签: lichee build sh lichee目录下的./build.s ...
- tomcat变量环境脚本setclasspath.sh分析
之所以分析setclasspath.sh脚本,是因为catalina.sh脚本会引用到这个脚本,如果不对其进行分析,之后看catalina.sh脚本就会不知道一些变量没有申明和赋值怎么会跑出来,本篇文 ...
- quick: setup_mac.sh分析
//quick: setup_mac.sh分析 //quick: setup_mac.sh分析 #!/bin/bash //获取并打印根目录QUICK_V3_ROOT DIR="$( cd ...
- iOS开发之Documentation.build/Script-BC552B3A15.sh:
/Users/hbbhao/Library/Developer/Xcode/DerivedData/AWLive-dmbegyhgamayzudqqdentwngdpkr/Build/Intermed ...
最新文章
- python gdbm_GDBM不适用于Python 3.6和anaconda
- Rocksdb 获取当前db内部的有效key个数 (估值)
- SQL2005以上版本派生表更新
- 【计算机网络】数据链路层 : 差错控制 ( 纠错编码 | 海明码 | “海明码“ 原理 | “海明码“ 工作流程 | 确定校验啊位数 | 确定校验码和数据位置 | 求校验码值 | 检错纠错 )★
- 提高Linux效率的30个命令行常用快捷键
- ARM的存储器映射与存储器重映射【转载】2009-12-14 10:29最近在用LPC2148,看到了一篇文章,感觉很有帮助,就转了过来。
- 程序设计竞赛(数组+多组测试)
- JQuery的$(document).ready(function(){})与JS的window.onload 的各自优势!
- 一台计算机只能安装一块网络接口卡,为什么用路由上网,只有一台电脑可以上去?...
- 服务器端使用sendRedirect跳转到客户端异常
- [渝粤教育] 西南科技大学 中学英语教材教法 在线考试复习资料
- 编译tensorflow的小小记录
- 牛客网编程题06--取近似值
- Python为视频设置遮罩实现异形窗口播放
- JAVA实现UDP通信
- Python数据处理(一)
- 泛微云桥e-birdge之金蝶云之家集成配置手册
- 设计模式之多用组合,少用继承
- Android 定制关机界面
- 美学设计专家解读小度智能音箱Play设计 天猫精灵被打脸了