背景是我在 xda 上发现了一个很不错的小米平板 4 的 ROM:[ROM][12.1][clover] LineageOS 19 for Xiaomi Mi Pad 4 [UNOFFICIAL] (opens new window),刷入一把发现内核没有集成 WireGuard,从 defconfig: clover: Disable WireGuard support (opens new window) 看到似乎是作者主动禁用了 WireGuard 相关内容。咱也不知道为啥(不懂 Android 开发,更不懂系统相关的开发了),索性我把这一行的 Commit revert 掉,编译个新的好了。
本文记录了相关的踩坑过程(这是构建完成后的回顾记录,不能保证一定通过,但能减少一些坑了)。
如果你也需要内核支持 WireGuard 的版本,可以直接从 https://sourceforge.net/projects/xiaomipad4-clover-lineageos/files/lineageos-19.1/ (opens new window) 下载,我已经上传好了。
# 环境准备
关于如何构建的文档其实随便在 LineageOS 上找个设备都有,比如 k30s 的 https://wiki.lineageos.org/devices/apollon/build(务必结合这个官方文档阅读,这里是补充说明)。
首先安装 adb
等工具,详细参见:https://wiki.archlinux.org/title/Android:
yay -S android-sdk-platform-tools
文档给出的是 Ubuntu 下需要安装的依赖,这里已经有人在 AUR 上配置好了:
yay -S lineageos-devel
sudo pacman -S libxcrypt-compat
libxcrypt-compat
是为了解决:error while loading shared libraries: libcrypto.so.1: cannot open shared object file: No such file or directory
。
可能还需要开启 32 位支持,参见:Arch Linux 安装使用教程 - 6.开启 32 位支持库 (opens new window)。
# 源码准备
参照官方 Wiki 一路走到 Download the source code
之前,执行 repo sync
有几个注意事项:
- 一共会从 GitHub 和 Google 下载约 150-200G 的源码,小心代理流量崩了
- 最终完成包签名后,所有合计 250G,ccache 需要 50G,
/tmp
可能需要 10G,建议预留出 300G 的空间 - sync 命令可能要执行很久很久,需要耐心等待
# 构建
建议先找个官方支持的设备成功构建一次,因为我不确定下面的步骤是否会少些什么。
将如下内容放到文件 ~/android/lineage/.repo/local_manifests/roomservice.xml
中:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<project name="LineageOS/android_hardware_xiaomi" path="hardware/xiaomi" remote="github" />
<project name="DianQK/android_kernel_xiaomi_sdm660" path="kernel/xiaomi/sdm660" remote="github" />
<project name="DianQK/android_device_xiaomi_sdm660-common" path="device/xiaomi/sdm660-common" remote="github" />
<project name="kyasu/android_device_xiaomi_clover" path="device/xiaomi/clover" remote="github" />
<project name="kyasu/android_vendor_xiaomi_sdm660-common" path="vendor/xiaomi/sdm660-common" remote="github" />
<project name="kyasu/android_vendor_xiaomi_clover" path="vendor/xiaomi/clover" remote="github" />
</manifest>
再执行一次 repo sync
。
接下来走到 Prepare the device-specific code
环节,执行:
source build/envsetup.sh
breakfast clover
完成后跳到 Start the build
:
croot
brunch clover
如果一切顺利就能得到一个未签名的包。
签名过程参照 Signing Builds (opens new window) 即可,我已经修复了相关的报错。
如果在签名过程遇到 /tmp
磁盘不足,参见:Not enough space on /tmp (opens new window)。
这真是个大工程,希望后面有机会也能参与相关的开发(那应该要很远了吧)。
多亏了以下几个工程我才能解决 WireGuard 构建问题:
- https://github.com/xiaomi-sdm660/android_kernel_xiaomi_sdm660 (opens new window)
- https://github.com/pix106/android_kernel_xiaomi_sdm660_southwest (opens new window)
最后感觉签名后的版本好像比未签名的要卡一些的样子,可能是我的错觉吧,希望未来能有更合适的设备(660 确实感觉有点顶不住了),由于我不打游戏,能来一个 8 英寸,配置是 778G + 12G + 256G + LTE/5G,高素质 DC 调光的 LCD 屏幕就好了。