编译lineageos1

编译lineageos1

lineageos 前奏 -- 搭建编译环境

我目前使用的手机是红米note4x 目前lineageos15.1已经官方支持,下文是按照官网文档编译安装包操作总结

构建环境搭建主要参考官方文档
参考文档: https://wiki.lineageos.org/devices/mido/build

下面对主要步骤进行简单说明(以ubuntu为例)

依赖软件包 (ubuntu16.04测试官网给出的列表完整)

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

低于ubuntu16.04需要将libwxgtk3.0-dev 换成 libwxgtk2.8-dev

java环境

官网给出的说明

LineageOS 14.1-15.1: OpenJDK 1.8 (install openjdk-8-jdk)
LineageOS 11.0-13.0: OpenJDK 1.7 (install openjdk-7-jdk)*

ubuntu16.04默认java是jdk8, 所以直接apt-get install openjdk-default-jdk 或者 apt-get install openjdk-8-jdk
对于ubuntu14.04默认软件仓库jdk最高只有jdk7,不足以编译lineageos14.1-15.1
这里推荐android官网的解决方案https://source.android.com/setup/build/initializing#installing-the-jdk
直接下载三个对应的debian包进行安装(不必另外添加ppa源对有洁癖的人来说总是好事),这里的jdk版本比较老了,当然也可以直接从oracle官网下载安装(建议还是直接ubuntu16.04,免除不必要的麻烦)

openjdk-8-jre-headless_8u45-b14-1_amd64.deb with SHA256 0f5aba8db39088283b51e00054813063173a4d8809f70033976f83e214ab56c0
openjdk-8-jre_8u45-b14-1_amd64.deb with SHA256 9ef76c4562d39432b69baf6c18f199707c5c56a5b4566847df908b7d74e15849
openjdk-8-jdk_8u45-b14-1_amd64.deb with SHA256 6e47215cf6205aa829e6a0a64985075bd29d1f428a4006a80c9db371c2fc3c4c

安装repo和同步源码仓库

这个没什么好说的,建议开个vps直接编译,这里顺便说下我开了一个6核12G内存的机器编译大概花了4个小时完成,设置了30G的ccache,硬盘最好在200G左右,我第一次设置150G造成硬盘用尽
真的想自己机器编译的或者类似情况的可以考虑使用清华大学或者中科大的源进行加速
这是帮助文档 https://mirrors.tuna.tsinghua.edu.cn/help/lineageOS/

提取设备专有内容

可能像pixel这些设备不需要吧 Some devices require a vendor directory to be populated before breakfast will succeed
对于红米note4x是需要的,因为在vps上编译所以采用下载已有zip包并解包的方式,操作参考 https://wiki.lineageos.org/extracting_blobs_from_zips.html
在这里有个地方需要注意,google在lineageos15.1里面的system.transfer.dat已经改成用brotli压缩了,执行unzip -l path/to/lineage-*.zip你将发现对应的文件是system.transfer.dat.br
所以需要使用brotli先进行解压,解压工具下载地址 https://android.googlesource.com/platform/external/brotli/
brotli官网提供了好几种安装方式,这里采用Autotools-style CMake的方式(cmake不在上面的必须软件列表里面,这里需要单独安装),当然也可以尝试直接用python的pip安装

$ mkdir out && cd out
$ ../configure-cmake
$ make
$ make test
$ make install

安装完brotli解压工具后,使用 brotli -d system.new.dat.br -o system.new.dat进行解压即可

另外对于上面的内容还有个问题需要说明
这步操作的时候sudo mount system.img system/可以先检测system.img是不是有问题 file system.img看返回是否正常,如果只是简单的data文件,那么上一步的解压可能存在问题
挂载好system.img后还有个问题,挂载目录下面的vendor是个链接文件,指向 /vendor, 看lineageos官网的介绍好像主要是复制vendor里面的内容,而system.img里面并没有这个文件,查看zip包内容unzip -l path/to/lineage-*.zip会发现有个 vendor.new.dat.dr文件,猜测这个就是我们需要的文件,按照上面操作 system.new.dat.dr 文件的步骤再次执行,并挂载到 /vendor 目录即可,后面运行正常无报错

最后

后面就没有什么问题了,等了4个小时,提取 out/target/product 里面的生成文件就可以了
还有个小问题,手机刷入安装包的时候在twrp里面一直找不到zip包,无法挂载手机data分区
最后无奈,将data分区重新格式化,利用adb将zip安装包上传上去,重新刷入

这里有经验的小伙伴可能看出问题了, 是的我格式化了data分区,手机所有数据已丢失 (手动滑稽)
如果你哪天发现我电话打不通,即时聊天软件长时间无回应,那么我可能正在努力修手机中

番外

这里基本都是遵循官网给出的文档进行操作,没有做任何个人修改。后期有时间我将进一步整理lineageos的内容
未完。。。待续。。等。