前言

因为Evolution X这个单词比较难打,较长,所以我下文用“进化”来代表它。

为什么要自己构建进化呢,因为前几个月进化的一加7pro维护者不干了,不更新,于是7pro设备一下子打回解放前,震动,90hz刷新率全部不好使了,因为开源,所以想自己完成进化在一加7pro上面的构建,故写此教程。
我也看了许多其他有关的教程,和询问过其他人,来学习构建、编译

Android10 与 EvoX

这个构建与编译过程需要你耐心等待,安卓系统源码一共需要100G左右磁盘空间。

  • 你需要具备linux的一些操作基础,与一台性能强悍的电脑(性能越好,完成时间越短),和能够保持与GitHub连接通畅的网络。

提醒与要求

  • 这个教程介绍如何在linux上面构建安卓10,我使用乌班图(Ubuntu 20.04 LTS)来完成,所以命令以Ubuntu为主。
  • 你可以也使用你自己喜欢的linux发行版或者其他版本,但是你需要有一定的linux终端命令操作基础,教程中的命令不一定对你的发行版有效果,需要你自己转换成有效的命令。
  • 教程中出现前面有一个$的指令,则需要在您的终端窗口中运行该命令,执行时不要包括$$后面的空格。
  • 教程只适宜类原生ROM官方所支持的设备的编译构建。操作前请到ROM官方网站或者tg群等渠道确认是否支持,并且找到自己设备的代号,例子:一加7pro的代号为guacamole(其实如果不是官方所支持的设备要构建刷机包也可以,到时候我再补充,只是在构建和下载设备源码方面有所不同)
  • 计算机配置基本要求:
  1. 中央处理器(CPU)必须支持x64(或者amd64)指令集。
  2. 安装的linux操作系统必须为x86_64位(或者amd64)。
  3. 磁盘空间(/home分区)最好有200GB以上的空间。
  4. 运行内存最低8GB,建议拥有16GB以上较好。

如果你的计算机没有满足加粗部分的内容,绝对无法继续下面的操作,请更换符合要求的计算机。

配置编译与构建环境

安装git-core

$ sudo apt install git-core    #Ubuntu18.04的系统把apt改成apt-get

打开终端,通过apt命令,安装git-core

获取仓库脚本

通过git的克隆命令(clone),获取脚本

$ git clone https://github.com/akhilnarang/scripts

定位到脚本(scripts)的文件夹,并安装

$ cd scripts  #定位
$ bash setup/[1]  #安装脚本
  • 备注[1]:这个位置按照你的操作系统的发行版而异。
  • 如果是Ubuntu、mint类型的发行版,请在[1]这个位置替换成 android_build_env.sh
  • 如果是archlinux类型的发行版,请在[1]这个位置替换成 arch-manjaro.sh
  • 例如你的是archlinux,则执行 $ bash setup/arch-manjaro.sh

安装编译、构建工具程序

安装java 8

运行apt命令安装openjdk-8-jdk

$ sudo apt update	#可以先更新下系统软件包,可有可无
$ sudo apt install openjdk-8-jdk	#安装jdk
$ sudo apt install openjdk-8-jre	#如果安装好了jdk,一般来说jre也会安装好,但是还是运行一下怕遗漏

安装构建工具

运行apt命令安装下面的软件包

$ sudo apt-get install bc bison build-essential ccache curl flex g++-multilib gcc-multilib git-core gnupg gperf imagemagick lib32ncurses5-dev lib32z-dev libc6-dev-i386 libgl1-mesa-dev libssl-dev libx11-dev libxml2-utils unzip x11proto-core-dev xsltproc zip zlib1g-dev
# archlinux用户不用安装这个命令,看下面的提示
  • 命令里面的软件包名为(空白键为分隔):bc bison build-essential ccache curl flex g++-multilib gcc-multilib git-core gnupg gperf imagemagick lib32ncurses5-dev lib32z-dev libc6-dev-i386 libgl1-mesa-dev libssl-dev libx11-dev libxml2-utils unzip x11proto-core-dev xsltproc zip zlib1g-dev
  • 全部安装上
  • 如果你是archlinux用户,在Arch Wiki链接安装好官方文档要求的构建工具包,然后回到这里继续下面的内容

