Android 系统编译流程
来源:互联网 发布:'淘宝账户手机无法登陆 编辑:程序博客网 时间:2024/05/19 18:37
前言
老早都想了解android到底是如何从代码到系统安装包的,可是因为技术太菜。最近恰好看到别人写如何构建系统,这里整理下流程,并且学习一些基础的知识。
正文
首先我们如何编译系统,这里我们很容易找到,主要是下载源码,这里我们暂时不要纠结,假如我们repo下一套源代码,我们需要编译系统
1
$. ./build/envsetup.sh
2
$lunch full-eng
3
$make
就会在out文件夹下生成系统安装包,
这里这几个指令到底如何实现的,我们慢慢分析。
首先第一个. ./build/envsetup.sh
,这个干了什么呢?我们很容易看到这种shell脚本执行方式,是在当前shell中执行,也就是所有的函数都对于当前调用可见。见博客shell脚本的几种执行方式。所以在执行完这个脚本语言后,里面所有的方法都可以使用。那我们还是进入代码阅读。因为这是脚本。所以方法都不会执行,单行的语句才会被调用,我们来看我们的真正的类似main()
函数。
VARIANT_CHOICES=(user userdebug eng) #初始化一个数组,这是系统默认的构建的三个版本。unset LUNCH_MENU_CHOICES #删除整个数组。#这里才是真的添加默认的,编译版本。add_lunch_combo aosp_arm-engadd_lunch_combo aosp_arm64-engadd_lunch_combo aosp_mips-engadd_lunch_combo aosp_mips64-engadd_lunch_combo aosp_x86-engadd_lunch_combo aosp_x86_64-eng#这个是调用_lunch函数来对lunch命令自动补全,这个我也不太懂,complete命令还是不太常用的。complete -F _lunch lunch#终于迎来了我们最关键的main函数#判断是不是用的bashif [ "x$SHELL" != "x/bin/bash" ]; then case `ps -o command -p $$` in *bash*) ;; *) echo "WARNING: Only bash is supported, use of other shell would lead to erroneous results" ;; esacfi# Execute the contents of any vendorsetup.sh files we can find.首先要在根目录,不然test不会通过,然后find命令得到,vendorsetup,然后调用这个shell脚本。for f in `test -d device && find -L device -maxdepth 4 -name 'vendorsetup.sh' 2> /dev/null`do echo "including $f" . $fdoneunset f#这个是检查版本信息。还有加上adb的自动补全命令。这里不再相信介绍。addcompletions
注释中还是比较清晰,这里我们不过多解释,我们还是回到我们执行的vendorsetup.sh的脚本中。
add_lunch_combo full_maguro-userdebug
发现很明白,和上面讲的基本一致,也是添加给编译选项。我们还是选择这个函数看看。
function add_lunch_combo(){ local new_combo=$1 local c for c in ${LUNCH_MENU_CHOICES[@]} ; do if [ "$new_combo" = "$c" ] ; then return fi done LUNCH_MENU_CHOICES=(${LUNCH_MENU_CHOICES[@]} $new_combo)}
这个函数很简单,就是判断LUNCH_MENU_CHOICES是否包含添加的项有的话什么也不干。没有在数组中添加一项。至此我们已经把我们所有需要的函数都添加到环境变量中。并且得到一个正常的LUNCH_MENU_CHOICES,
编译环境已经更新成功。然后开始lunch啦!!!
0 0
- android系统编译流程
- Android编译系统流程
- Android 系统编译流程
- Android编译系统的流程
- android 编译系统流程简介
- Android学习笔记之编译系统(五)apk编译流程
- Android学习札记之编译系统(五)apk编译流程
- Android编译系统详解(三)——编译流程详解
- Android编译系统——编译流程详解
- Android编译系统详解(三)——编译流程详解
- Android编译系统详解(三)——编译流程详解
- Android编译系统详解(三)——编译流程详解
- Android编译系统详解(二)——命令执行流程
- Android编译系统)——命令执行流程
- Android编译系统详解(二)——命令执行流程
- Android编译系统详解(二)——命令执行流程
- Android编译流程_makefile流程
- vlc-android编译流程
- 关于Chrome 浏览器 常用方法
- 【C++/CLI】如何将数值转为字符串
- Android Studio快捷键失效的问题及实用快捷键汇总
- 栈(基于数组和链表)
- http和socket之长连接和短连接区别
- Android 系统编译流程
- zookeeper入门原理
- Python学习笔记(5)-集成开发环境IDLE的使用与调试
- Spring总结笔记之三
- 30秒彻底解决向AS中导工程不成功问题
- 在bae部署django程序
- 用户手势检测-GestureDetector使用详解
- hibernate:No default constructor for entity: hibernate.Dept
- oculus ios学习资料整理