美文网首页Android Rom
如何在Ubuntu虚拟机中下载编译Android源代码

如何在Ubuntu虚拟机中下载编译Android源代码

作者: 飞天德先生 | 来源:发表于2018-01-21 23:53 被阅读99次

    最近想学习研究下Android源码,便一直在找资料。发现想要研究源码,首先就要对安卓进行下载和编译,断断续续的试了很久,失败了很多次,终于成功下载编译了Android源码,启动了模拟器。

    下面把自己如何成功的过程分享下来,以便学习。

    1、虚拟机中安装Ubuntu系统

    1.1 虚拟机的选择

    刚开始想安装双系统,但电脑无法成功,便使用虚拟机进行安装。开始使用的VMware安装Ubuntn系统,但是总会出现安装失败的问题,最后便改用VirtualBox。

    这里使用的虚拟机就是VirtualBox。


    Virtual_Box版本.jpg

    - VirtulaBox版本:5.1.24

    1.2 Ubuntu系统的选择

    第一次安装的是ubuntu-17.04-desktop-amd64,但系统安装后,发现OpenJDK7无法成功安装,到后来也没有查到怎么安装,作罢。。。
    第二次安装的是ubuntu-16.04.3-desktop-amd64,但下载Android源码后,却出现了编译失败,作罢。。。

    咨询做过Android底层开发的同事,了解到他使用的Ubuntu版本是14.04,果断使用这个版本,成功~

    - Ubuntu系统版本ubuntu-14.04.5-desktop-amd64

    下载地址:http://mirrors.ustc.edu.cn/ubuntu-releases/14.04/

    系统介绍相关链接:http://www.linuxidc.com/Linux/2016-02/128506.htm

    1.3 VirtualBox中安装Ubuntu系统

    1、打开Virtual,选择 控制->新建


    新建.png
    设置.png

    2、选择系统类型和版本,自定义名称,因为下载的Ubuntu是64位,所以选择Liunx系统和Ubuntu 64位,然后点击下一步


    设置虚拟机类型.png

    3、选择设置的内存大小,最好内存设大点,减少虚拟机运行的卡顿,我的是8G内存,所以先设置为4G,这里在系统安装后也可调整大小


    设置内存大小.png

    4、接下来设置虚拟机硬盘大小,直接一路点下去


    设置硬盘1.png 设置硬盘2.png 设置硬盘3.png

    5、设置硬盘的大小和位置,因为Android源码下载和编译需要的空间比较大,建议设置的硬盘大小大一点。这里我设置的200G。编译结束后,硬盘就只剩下50G可用了。


    设置硬盘4.png

    6、创建成功

    创建成功.png

    7、之后点击右键,设置系统镜像


    设置系统镜像1.png 设置系统镜像2.jpg

    8、点击启动,安装Ubuntu系统


    启动系统.png

    Ubuntu安装教程比较简单,网上都可以查到,这里不再细讲,可以参考下面文章:

    https://jingyan.baidu.com/article/0bc808fc6326ca1bd485b9e6.html

    2、Ubuntu系统的更新

    系统安装完成后,需要对Ubuntu的系统进行更新,如果有翻墙工具,可以使用翻墙工具,也可以通过换源,使用国内的文件源。

    这里使用图形界面进行更新源。


    更新源1.jpg 更新源2.jpg 更新源3.jpg

    这里使用的是163的源


    更新源4.png 更新源5.jpg 更新源6.jpg 更新源7.jpg

    更新完成,源就更换成功了。

    也可以使用其他的更换方式,可以参考资料:

    https://jingyan.baidu.com/article/7f41ecec1b7a2e593d095ce6.html

    3、源码下载

    3.1设置Git配置

    Ubuntu 14.04系统里默认自带git的,所以可以直接设置git的配置

    git config --global user.name "Your Name"
    git config --global user.email "you@example.com
    

    3.2下载repo

    repo是google使用Python写的一个脚本,方便调用git。可以用来下载、管理许多git仓库。在这里,google使用repo来负责android的版本控制。

    mkdir ~/bin
    PATH=~/bin:$PATH
    curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
    chmod a+x ~/bin/repo
    

    这里使用的是google的网址,如果没有翻墙,就会无法下载,我们可以通过国内镜像,进行下载。

    将上面的指令更改为:

    mkdir ~/bin
    PATH=~/bin:$PATH
    curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo
    chmod +x repo
    

    我们可以把这个网址设置到PATH中,方便调用。

    将如下内容复制到你的~/.bashrc

    export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'

    重启终端。

    可参考资料:https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/

    https://mirrors.tuna.tsinghua.edu.cn/help/git-repo/

    3.3初始化工作目录

    在硬盘中建立下载Android源码存放的位置

    mkdir Android
    cd Android
    

    3.4同步源码

    可以从:https://source.android.com/source/build-numbers#source-code-tags-and-builds 查询到Android的所有版本

    然后选择要下载的分支,这里下载的是6.0的版本。

    //从google中下载选定的分支代码
    repo init -u https://android.googlesource.com/platform/manifest -b android-6.0.1_r46
    
    //如果无法翻墙,可以使用清华源进行初始化
    repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-6.0.1_r46
    

    然后执行同步命令:
    repo sync
    这时终端中就会开始下载代码,耗时比较久。我这里下载用了大概10多个小时时间,下载耗费了大概70G的硬盘空间。

    4、编译源码

    4.1安装openJDK-7

    Android6.0需要JDK7,如需其他版本,还需要安装其他的JDK版本

    JDK版本.png
    参考资料:https://source.android.com/source/requirements#older-versions
    sudo apt-get install openjdk-7-jdk
    //如果系统上安装有多个JDK,需配置到默认JDk版本到JDK7
    sudo update-alternatives --config java
    sudo update-alternatives --config javac
    //设置后检查当前版本为JDk7
    java -version
    
    JDK版本检测.png

    4.2安装编译的依赖项(14.04需添加的依赖)

    sudo apt-get install git-core gnupg flex bison gperf build-essential \
      zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \
      lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache \
      libgl1-mesa-dev libxml2-utils xsltproc unzip
    

    4.3初始化编译源码

    //初始化编译环境
    source build/envsetup.sh
    
    初始化编译环境.png
    //使用lunch命令选择编译目标:
    lunch
    

    这里选择的编译目标有自己的格式:BUILD-BUILDTYPE
    比如:aosp_arm-eng的BUILD类型是aosp_arm,BUILDTYPE类型是eng

    BUILD TYPE则指的是编译类型,通常有三种:
    -user: 代表这是编译出的系统镜像是可以用来正式发布到市场的版本,其权限是被限制的(如,没有root权限,不开放dedug等)
    -userdebug: 在user版本的基础上开放了root权限和debug权限
    -eng: 代表engineer,也就是所谓的开发工程师的版本,拥有最大的权限(root等),此外还附带了许多debug工具

    BUILD指的是特定功能的组合的特定名称,即表示编译出的镜像可以运行在什么环境。

    其中,aosp(Android Open Source Project)代表Android开源项目;
    arm表示系统是运行在arm架构的处理器上,arm64则是指64位arm架构;
    处理器x86则表示x86架构的处理器;
    此外,还有一些单词代表了特定的Nexus设备。

    更多参考官方文档:https://source.android.com/source/running

    如果没有Nexus设备,只是想在电脑上看一下模拟器运行状态,那么通常选择arm或者x86。
    然后我们可以根据自己的情况,选择对应版本的数字即可

    选择版本.png

    这里我选择了 2,即 aosp_arm64-eng

    4.4 开始编译

    通过make指令进行代码编译即可开始代码的编译,同时也可在其后加上-j参数来设置参与编译的线程数量,以提高编译速度。

    make -j4

    需要注意,参与编译的线程通常是根据自己机器的cup的核心来确定:core*2,即当前cpu的核心的2倍。
    例如,给虚拟机设置的是双核cpu,则可以根据公式,最快速的编译可以设置为make -j4

    之后终端便开始编译Android系统,耗时时间比较长,大概有5-6小时。

    5、运行模拟器

    编译完成后,即可直接通过命令运行Andorid模拟器

    emulator

    若在终端关闭后,想再次开启,需要再次将目录切换到Android源码存储的目录,执行下列命令:

    source build/envsetup.sh
    
    //选择刚才你编译的目标版本,这里我选择的是2
    lunch
    
    emulator
    

    执行 source build/envsetup.sh

    执行source.png

    选择 lunch

    执行lunch.png

    执行 emulator

    运行的速度比较慢,大概需要5分钟时间,模拟器才会完全运行起来。

    执行emulator.jpg

    到这里,Android源码的下载,编译,运行,便已成功完成。

    相关文章

      网友评论

        本文标题:如何在Ubuntu虚拟机中下载编译Android源代码

        本文链接:https://www.haomeiwen.com/subject/wvccaxtx.html