1. 为什么选择LineageOS和一加9R
作为一名长期折腾Android设备的玩家,我最近完成了在一加9R上编译并烧录LineageOS的全过程。选择这个组合有几个重要原因:一加9R搭载的高通骁龙870处理器性能强劲且发热控制优秀,官方提供的设备树和内核源码相对完整;而LineageOS作为CyanogenMod的继任者,是目前最活跃的第三方ROM项目之一,对开发者非常友好。
重要提示:整个编译过程需要至少200GB的磁盘空间和16GB以上内存,建议使用SSD以大幅缩短编译时间。我的配置是Ubuntu 20.04 LTS + 32GB内存 + 1TB NVMe SSD,完整编译耗时约3小时。
2. 环境准备与源码获取
2.1 基础环境搭建
首先需要准备一台运行Ubuntu 20.04的电脑(物理机或虚拟机均可)。以下是必须安装的依赖包:
sudo apt update && sudo apt install -y \ git-core gnupg flex bison build-essential zip curl zlib1g-dev \ gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev \ x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev \ libxml2-utils xsltproc unzip fontconfig python3 android-tools-adb特别要注意的是Java环境的选择。LineageOS 19.1(基于Android 12)需要OpenJDK 11:
sudo apt install -y openjdk-11-jdk2.2 源码仓库初始化
创建工作目录并初始化repo工具:
mkdir -p ~/lineage && cd ~/lineage repo init -u https://github.com/LineageOS/android.git -b lineage-19.1一加9R(代号"lemonades")的设备树和厂商文件需要单独添加:
git clone https://github.com/LineageOS/android_device_oneplus_lemonades.git -b lineage-19.1 device/oneplus/lemonades git clone https://github.com/LineageOS/android_device_oneplus_sm8350-common.git -b lineage-19.1 device/oneplus/sm8350-common git clone https://github.com/LineageOS/android_kernel_oneplus_sm8350.git -b lineage-19.1 kernel/oneplus/sm8350 git clone https://github.com/TheMuppets/proprietary_vendor_oneplus.git -b lineage-19.1 vendor/oneplus2.3 源码同步技巧
由于Android源码体积庞大(约80GB),同步时建议:
repo sync -j$(nproc --all) --force-sync --no-clone-bundle --no-tags遇到网络问题时可以使用清华镜像源:
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/lineageOS/Android.git -b lineage-19.13. 设备解锁与准备工作
3.1 Bootloader解锁
一加9R需要先解锁Bootloader才能刷入第三方ROM:
- 进入开发者选项(设置→关于手机→连续点击版本号7次)
- 启用OEM解锁和USB调试
- 连接电脑并执行:
adb reboot bootloader fastboot oem unlock
警告:解锁会清除手机所有数据!请先备份重要文件。
3.2 刷入临时Recovery
LineageOS官方推荐使用他们修改版的TWRP作为临时Recovery:
fastboot flash boot lineage-19.1-20230315-recovery-lemonades.img fastboot reboot recovery在Recovery中需要格式化data分区(不是普通wipe),因为加密分区与新系统不兼容。
4. 编译过程详解
4.1 初始化编译环境
在源码根目录执行:
source build/envsetup.sh lunch lineage_lemonades-userdebug关键点解析:
userdebug版本会保留root权限和调试功能- 如果只想编译特定模块(如内核),可以使用
m kernel命令
4.2 解决常见编译错误
编译过程中可能会遇到以下问题:
Java堆内存不足:
export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx8g" ./prebuilts/sdk/tools/jack-admin kill-server ./prebuilts/sdk/tools/jack-admin start-serverNinja版本冲突:
sudo apt remove ninja-build ln -s $(which ninja) prebuilts/build-tools/linux-x86/bin/Python3兼容性问题:
export PYTHONPATH=/usr/lib/python3.8
4.3 编译优化技巧
启用ccache加速后续编译:
export USE_CCACHE=1 export CCACHE_EXEC=/usr/bin/ccache ccache -M 50G跳过API检查(仅限个人开发):
export SKIP_API_CHECKS=true并行编译(根据CPU核心数调整):
make -j$(nproc --all) bacon
5. 刷机与问题排查
5.1 生成镜像文件
成功编译后,输出文件位于:
out/target/product/lemonades/lineage-19.1-*.zip同时会生成以下关键分区镜像:
- boot.img
- dtbo.img
- vendor_boot.img
- system.img
5.2 刷机步骤
进入fastboot模式:
adb reboot bootloader刷入镜像:
fastboot flash boot boot.img fastboot flash dtbo dtbo.img fastboot flash vendor_boot vendor_boot.img fastboot reboot fastboot fastboot flash system system.img fastboot -w fastboot reboot
5.3 常见问题解决
问题1:刷机后卡在启动动画
- 可能是vendor镜像不匹配,尝试重新刷入官方ROM的vendor分区
- 检查是否执行了
fastboot -w清除数据
问题2:WiFi或蓝牙无法工作
- 确保刷入了对应版本的vendor镜像
- 检查selinux状态:
adb shell getenforce
问题3:传感器失效
- 需要校准传感器:
adb shell pm enable com.qualcomm.location adb shell am start -n com.qualcomm.location/com.qualcomm.location.XTProxyActivity
6. 系统定制与优化
6.1 添加Root权限
LineageOS默认不包含root,需要刷入额外的su包:
adb sideload lineage-19.1-*-addonsu-arm64.zip然后在开发者选项中启用root权限。
6.2 内核参数调整
修改kernel/oneplus/sm8350/arch/arm64/configs/vendor/lemonades_defconfig:
CONFIG_MSM_SLEEP_STATS_DEBUG=n CONFIG_OPLUS_FEATURE_SUGOV=n CONFIG_SCHED_WALT=y这些调整可以改善续航和性能平衡。
6.3 移除预装应用
编辑device/oneplus/lemonades/lineage_lemonades.mk,删除不需要的PRODUCT_PACKAGES条目。
7. 后续维护与升级
7.1 增量更新
后续编译可以使用增量更新节省时间:
repo sync make installclean make -j$(nproc --all) bacon7.2 版本回滚
如果新版本有问题,可以刷入之前的构建:
adb sideload lineage-19.1-20230315-nightly-lemonades-signed.zip7.3 参与社区开发
建议将自己修改的代码提交到Gerrit:
repo upload我在实际编译过程中发现,一加9R的触摸采样率默认设置偏低(180Hz),通过修改device/oneplus/lemonades/overlay/frameworks/base/core/res/res/values/config.xml中的config_pointerCaptureTapSlop可以提升触控响应速度。另外,适当降低GPU最低频率也能显著改善日常使用的续航表现。