参考这篇博客

经过测试,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执行文件,这里需要翻墙,不然有可能下载不了

    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目录,执行以下命令,这步需要翻墙,不然有可能提示无法连接到 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项目当前所有的分支列表参看(需要翻墙):分支列表)

同步代码

命令如下

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命令.

编译源码

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

选择编译目标

执行编译

Ubantu16.04进行Android 8.0源码编译的更多相关文章

  1. Android 5.0源码编译问题

    如果是自己通过repo和git直接从google官网上download的源码,请忽略这个问题,但是由于google在国内被限制登录,通过这一种方法不是每个人都能download下来源码,通常的做法就是 ...

  2. [Android 编译(一)] Ubuntu 16.04 LTS 成功编译 Android 6.0 源码教程

    本文转载自:[Android 编译(一)] Ubuntu 16.04 LTS 成功编译 Android 6.0 源码教程 1 前言 经过3天奋战,终于在Ubuntu 16.04上把Android 6. ...

  3. 从谷歌官网下载android 6.0源码、编译并刷入nexus 6p手机

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/fuchaosz/article/details/52473660 1 前言 经过一周的奋战,终于从谷 ...

  4. Spark1.0.0 源码编译和部署包生成

    问题导读:1.如何对Spark1.0.0源码编译?2.如何生成Spark1.0的部署包?3.如何获取包资源? Spark1.0.0的源码编译和部署包生成,其本质只有两种:Maven和SBT,只不过针对 ...

  5. hadoop-1.2.0源码编译

    以下为在CentOS-6.4下hadoop-1.2.0源码编译步骤. 1. 安装并且配置ant 下载ant,将ant目录下的bin文件夹加入到PATH变量中. 2. 安装git,安装autoconf, ...

  6. hadoop-2.6.0源码编译问题汇总

    在上一篇文章中,介绍了hadoop-2.6.0源码编译的一般流程,因个人计算机环境的不同, 编译过程中难免会出现一些错误,下面是我编译过程中遇到的错误. 列举出来并附上我解决此错误的方法,希望对大家有 ...

  7. ambari 2.5.0源码编译安装

    参考:https://www.ibm.com/developerworks/cn/opensource/os-cn-bigdata-ambari/index.html Ambari 是什么 Ambar ...

  8. Android stdio Apktool源码编译

    Android Apktool源码编译 标签(空格分隔): Android Apktool 源码编译 需求 习惯NetBeans调试smali需要用Apktool反编译apk,需要用-d的参数才能生成 ...

  9. 使用Maven将Hadoop2.2.0源码编译成Eclipse项目

    编译环境: OS:RHEL 6.3 x64 Maven:3.2.1 Eclipse:Juno SR2 Linux x64 libprotoc:2.5.0 JDK:1.7.0_51 x64 步骤: 1. ...

随机推荐

  1. typedef struct 的用法

    typedef struct stu { int age; char name[20]; }stu,*pstu; stu stu1;相当于struct stu stu1; pstu pstu1;相当于 ...

  2. Spring Mybatis-分页插件使用

    Mybatis分页切入点 Mybatis内部有个plugins(插件)概念,本质上属于拦截器的思想.具体的解析可见外文MyBatis拦截器原理探究.本文将在此基础上直接展示实现代码和其他的相关解析 分 ...

  3. ajax同步与异步的坑

      之前工作中一个需求,需要动态的添加一组下拉菜单并为这个菜单绑定一个插件,很明显获取数据用Ajax,这本身是没错的,坑就坑在我用了 同步请求,当服务器端正确返回数据时再去执行下一个方法,这逻辑本身没 ...

  4. 安装php的memcached模块和扩展支持sasl

    memcached的1.2.4及以上增加了CAS(Check and Set)协议,对于同一key的多进行程的并发处理问题.这种情况其实根数据库很像,如果同时有几个进程对同一个表的同一数据进行更新的话 ...

  5. 插入排序Insertion Sort

    插入排序:将一个数据插入到一个已经排好序的有序数据序列中,从而得到一个新的.个数+1的有序数列:插入排序适用于少量数据排序,时间复杂度为O(n^2). 实现思路:1.对于一个无序数组,选取第一个元素, ...

  6. linux 获取CPU个数

    #include<stdio.h> #include<unistd.h> int main() { int cpu_num; cpu_num = sysconf(_SC_NPR ...

  7. java4 - 函数(方法)

    一.学习大纲: 1. 定义函数可以将功能封装 2. 函数的级别都是同级别的,不能进行函数套用 3. 便于对该功能进行复用 4. 函数只有被调用才能被执行 5. 函数的出现提高了代码的复用性 6. 函数 ...

  8. Linux的内核和权限

    1.内核包括的子系统是 : 进程管理系统 . 内存管理系统 . I/O管理系统 和文件管理系统  等四个子系统. 2.Linux系统中某个可执行文件属于root并且有setid,当一个普通用户 mik ...

  9. hive: join 遇到问题

    在表连接时遇到一个问题: insert overwrite table BF_EVT_CRD_CRT_TRAD2 select BF_EVT_CRD_CRT_TRAD.*, jjkdjk.CUST_N ...

  10. 1.1 PCI总线的组成结构

    如上文所述,PCI总线作为处理器系统的局部总线,是处理器系统的一个组成部件,讲述PCI总线的组成结构不能离开处理器系统这个大环境.在一个处理器系统中,与PCI总线相关的模块如图1?1所示. 如图1?1 ...