Build LineageOS for MIX2S

寒假期间买了 MIX2S,换掉了用了大概有3年的一加三。因为已经非常习惯使用原生 Android 系统,所以即便 MIUI 续航更加给力、功能更加丰富,我还是选择使用 LineageOS。目前 MIX2S 机型还没有官方编译版本,但是在 LineageOS 的 Github 仓库中已经有项目了,所以我尝试自己编译了一次。以下为整理出的编译 LineageOS 16.0 的过程。

搭建环境

使用的是 Ubuntu 18.04 LTS,需要至少200G硬盘空间。

安装依赖

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-dev libsdl1.2-dev libssl-dev libwxgtk3.0-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc zip zlib1g-dev repo adb openjdk-8-jdk

初始化仓库

mkdir -p ~/bin
mkdir -p ~/android/lineage
cd ~/android/lineage
repo init -u https://github.com/LineageOS/android.git -b lineage-16.0

感谢某网友提醒,这里可以使用清华 tuna 的镜像,这样下一步就不需要爱国上网了。具体可以参照官方帮助文档

下载源代码

repo sync

此步骤需要爱国上网,需要下载 30G+ 代码数据。

下载机型代码

mkdir -p ~/android/lineage/device/xiaomi
cd ~/android/lineage/device/xiaomi
git clone https://github.com/LineageOS/android_device_xiaomi_polaris.git polaris
git clone https://github.com/LineageOS/android_device_xiaomi_sdm845-common.git sdm845-common
mkdir -p ~/android/lineage/kernel/xiaomi
cd ~/android/lineage/kernel/xiaomi
git clone https://github.com/LineageOS/android_kernel_xiaomi_sdm845.git sdm845

此外还需要依赖一个 android_packages_resources_devicesettings 也需要同步。

mkdir -p ~/android/lineage/packages/resources
cd ~/android/lineage/packages/resources
git clone https://github.com/LineageOS/android_packages_resources_devicesettings.git -b lineage-16.0

可以把这些仓库写到 .repo/local_manifests/local_manifests.xml 里,这样在运行 repo sync 的时候会自动同步。

提取机型专有文件

从手机中提取

一般来说只要进入 ~/android/lineage/device/xiaomi/polaris文件夹,连上手机,然后运行 extract-files.sh ,脚本自动通过 adb 从手机中提取文件。但是我遇到了几个提取不到的文件,只好去 MIUI 的包里提取才搞定。

从刷机包中提取

新建一个临时文件夹

mkdir ~/android/system_dump/
cd ~/android/system_dump/

从刷机包中解压 system.transfer.list 和 system.new.dat。需要注意的就是可能有的包里 system.new.dat 是使用 Brotli 压缩过的 system.new.dat.br,需要先解压。

sudo apt install brotli
brotli -d system.new.dat.br -o system.new.dat

然后需要使用 sdat2img 将 block-based 的包转化成可挂载的 img 文件。

git clone https://github.com/xpirt/sdat2img
python sdat2img/sdat2img.py system.transfer.list system.new.dat system.img
mkdir system/
sudo mount system.img system/

然后再执行 extract-files.sh 脚本提取文件。

./extract-files.sh ~/android/system_dump/

提取完成后删除临时目录

sudo umount ~/android/system_dump/system
rm -rf ~/android/system_dump/

开启 CCACHE

export USE_CCACHE=1

当然也可以加入到 ~/.bashrc 中。然后设置 ccache 缓存上限。

ccache -M 50G

一般来说,如果只是编译一个机型,25GB-50GB就可以了。

开始编译

cd ~/android/lineage/
source build/envsetup.sh
brunch polaris

编译完成后

cd $OUT

就能找到刷机包了 lineage-16.0-20190222-UNOFFICIAL-polaris.zip

结语

总的来说,编译 LineageOS 并不是一件困难的事情,主要是需要耐心。毕竟代码都已经写好了,而我只是一个搬运工。

Leave a Reply

Your email address will not be published. Required fields are marked *