Ubuntu16.04编译Android10源码并刷机Pixel

一、环境描述

电脑配置:

  • 系统:Windows10
  • 内存:16GB
  • 硬盘:500GB

软件环境:

  • VirtualBox虚拟机
  • 虚拟配置:
    • 系统:Ubuntu16.04.7
    • 内存:9GB
    • 硬盘:300GB (编译完大概占用180GB)

二、 虚拟机安装与配置

2.1 虚拟机Ubuntu安装

虚拟机镜像选择,我使用的是ubuntu-16.04.7-server-amd64,这是服务器的镜像,没有Ubuntu桌面,相比ubuntu桌面版更为轻量。

安装细节,请参考安装教程参考:《virtualbox下安装ubuntu server 16.04》

在安装过程中,有一个步骤是勾选系统所带的服务。我们要选择ssh server,这样我们就不必再手动安装了。因为ssh服务开启之后,我们可以通过终端工具,轻松的控制虚拟机,而不必再虚拟机和宿主机之间频繁切换

2.2 系统配置与软件安装

2.2.1 设置root用户密码

root用户在Linux系统下,有着绝对权限。它就是Windows系统上的Adminstrator。如果系统是首次完成安装,则要设置一个密码,便于进入root用户下进行软件按着和设置管理。设置方式很简单,执行如下命令:

su passwd

接下来连续两次输入你想要的设置的密码,通过“Enter”键结束输入

如果以后想切换到root用户下,先键入su命令,回车,输入密码,再回车。

2.2.2 安装vim

vim 是linux系统上毫无疑问的位于Number One的文本编辑器:

sudo apt-get install vim

等待安装成功

2.2.2 修改apt源

当我们执行apt-get install 来安装某个软件,其本质上是去网上的某个位置下载软件,并进行安装。而这个网络中存储软件的地方就是“apt 源”。这种Ubunt进行源有很多:比如 清华大学、东北大学、阿里云、腾讯。我使用的是阿里云源。

# deb cdrom:[Ubuntu 16.04 LTS _Xenial Xerus_ - Release amd64 (20160420.1)]/ xenial main restricted
deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse #Added by software-properties
deb http://archive.canonical.com/ubuntu xenial partner
deb-src http://archive.canonical.com/ubuntu xenial partner
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse

直接将该内容存入到/etc/apt/source.list目录下。(强烈建议在修改之前,先拷贝一份,进行备份).最后执行apt update 更新apt 镜像源。

//备份
sudo cp /etc/apt/sources.list  /etc/apt/sources.list.bak

//编译
sudo vim /etc/apt/sources.list

//更新apt
sudo apt-get update

具体修改可参考《Ubuntu16.04 几个国内更新源》。

最最后,说一句不同版本的ubuntu,apt源内容不一样,请自行百度适配。

小技巧:
当我们通过apt-get install 下载某个软件较慢时,想要通过Control + z 取消下载.当我们再想使用apt-get install下载内容时,会提示 “…lock” 即某个文件被锁住。那么该如何处理呢?

答案:哪里有lock,就删除哪里

sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock

2.2.3 修改dns

你可能会有疑问,为什么要修改dns。因为dns响应速度也会影响你软件安装的快慢。我是北京联通网络,我会优先选择一个北京联通的dns:123.123.1233.123,阿里云体验不错,它们的dns也比较好记:223.5.5.5 和 223.6.6.6.

通过ping dns地址你会发现(在我使用的是联通宽带的情况下)北京联通dns是5ms左右,而阿里云大概15ms左右。

接下来说一下在哪里改dns:
答案是:"/etc/resolvconf/resolv.conf.d/base"

sudo vim /etc/resolvconf/resolv.conf.d/base

# 新增如下内容
nameserver 123.123.123.123
nameserver 223.5.5.5

2.2.4 安装python

Ubuntu16.04.7 自带python版本为2.7和3.5。在通过repo下载源码时,总是报错“ error unknown url type: https”,原因是这两个python的都没有依赖https模块。 因为解决这个问题最好的方式就是:安装带有https模块的python , 那么怎么安装呢?方式有两种:

a. 去官网下载python 3.6及其以上的tgz包,解压缩,自行编译带有ssl模块与安装

b. apt-get install python3.7 (建议改方式)

安装完python3.7, 你会发现你的机器中python的版本多达三个,并且执行python命令,系统使用的是python2.7;执行python3,系统使用的是python3.5。这和新安装的python3.7没有任何关联。接下来我们要使用软连接,将python3.7关联到python和python3命令。

