/ Android

在 Fedora 27 上为OnePlus One编译LineageOS 14.1

环境 & 设备

编译用的PC为Acer E5-572G-528R

硬件配置:

Intel Core i5-4210M
8GB DDR3L 1600MHz (4GBx2)
Liteon V5S 256GB SATA3 SSD( Fedora 的系统主体安装位置)
WD 1TB 5400rpm HDD(该机最早配置的硬盘,已挪动到光驱位置,光驱位接口为 SATA2)
WD 500GB 7200rpm HDD(通过 USB3.0 硬盘座连接至PC)

在AOSP官方的文档之中,推荐的RAM容量为至少16GB,而LineageOS的文档中推荐的最小RAM容量为8GB。经过实际尝试,8GB完全不够用,后续会说明。

环境配置

我并未使用Google和LineageOS推荐的Ubuntu作为编译用的操作系统,我是根据XDA的这一篇向导进行了在Fedora 27下的配置,实际上可行。

除去和LineageOS/AOSP的构建向导中重复的部分,这里需要执行以下两步:

1.升级当前系统内的组件

sudo dnf update

2.安装编译所需的包

sudo dnf -y install zip curl gcc gcc-c++ flex bison gperf glibc-devel.{x86_64,i686} zlib-devel.{x86_64,i686} ncurses-devel.i686 libX11-devel.i686 libstdc++.i686 readline-devel.i686 libXrender.i686 libXrandr.i686 perl-Digest-MD5-File python-markdown mesa-libGL-devel.i686 git schedtool pngcrush ncurses-compat-libs java-1.8.0-openjdk-devel xz-lzma-compat

补充:LineageOS的编译还需要一个ImageMagick的支持,因此需要按如下方式安装:

sudo dnf install ImageMagick

然后按照正常的代码同步流程使用repo操作即可,此处不再说明。为了存储源码和后续的编译操作,我在外接的500GB HDD中分出了250GB用于这次操作。并且,我预留了20GB的swap分区(对于8GB这个小得可怜的RAM容量,swap真的是必要的)

为OnePlus One构建LineageOS所需的device tree等资源也在其构建向导中提供。

编译

在源码全部准备完成之后,切换到LineageOS源码仓库所在目录,执行:

source build/envsetup.sh && brunch bacon

即可开始编译。

在第一次尝试时,我没有做任何的参数修改直接开始了编译,在我第二天早上起床之后才发现编译失败的结果,经过查询和考虑到前一晚发现内存长时间处于爆满状态之后,决定禁用ninja:

export USE_NINJA=false

然后重新开始编译,最终耗时2小时41分钟完成编译。
在编译过程当中,8GB RAM在后半段编译过程中出现了100%利用率的情况,swap最大占用为2.7GB。其实swap分区预留8GB可能已经完全足够了。

刷写

这里就和使用官方提供的zip刷写没有什么区别了。写入后成功开机,功能无异常。