zoukankan      html  css  js  c++  java
  • 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文件

  • 相关阅读:
    Java基本语法(一)
    JAVA菜鸟入门HelloWorld
    python 练习题-质数
    python 字符串转运算符
    python 提取不重复的整数
    python 句子逆序
    python 数字颠倒
    python 字符个数统计
    python 练习题-计算字符个数
    python int型正整数在内存中存储为1的个数
  • 原文地址:https://www.cnblogs.com/CVstyle/p/6395704.html
Copyright © 2011-2022 走看看