编译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源代码编译过程及指令的更多相关文章

  1. 【转】android程序编译过程

    现在很多人想对Android工程的编译和打包进行自动化,比如建立每日构建系统.自动生成发布文件等等.这些都需要我们对Android工程的编译和打包有一个深入的理解,至少要知道它的每一步都做了什么,需要 ...

  2. android源代码编译完毕之后

    android源代码编译完毕之后,在根文件夹下会有一个out文件夹生成,假设我们想要执行虚拟机的话,须要配置一下环境变量. 首先我们使用以下的命令打开配置环境变量的文件: gedit ~./bashr ...

  3. 【转】Android源代码编译命令m/mm/mmm/make分析--不错

    原文网址:http://blog.csdn.net/luoshengyang/article/details/19023609 在前文中,我们分析了Android编译环境的初始化过程.Android编 ...

  4. Java源代码编译过程

      编译其本质是将一种语言规范转换成另一种语言规范,即将Java语言规范转换为JVM虚拟机语言规范.结果就是.java文件到.class文件. 对于C/C++编译直接将高级语言转换为机器语言,Java ...

  5. Mac下设置Android源代码编译环境

    在Mac下编译Android最麻烦的就是设置Android的编译环境了,做完这一步基本上剩下的就是近乎傻瓜式的操作了.说起来也简单就三步,设置大小写敏感的文件系统.安装编译工具.设置文件系统同时能打开 ...

  6. 3DSlicer源代码编译过程vs2008+windows xp [转]

    一 下载QT源代码编译 1.  简述   在 Windows2000/xp/vista 下,安装 VS2008, QT 4.7.2 :并在 VS2008上建立 QT 的集成开发环境,利用 VS2008 ...

  7. OpenSift源代码编译过程记录

    本文记录了在CentOS6.5上编译Sift的开源实现OpenSift的编译过程,同一时候记录了编译过程中的几个问题. sift的理论已经有非常多了,以下会给出链接: 1.Requirements a ...

  8. Android源代码下载过程中无法下载repo的解决方法【转】

    本文转载自:http://blog.csdn.net/shangyuan21/article/details/17618575 我们都知道下载Android源代码需要使用repo进行辅助下载,但是最进 ...

  9. Android 项目编译过程

    Android 工程构建的持续集成,需要搭建一套编译和打包自动化流程,比如建立每日构建系统.自动生成发布文件等等.这些都需要我们对Android工程的编译和打包有一个比较深入的理解,例如知道它的每一步 ...

随机推荐

  1. cobbler批量安装操作

    打开mirrors.aliyun.com/epel http://mirrors.aliyun.com/epel/epel-release-latest-6.noarch.rpm rpm -ivh h ...

  2. python 学习地址

    本章主要记录学习python过程中借鉴的一些网站,并感谢这些博主辛勤付出. python官网:https://www.python.org/ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ...

  3. MapReduce-序列化(Writable)

    Hadoop 序列化特点 Java 的序列化是一个重量级序列化框架(Serializable),一个对象被序列化后,会附带很多额外的信息(各种校验信息,Header,继承体系等),不便于在网络中高效传 ...

  4. 第二十节: 深入理解并发机制以及解决方案(锁机制、EF自有机制、队列模式等)

    一. 理解并发机制 1. 什么是并发,并发与多线程有什么关系? ①. 先从广义上来说,或者从实际场景上来说. 高并发通常是海量用户同时访问(比如:12306买票.淘宝的双十一抢购),如果把一个用户看做 ...

  5. 常用的消息队列中间件mq对比

    原文地址:https://blog.csdn.net/qq_30764991/article/details/80239076 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量 ...

  6. JavaScript生成斐波那契数列

    常规写法 https://cn.bing.com/search?q=js+fibonacci+sequence&pc=MOZI&form=MOZSBR //Fibonacci func ...

  7. es6编程建议和技巧点汇总

    大括号 特点:大括号(单独的大括号或者if等后的大括号)内是一个单独的作用域 注意点:在块级作用域内声明的函数,类似var,会被提升到大括号外,应避免在块级作用域内声明函数.如果确实需要,写成函数表达 ...

  8. 项目改bug期间总结

    kotlin中使用labda 表到时注意参数,另外setOnClickListener() 和 setOnClickListener{} 差别很大的,使用要细心, 因为这个问题拿了大半天闷, 最后还是 ...

  9. webpack学习记录 二

    开发网站 用polyfill(全局污染)  开发框架 用Runtime(局部污染) 在.babelrc文件中

  10. python 进程、线程与协程的区别

    进程.线程与协程区别总结 - 1.进程是计算器最小资源分配单位 - 2.线程是CPU调度的最小单位 - 3.进程切换需要的资源很最大,效率很低 - 4.线程切换需要的资源一般,效率一般(当然了在不考虑 ...