给 Pixel6 构建 LineageOS 21.0

给 Pixel6 构建 LineageOS 21.0

封面:Pixiv@わろじく

之前已经构建过一次了,但没有写blog记录,现在记录一下从头开始,给Pixel6 构建基于 Android14 的 LineageOS

准备

按照官方文档 https://wiki.lineageos.org/devices/oriole/build/ 进行操作,这里选择Ubuntu20.04进行操作,避免环境上的更多问题,反正就是 apt 安装环境然后配置,repo之类的可以配置一下镜像

拉取代码

把文档修改成要拉取的分支lineage-21.0,改成清华源

1
2
cd ~/android/lineage
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/lineageOS/LineageOS/android.git -b lineage-21.0 --git-lfs --no-clone-bundle

然后参考清华源的文档https://mirrors.tuna.tsinghua.edu.cn/help/lineageOS/修改 xml 文件

mirrors

然后同步代码

1
repo sync -j4

就可以漫长等待了

准备专有二进制

拉取完代码后,继续按照 LineageOS 文档操作

1
2
3
4
cd ~/android/lineage
source build/envsetup.sh
croot
breakfast oriole

这个步骤貌似没走镜像,建议开着代理。然后就会收到报错

breakfast

这时候你需要一台运行着 LineageOS 的手机,或者找 LineageOS 刷机包解出来。很遗憾的是,LineageOS 不对旧版本刷机包提供存档,只能找别人收集的 https://lineage-archive.timschumi.net/#oriole。我这里用的是lineage-21.0-20241223-nightly-oriole-signed.zip

没有extract-files.py,刷机包只有payload.bin,因此按照https://wiki.lineageos.org/extracting_blobs_from_zips_manually#extracting-files-from-payload-based-otas来提取

然后就会发现行不通,妈的怎么文档不一样了 https://github.com/LineageOS/lineage_wiki/commit/0c60a8a6bc6b9321185be6e54ffa0c815b32991e

反正就是挂载system.imgsystem/,然后尝试把剩下其他的 img 挂载到system/里面,能挂载的都挂载上,不能挂载就算了

然后到~/android/lineage/device/google/oriole下面运行

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

然后包出问题的

error1

解出来的包并没有bootloader-*.img的文件,搜索发现abl.imgbl1.imgbl2.img等已经是解出来的。查看extract_files.sh文件,可以发现里面调用了prepare-firmware.sh,里面调用 fbpacktool 解包 bootloader,因此可以直接把这行注释掉。文件路径如下

1
~/android/lineage/lineage/scripts/pixel/prepare-firmware.sh

fix1

重新运行

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

然后

1
2
croot
breakfast oriole

开始构建

按照文档

1
2
croot
brunch oriole

当然不会这么顺利

error2

发生了些冲突

~/android/lineage/device/google/raviole/oriole/proprietary-files-vendor.txt里,可以看到发生了变更,这是前面extract-files.sh导致的

经过分析,可以通过在~/android/lineage/device/google/raviole/oriole/skip-files-vendor.txt添加上运行extract-files.sh要排除的文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Exclude specific files which may cause build errors
lib64/vendor.lineage.health-V1-ndk.so
lib64/vendor.lineage.powershare@1.0.so
lib64/vendor.lineage.touch@1.0.so
bin/erase_modemlog.sh
etc/vintf/manifest/vendor.lineage.health-service.default.xml
etc/vintf/manifest/vendor.lineage.powershare@1.0-service.pixel.xml
etc/vintf/manifest/vendor.lineage.touch@1.0-service.pixel.xml
bin/hw/vendor.lineage.health-service.default
bin/hw/vendor.lineage.powershare@1.0-service.pixel
bin/hw/vendor.lineage.touch@1.0-service.pixel
etc/init/vendor.lineage.health-service.default.rc
etc/init/vendor.lineage.powershare@1.0-service.pixel.rc
etc/init/vendor.lineage.touch@1.0-service.pixel.rc
etc/init/erase_modemlog.rc
etc/res/images/charger/percent_font.png

然后重新运行

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

再重新运行

1
2
croot
brunch oriole

我配置 24G RAM + 24G SWAP,仍然有爆内存的情况

OOM1

OOM2

后面修改成 24 + 48 终于没爆了,推荐 64GB 内存编译

然后等就是了

最后构建出来的刷机包在~/android/lineage/out/target/product/oriole下面

测试

然后这一步应该清数据刷入真机测试一下的,懒得测了

本文作者:lrhtony
本文链接:https://lrhtony.cn/2025/12/15/Build-A-LineageOS/
版权声明:本文采用 CC BY-NC-SA 4.0 协议进行许可