一、前言

这篇教程主要偏小白向,因为我本人就是小白,故内容并不会很复杂。因个人水平有限,如果有疏漏和错误,还望大佬斧正。

首先是为什么要自己编译?

如果你的设备有官方的支持,就是offcial的rom包,并且有ota更新。如果你没有相关的需要,那直接用现成的就好。它们很稳定,而且有完善的技术支持,没必要费时费力搞这个。

但是,如果你希望对Android有更深入的了解,出于学习的目的,或者自己的设备没有自己喜欢的rom的官方支持,亦或是需要对系统做一些自定义。

那自己编译,从源码改,就可以省很多事,并且可以有效避免root或者Xposed带来的安全风险。

那么,正题开始~

二、前期准备工作

1、硬件和系统要求

首先,你需要一个Linux发行版,虚拟机或者实体机都可以,再或者直接vps也是可以的。

官方推荐的是Ubuntu,其它的当然也是可以的,不过我感觉Debian更好点。
这部分你们自己找教程。

配置方面,官方要求的内存至少是16G。如果你实在没有内存,搭配swap或zram也是可以的。但是仍然至少需要12G的物理内存,8G在编译framework时,铁定会内存不足报错。

硬盘方面,建议留250G的空间。

CPU越强越好,不嫌多.....

2、同步源码以及编译环境配置

这里以lineage os为例:

由于Android的源码托管在一个一个远程厂库里,很显然,那么多的厂库和版本,不可能人工一个一个同步下来,所以我们把这个交给一个工具来办,他的名字叫做repo。


Repo is a tool that we built on top of Git. Repo helps us manage the many Git repositories, does the uploads to our revision control system, and automates parts of the Android development workflow. Repo is not meant to replace Git, only to make it easier to work with Git in the context of Android. The repo command is an executable Python script that you can put anywhere in your path.

因为repo本质上是个拿Python写的脚本,所以要运行的话还需要Python的执行环境。

sudo apt install python

创建两个文件夹用来存放repo和下载的代码。

mkdir bin lineage

按照谷歌的描述,某些发行版软件厂库里有这个工具,那么你可以直接使用包管理器安装。

详情请移步谷歌的官方说明

我们还是用通用的来手动下载吧,

把repo下载到bin文件夹:

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

其实这些都有国内的镜像源,具体的使用说明可以看这里

这些都搞完了,然后就开始准备拉lineage的代码了

首先进入你刚刚创建的准备存放源码的目录:

cd ~/lineage

然后初始化仓库

repo init -u https://github.com/LineageOS/android.git -b lineage-19.1

-b后面跟的就是你想要同步的分支名

因为国内有镜像,我们可以改一下清单文件,这样可以减少我们代理的流量消耗。

打开你刚刚创建的lineage文件夹,里面有一个.repo的目录

截图 20220520 171449.png

找到里面的default.xml文件

把里面的:

<remote  name="aosp"
           fetch="https://android.googlesource.com"

改成:

<remote  name="aosp"
           fetch="https://mirrors.bfsu.edu.cn/git/AOSP/"

这里用的是北外的源

截图 20220520 171859.png

如果你是土豪,请随意。

然后开始同步代码:

repo sync

等待时间取决于你的网速和磁盘速度,当你看到repo sync successful的提示就完成了。

像这样:
截图 20220520 211609.png

编译环境配置

安装这些依赖:

sudo apt install bc bison build-essential ccache curl flex g++-multilib gcc-multilib git gnupg gperf imagemagick lib32ncurses5-dev lib32readline-dev lib32z1-dev liblz4-tool libncurses5 libncurses5-dev libsdl1.2-dev libssl-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc zip zlib1g-dev

开始编译

启用ccache编译缓存,可以加快后面的编译速度。
这里我设置50G的缓存

export USE_CCACHE=1
export CCACHE_EXEC=/usr/bin/ccache
ccache -M 50G

初始化编译环境:

source build/envsetup.sh

如果你的设备有官方支持
那就

breakfast 你的设备代号

他会自动同步设备所需要的代码。

具体看这个

Q.E.D.