配置Repo和Git

  • 下面如果任何命令出现权限问题,请使用管理员身份执行(root)。
  • 因为进化是基于aosp,所以使用谷歌和git提供的仓库工具Repo,这个可以简单理解成类似于一个代码容器(或者仓库)。
  • 而git是仓库的控制系统,用来跟踪存储库中的更改。

下面使用curl命令来拉取Repo到本地,并且安装

$ curl https://storage.googleapis.com/git-repo-downloads/repo > repo  #拉取Repo
$ chmod a+x repo	#给予拉取的文件权限
$ sudo install repo /usr/local/bin	#安装Repo
$ rm repo	#安装完成之后保存Repo文件的文件夹无用了,删除

下面配置一下git,即可使得正常工作

$ git config --global user.name"[2]"
$ git config --global user.email"[3]"
  • 备注[2]:在命令中,[2]的位置替换为你的用户名(可以随便取)
  • 备注[3]:在命令中,[3]的位置替换为你的电子邮箱# 下载进化的源代码
  • 下面需要头脑清醒,情况复杂。

创建文件夹

  • 先为我们为接下来下载的源码创建一个容身之所(文件夹)
$ mkdir ~/[4]	#创建文件夹
$ cd ~/[4]	#定位到刚刚创建的文件夹
  • 备注[4]:这里给你的文件夹命名,用你的文件夹名称替换掉[4]
  • 在linux中,~/ 代表着是当前用户的文件夹,所以你创建的文件可以在你的用户文件夹目录中找到,所以下载的源码都在/home分区

下载源码

  • 下面,去寻找你想要编译的ROM的源码地址,联系ROM的维护者,或者团队可以问到,或者他们会发布出来;或者问其他编译过ROM的人。
  • 我这里是进化的源码地址:
    https://github.com/Evolution-X/manifest
  • 注意,源码地址是要在GitHub里面的,其他的源码托管平台是否支持未知。
  • 接下来因ROM而异,换汤不换药

接下来,使用浏览器打开源码的网址可以看到GitHub里面的列表
进化的主要代码库

接下来打开列表里面的 README.md文件,如图所示:
README.md的内容
我们只执行下面的命令:

$ repo init -u [5] -b ten	#初始化本地仓库
$ repo sync --force-sync -j$( nproc --all )	#同步
  • 备注[5]:这里填写你需要编译的ROM的源码地址就行了,将[5]替换掉。
  • 比如我要同步进化的源码,我就执行下面的命令来初始化仓库$ repo init -u https://github.com/Evolution-X/manifest -b ten
  • 执行了同步的命令之后,就可以开始耐心等待完成了,这取决于你的网络与Github的速度

关键:编译构建刷机包

配置ccache

  • 在构建之前,你需要配置一下ccache,这是编译器缓存,将先前已编译的代码存储,可以轻松地重新使用。这会极大加快地构建的时间。
  • 在ubuntu20.04中,如果执行下面命令提示找不到命令,可能说明ccache没有安装,所以直接用apt命令安装就好$ sudo apt install ccache

使用编辑器,打开用户的 ~/.bashrc文件,如果你的终端不是使用bash,那么请你自己找到等效的文件进行修改。

$ [6] ~/.bashrc
  • 备注[6]:这里是替换成你想使用的终端文本编辑器。
  • 如果我想用vim来打开这个文件,那么为执行命令为$ vim ~/.bashrc
  • 打开这个文件之后,在文本末尾新加一行,添加内容为USE_CCACHE=1

再执行 $ source ~/.bashrc让文件生效。

编译

加载编译环境
$ . build/envsetup.sh

  • 下面只介绍有官方维护的设备,我使用的是一加7pro,所以它的代号为guacamole

运行命令进行编译
$ brunch [7]

  • 备注[7]:这里填写你的设备代号,并替换掉[7]。
  • 比如说我的代号是guacamole,那么就执行$ brunch guacamole
  • 接下来就是漫长的等待。

编译完成,提取刷机包

编译完成后,可以在 ~/[4]/out/target/product/[7]的目录下找到你编译出来的刷机包.
就此,本教程到此结束
有再需要补充的地方再更新。


本教程参照了下面的教程