# 移除原有python软连接
$ sudo rm /usr/bin/python

# 更换默认python3 的版本为3.7
$ sudo ln -s /usr/bin/python3.7 /usr/bin/python

# 移除原有python3软连接
$ sudo rm /usr/bin/python3

# 更换默认python3 的版本为3.7
$ sudo ln -s /usr/bin/python3.6 /usr/bin/python3

2.2.5 安装git并进行配置

sudo apt-get install git
git config --global  user.email "某个邮箱@163.com"
git config --global  user.name "某个名称"

2.3 编译环境的安装

2.3.1 openjdk8 安装

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

2.3.2 软件安装

sudo apt-get install git gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386  libgl1-mesa-dev g++-multilib tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 dpkg-dev
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
sudo apt-get install libssl-dev

对于这里要安装的原件,多多益善吧

2.3.3 软件安装

sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
sudo apt-get install ccache
source ~/.bashrc

对于这里要安装的原件,多多益善吧

2.3.4 设置swap区

我安装完系统,swap区默认是900多MB。在编译源码过程中,到了90%时OOM。由于物理内存有限只有8GB。只能通过swap区 来避免编译时OOM。
设置swap的文章很多,直接传送门-《Ubuntu添加swap分区》了,哈哈。

三、 源码下载

3.1 下载 repo

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

并将如下内容放入到~/.bashrc文件中

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

通过source使修改生效

source ~/.bashrc

3.2 下载android10源码

AOSP清华官网提供两种下载方式,我们选择比较传统的方式

建立工作目录:

mkdir WORKING_DIRECTORY
cd WORKING_DIRECTORY
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-10.0.0_r1

如果您想编译镜像给手机google原生手机用,那么久需要谨慎一点。因为这里有个规则。因为手机涉及到真是的驱动程序,需要先确定某个手机的驱动版本和android系统版本是否匹配。
先去查看系统与系统列表
在这里插入图片描述
再根据上图中,前面"QP1A.190711.019"去驱动列表下载对应的驱动,编译编译时使用。
Ubuntu16.04编译Android10源码并刷机Pixel_第1张图片
接下来就是同步代码咯

repo sync

四、 源码编译

经过上述的操作,现在系统已经有了完整的编译环境

4.1 驱动解压缩

因为我们是要往真实手机Pixel上安装的。

在这里插入图片描述
如上图所示,将两个驱动程序上传到Ubuntu服务器,并进行解压,得到两个脚本:
在这里插入图片描述
将两个脚本copy到源码所在目录[WORKING_DIRECTORY],并分别执行。得到vendor目录

4.2 编译

//1. 建立android-q开发分支:
repo start android_q --all

source build/envsetup.sh

lunch

输入lunch命令,等待提示 输入编译类型: 选择 sailfish***userdebug 对应的编号,我是16。

因为sailfish是 pixel机型的代号

编译,开启四个线程(如果你的机器好,可以看8线程)

make -j4

经过漫长的等待,7.5个小时,终于成功了
Ubuntu16.04编译Android10源码并刷机Pixel_第2张图片
总共占用物理磁盘181GB
Ubuntu16.04编译Android10源码并刷机Pixel_第3张图片
编译之后的输入镜像文件,其所在路径为"/out/target/product/sailfish"

输出的镜像文件:
在这里插入图片描述

五、 刷机

5.1 刷机基本操作

刷机教程参考文章,其核心步骤:

//1.进入fastboot模式
adb reboot bootloader  
//2.下载新编译好的镜像(略)
//3. 确保adb环境(略)
//3.1 如果是windows平台,请参考5.2节,否则如下配置生产out的目录 
export ANDROID_PRODUCT_OUT=/home/zhangbin/Aosp/out/target/product/sailfish
//4. 刷机
fastboot flashall -w 

Ubuntu16.04编译Android10源码并刷机Pixel_第4张图片

5.2 windows挂载 Ubuntu服务器

在进行刷机时,需要设置环境变量ANDROID_PRODUCT_OUT。 如果是windows 需要指向其编译机器下的镜像输出目录。要想实现共享,需要在Ubuntu Server上安装和配置samba服务器。

  1. samba服务器配置
  2. 在windows中,将服务器编译输出目录,映射为本地文件夹,编译访问
  3. 设置Windows环境变量
    Ubuntu16.04编译Android10源码并刷机Pixel_第5张图片

再 继续5.1节的刷机操作

你可能感兴趣的:(android系统,android10编译,Ubuntu16.04编译,VirtualBox编译源码,android10刷机,安卓源码编译)