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相关推荐

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

    原文网址:http://blog.csdn.net/mliubing2532/article/details/7567164 如果你只需要修改某一个模块的内容,但是却每次都要执行make, 最后等待很 ...

  2. build/envsetup.sh脚本分析

    1. Android编译系统分析 编译脚本及系统变量 build/envsetup.sh脚本分析 在编译源代码之前通常需要在android源代码顶层目录执行 . ./build/envsetup.sh ...

  3. android 编译步骤分析之envsetup.sh

    1. cd AP      进入AP目录,如果已经进入到了A目录,可以忽略 2. source build/envsetup.sh        初始编译环境,envsetup.sh里面是一些编译命令 ...

  4. 编译Android源码(2) ---- envsetup.sh文件分析

    在Android源码下载完成后,只需要简单的三个步骤就能把Android编译完成( http://source.android.com/source/building.html): 1.当前目录切换到 ...

  5. 【Bash百宝箱】Android envsetup.sh及lunch

    文章目录 1.envsetup.sh 2.lunch 3.make 在Android开发环境中编译一个目标时,一般要执行下面三行命令: $ . build/envsetup.sh $ lunch &l ...

  6. 全志a64linux内核编译,全志A64 lichee编译脚本build.sh分析

    全志A64 lichee编译脚本build.sh分析 发布时间:2018-08-22 15:58, 浏览次数:269 , 标签: lichee build sh lichee目录下的./build.s ...

  7. tomcat变量环境脚本setclasspath.sh分析

    之所以分析setclasspath.sh脚本,是因为catalina.sh脚本会引用到这个脚本,如果不对其进行分析,之后看catalina.sh脚本就会不知道一些变量没有申明和赋值怎么会跑出来,本篇文 ...

  8. quick: setup_mac.sh分析

    //quick: setup_mac.sh分析 //quick: setup_mac.sh分析 #!/bin/bash //获取并打印根目录QUICK_V3_ROOT DIR="$( cd ...

  9. iOS开发之Documentation.build/Script-BC552B3A15.sh:

    /Users/hbbhao/Library/Developer/Xcode/DerivedData/AWLive-dmbegyhgamayzudqqdentwngdpkr/Build/Intermed ...

最新文章

  1. python gdbm_GDBM不适用于Python 3.6和anaconda
  2. Rocksdb 获取当前db内部的有效key个数 (估值)
  3. SQL2005以上版本派生表更新
  4. 【计算机网络】数据链路层 : 差错控制 ( 纠错编码 | 海明码 | “海明码“ 原理 | “海明码“ 工作流程 | 确定校验啊位数 | 确定校验码和数据位置 | 求校验码值 | 检错纠错 )★
  5. 提高Linux效率的30个命令行常用快捷键
  6. ARM的存储器映射与存储器重映射【转载】2009-12-14 10:29最近在用LPC2148,看到了一篇文章,感觉很有帮助,就转了过来。
  7. 程序设计竞赛(数组+多组测试)
  8. JQuery的$(document).ready(function(){})与JS的window.onload 的各自优势!
  9. 一台计算机只能安装一块网络接口卡,为什么用路由上网,只有一台电脑可以上去?...
  10. 服务器端使用sendRedirect跳转到客户端异常
  11. [渝粤教育] 西南科技大学 中学英语教材教法 在线考试复习资料
  12. 编译tensorflow的小小记录
  13. 牛客网编程题06--取近似值
  14. Python为视频设置遮罩实现异形窗口播放
  15. JAVA实现UDP通信
  16. Python数据处理(一)
  17. 泛微云桥e-birdge之金蝶云之家集成配置手册
  18. 设计模式之多用组合,少用继承
  19. Android 定制关机界面
  20. 美学设计专家解读小度智能音箱Play设计 天猫精灵被打脸了

热门文章

  1. Android:Handler中的Idle Handler
  2. Java项目开发,学生信息管理系统
  3. Python-flask 使用Markdown和Flask-PageDown支持富文本文章
  4. 百宝箱-Rime配置
  5. JVM (JAVA虚拟机)
  6. Android 监听屏幕唤醒、关闭和解锁的广播
  7. 杭电2094 产生冠军
  8. 14福师计算机导论在线作业一,(随机)福师18秋《计算机导论》在线作业一资料...
  9. Windows下PHPStudy服务环境80端口被进程System占用的解决方法
  10. 遍历本路径下所有文件夹和子文件夹,修改文件后缀名