zoukankan      html  css  js  c++  java
  • Ubantu16.04进行Android 8.0源码编译

    参考这篇博客

    经过测试,8.0源码下载及编译之后,占用100多G的硬盘空间,尽量给ubantu系统多留一些硬盘空间,如果后续需要在编译好的源码上进行开发,需要预留更多的控件,为了防止后续出现文件权限问题,建议使用root用户进行开发

    分为4个流程

    1. 源码下载
    2. 构建编译环境
    3. 编译源码
    4. 运行

    源码下载

    安装git并且配置

    //安装git
    sudo apt-get install git
    
    //配置git用户名称和邮箱
    git config --global user.name "your name"
    git config --global user.email "XXX@XXX.com"
    

    下载repo执行文件和源码目录

    1. 下载repo执行文件,这里需要FQ,不然有可能下载不了

      mkdir ~/bin
      
      PATH=~/bin:$PATH
      
      curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
      
      chmod a+x ~/bin/repo
      
    2. 创建源码目录

      mkdir ~/source
      

    下载源码

    初始化仓库

    cd到~/source目录,执行以下命令,这步需要FQ,不然有可能提示无法连接到 gerrit.googlesource.com

    在初始化仓库完毕,会将源码对应的repo项目下载到source下的.repo目录下,在整个源码下载完成之前,一直是隐藏项目

    repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest
    

    或者这个命令

    repo init -u git://aosp.tuna.tsinghua.edu.cn/aosp/platform/manifest
    

    以上两条命令执行效果一样,只是协议不一样

    补充说明
    不带参数的manifest命令用于获取master上最新的代码,但是可以通过-b参数指定获取某个特定的android版本,比如我们想要获取android-8.0.8_r17分支,那么命令如下:

    repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-8.0.8_r17
    (AOSP项目当前所有的分支列表参看(需要FQ):分支列表)

    同步代码

    命令如下

    repo sync
    

    一定确定代码同步完成,才执行编译操作,不然编译会出问题,多调用几次repo sync来确认同步完成

    由于源码很大,所以在中间的下载过程中,很有可能有网络中断,电脑停电等情况,针对这种情况,我们可以写一个简单的shell脚本来保证继续自动下载,在source目录下创建sync.sh文件,并赋值可执行权限

    //创建sync.sh文件
    mkdir sync.sh
    
    //赋予执行权限
    chmod a+x sync.sh
    

    sync.sh代码如下

    #!/bin/bash
    #FileName source_asyn.sh
    PATH=~/bin:$PATH
    # 注意修改成你要编译的版本,比如这里我下载的是Android-8.0.0_r17
    repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-8.0.0_r17
    repo sync
    while [$? = 1]: do
    echo "=========download failed,again============"
    sleep 5
    repo sync
    done
    

    执行source目录下的sync.sh文件之后,便可耐心地等待下载

    构建编译环境

    1.硬件要求

    64位的操作系统只能编译2.3.x以上的版本,如果你想要编译2.3.x以下的,那么需要32位的操作系统.
    磁盘空间越多越好,至少在100GB以上.意思就是,你可以去买个大点的硬盘了啊
    如果你想要在是在虚拟机运行linux,那么至少需要16GB的RAM/swap.

    2.软件要求

    操作系统要求

    Android版本 编译要求的Ubuntu最低版本
    Android 6.0至AOSP master Ubuntu 14.04
    Android 2.3.x至Android 5.x Ubuntu 12.04
    Android 1.5至Android 2.2.x Ubuntu 10.04

    JDK版本要求

    除了操作系统版本这个问题外,我们还需要关注JDK版本问题,为了方便,同样我们也列出的不同Android版本的源码需要用到的JDK版本:

    Android版本 编译要求的JDK版本
    AOSP的Android主线 OpenJDK 8
    Android 5.x至android 6.0 OpenJDK 7
    Android 2.3.x至Android 4.4.x OpenJDK 6
    Android 1.5至Android 2.2.x Oracle JDK 5

    我现在在Ubuntu 16.04下编译AOSP主线代码,因此需要安装OpenJDK 8,执行命令如下:

    sudo apt-get install openjdk-8-jdk 
    

    如果你需要在Ubuntu 14.04下编译AOSP主线代码,同样需要安装OpenJDK 8,此时需要执行如下命令:

    sudo apt-get update
    sudo apt-get install openjdk-8-jdk
    

    如果你要编译的是Android 5.x到android 6.0之间的系统版本,需要采用openjdk7.但是在Ubuntu 15.04及之后的版本的在线安装库中只支持openjdk8和openjdk9的安装.因此,如果你想要安装openjdk 7需要首先设置ppa:

    sudo add-apt-repository ppa:openjdk-r/ppa 
    sudo apt-get update
    

    然后再执行安装命令:

    sudo apt-get install openjdk-7-jdk 
    

    有时候,我们需要编译不同版本的android系统,就可能使用不同的jdk版本.关于jdk版本切换,可以使用如下命令:

    sudo update-alternative --config java
    sudo update-alternative --config javac
    

    3.其他要求,添加ubantu的依赖设置

    sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib 
    sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386 
    sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 
    sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
    sudo apt-get install git-core gnupg flex bison gperf build-essential  
    sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib 
    sudo apt-get install libc6-dev-i386 
    sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev 
    sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
    sudo apt-get install lib32z-dev ccache
    

    初始化编译环境

    确保上述过程完成后,接下来我们需要初始化编译环境,命令如下:

    source build/envsetup.sh
    

    执行该命令结果如下:

    不难发现该命令只是引入了其他执行脚本,至于这些脚本做什么,目前不在本文中细说.
    该命令执行成功后,我们会得到了一些有用的命令,比如最下面要用到的lunch命令.

    编译源码

    初始化编译环境之后,就进入源码编译阶段.这个阶段又包括两个阶段:选择编译目标和执行编译.

    选择编译目标

    执行编译

  • 相关阅读:
    Ubuntu18.04, WPS表格生成中文大写数字的script
    Java实现的简单神经网络(基于Sigmoid激活函数)
    Naive Bayes Classifier 朴素贝叶斯分类器
    动态规划处理diff算法 Myers Diff (正向)
    动态规划处理01背包问题
    文本diff算法Patience Diff
    API返回错误信息的最佳实践
    CAP理论中, P(partition tolerance, 分区容错性)的合理解释
    mysql: SELECT ... FOR UPDATE 对SELECT语句的阻塞实验
    Probability&Statistics 概率论与数理统计(1)
  • 原文地址:https://www.cnblogs.com/flowyourheart/p/Ubantu1604jin-xingAndroid-80yuan-ma-bian-yi.html
Copyright © 2011-2022 走看看