Android源代码编译过程及指令
编译Android源代码分为两种情况:
1. 完整编译源码:
./mk_aliphone.sh --> 完整编译脚本
--> 6735 输入对应的编号
--> userdebug
adb
new(-->remake)
上述指令流程后,若报错,则将错误解决后,执行. ./mk_aliphone.sh后开始编译流程
2. 源码编译完成后,单独编译模块:
. ./build/envsetup.sh (当前目录:build/目录上级目录) --> 初始化环境的脚本:envsetup.sh
lunch(在当前目录即可)选择CPU:full_aeon6735_65c_s_l1-userdebug
选择要编译的模块(即:进入到想要编译的模块)比如:~/v6SourceCode/aliyunos/packages/apps/uShell(只需要执行一次脚本和lunch;再次进入时就不需要)
mm -b(触发编译)
source xxx.sh 初始化编译环境
lunch 指定本次编译的目标设备以及编译类型
make -j12 开始编译,默认是编译整个系统,参数表示编译的job数量
单独编译apk结果目录:~/v6SourceCode/out/target/product/generic(aeon6735_65c_s_l1)/system/app/uShell(对应编译的模块)
单独编译apk后,将结果apk安装到设备中,一般有两种方式:adb install和adb push;可以分别使用两种方式安装。
其他资料:引自:http://www.cnblogs.com/mr-raptor/archive/2012/06/07/2540359.html 对比博文:http://gityuan.com/2016/03/19/android-build/https://www.sdk.cn/news/3313
按照Google给出的编译步骤如下:
1. source build/envsetup.sh 加载编译指令(envsetup.sh文件存放在Android源代码根目录下的build目录下)
2. lunch 选择平台编译选项 --> 控制台列出所有可供选择的平台,使用哪个平台根据具体情况而定,本次选择6735_debug
3. make 执行编译
分析1:source build/envsetup.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
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 () # 跳到指定目录 405
具体看一下YunOS平台上的envsetup.sh文件内容:
envsetup.sh主要的作用如下:
1. 加载编译时使用到的函数命令:m、mm等等
2. 添加两个编译选项:generic-eng和simulator
3. 查找vendor/<厂商目录>/和vendor/<厂商目录>/build/下的vendorsetup.sh;如果存在的话,就加载执行,添加厂商自己定义的编译选项
分析2:lunch
执行lunch命令,它会打印出一个选择菜单,列出可用的编译选项;lunch命令是envsetup.sh里定义的一个命令,用来让用户选择编译项,来定义Product和编译过程中用到的全局变量。
列表中可能有的字段定义:
eng:工程版本
user:最终用户版本
userdebug:调试测试版本
tests:测试版本
一般而言,tests和userdebug两个版本是不能交付给最终用户的。
分析3:make
执行make命令的结果就是去执行当前目录下的Makefile文件
Android源代码编译过程及指令的更多相关文章
- 【转】android程序编译过程
现在很多人想对Android工程的编译和打包进行自动化,比如建立每日构建系统.自动生成发布文件等等.这些都需要我们对Android工程的编译和打包有一个深入的理解,至少要知道它的每一步都做了什么,需要 ...
- android源代码编译完毕之后
android源代码编译完毕之后,在根文件夹下会有一个out文件夹生成,假设我们想要执行虚拟机的话,须要配置一下环境变量. 首先我们使用以下的命令打开配置环境变量的文件: gedit ~./bashr ...
- 【转】Android源代码编译命令m/mm/mmm/make分析--不错
原文网址:http://blog.csdn.net/luoshengyang/article/details/19023609 在前文中,我们分析了Android编译环境的初始化过程.Android编 ...
- Java源代码编译过程
编译其本质是将一种语言规范转换成另一种语言规范,即将Java语言规范转换为JVM虚拟机语言规范.结果就是.java文件到.class文件. 对于C/C++编译直接将高级语言转换为机器语言,Java ...
- Mac下设置Android源代码编译环境
在Mac下编译Android最麻烦的就是设置Android的编译环境了,做完这一步基本上剩下的就是近乎傻瓜式的操作了.说起来也简单就三步,设置大小写敏感的文件系统.安装编译工具.设置文件系统同时能打开 ...
- 3DSlicer源代码编译过程vs2008+windows xp [转]
一 下载QT源代码编译 1. 简述 在 Windows2000/xp/vista 下,安装 VS2008, QT 4.7.2 :并在 VS2008上建立 QT 的集成开发环境,利用 VS2008 ...
- OpenSift源代码编译过程记录
本文记录了在CentOS6.5上编译Sift的开源实现OpenSift的编译过程,同一时候记录了编译过程中的几个问题. sift的理论已经有非常多了,以下会给出链接: 1.Requirements a ...
- Android源代码下载过程中无法下载repo的解决方法【转】
本文转载自:http://blog.csdn.net/shangyuan21/article/details/17618575 我们都知道下载Android源代码需要使用repo进行辅助下载,但是最进 ...
- Android 项目编译过程
Android 工程构建的持续集成,需要搭建一套编译和打包自动化流程,比如建立每日构建系统.自动生成发布文件等等.这些都需要我们对Android工程的编译和打包有一个比较深入的理解,例如知道它的每一步 ...
随机推荐
- Linux设备树(五 根节点)
五 根节点 一个最简单的设备树必须包含根节点,cpus节点,memory节点.根节点的名字及全路径都是“/”,至少需要包含model和compatible两个属性.model属性我们在属性那节已经说过 ...
- 如何重写Java中的equals方法
Java中,只有8种基本类型不是对象,例如:4种整形类型(byte, short, int,long),2种浮点类型(flout, double),boolean, char不是对象,其他的所有类型, ...
- host-only局域网络
在网桥配置的情况下设置: 网桥配置链接 配置前: 配置后: vi /etc/sysconfig/network-scripts/ifcfg-eth0 这里是使用static静态配置,具体网络配置及声明 ...
- SpringBoot(七):SpringBoot整合Swagger2
原文地址:https://blog.csdn.net/saytime/article/details/74937664 手写Api文档的几个痛点: 文档需要更新的时候,需要再次发送一份给前端,也就是文 ...
- Spark Java API 计算 Levenshtein 距离
Spark Java API 计算 Levenshtein 距离 在上一篇文章中,完成了Spark开发环境的搭建,最终的目标是对用户昵称信息做聚类分析,找出违规的昵称.聚类分析需要一个距离,用来衡量两 ...
- [物理学与PDEs]第1章第6节 电磁场的标势与矢势 6.3 例 --- 电偶极辐射
1. 偶极子: 相距为 $l$, 带电量分别为 $\pm q$ 的一对电荷组成的系统. 称 $$\bex {\bf m}=q{\bf l} \eex$$ 为电偶极矩, 其中 ${\bf l}$ 为 $ ...
- C++创建对象的三种方法
我自己以前经常弄混 A a(1); 栈内存中分配 A b = A(1); 栈内存中分配,和第一种无本质区别 A c = new A(1); 堆内存中分配 前两种在函数体执行完毕之后会被释放,第三种需要 ...
- cmd 命令添加防火墙端口
windows dos 命令添加防火墙端口. 示例 123 端口: netsh firewall add portopening protocol = UDP port = name = NTPSER ...
- 史上最污技术解读,让你秒懂IT术语(转载)
假设你是一位妹子,你的男友沉迷游戏经常不接电话无故宕机,所以当你们约好下午逛街以后你要时不时地打个电话询问,看看他是不是还能正常提供服务,这叫心跳检测. 假设你是一位妹子,你想去逛街而你的男友A在打游 ...
- javascript没有长整型
记录一下前几天踩坑的经历. 背景:一个项目某一版之后很多用easyui的表格控件treegrid渲染的表格都显示不出来了 奇怪的地方主要有以下几点: 项目在测试环境才会这样,在本机能够正常运行,多次重 ...