0x00 概论
历时4天,踩了所有的数据大坑,坑了清华源与GitHub近400GB的数据流量,在此表示抱歉……终于总结出来一个现阶段可以实现的编译与完整的同步必坑的文章。
阅读本文之前,您需要掌握的技能有:
技能名称 | 技能熟练度 | 技能教程链接 |
---|---|---|
Linux操作 | 了解 | 暂无 |
0x01前言之可看可不看的换源更新
因为某些原因,使用的外部源而不是当前的官方源,但是操作与官方源其实并无二致,如果使用官方源的情况下就不需要参考这些东西。可以直接去第二步。
个人手机是Chiron,所以这里参考了我的手机官方的链接: 官方教程。这里的讲述基本上可以帮助我完成90%以上的工作。
首先,需要一个靠谱的Linux,我个人比较喜欢Debian,所以下面的所有讲述都是按照Debian进行操作演示。而且全部的操作都定义在code的文件夹下的。
在确保源正常的情况下,使用APT包管理器进行安装,如果使用的是yum也可以直接使用yum安装
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 libncurses5-dev libsdl1.2-dev libssl-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc zip zlib1g-dev openjdk-11-jdk
这里要提一点,官方推荐的openjdk是7.0,但是实际测试发现Debian的openjdk11也是可以的。
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ./bin/repo
sudo chmod a+x ./bin/repo
mkdir lineage
cd lineage
并将repo加入环境变量文件~/.profile
中
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
然后就进行repo配置拖取
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/lineageOS/LineageOS/android.git -b lineage-17.1
随后进入./.repo/manifests/default.xml
,将
<remote name="github"
fetch=".."
review="review.lineageos.org" />
修改成
<remote name="github"
fetch="https://github.com/" />
<remote name="lineage"
fetch="https://mirrors.tuna.tsinghua.edu.cn/git/lineageOS/"
review="review.lineageos.org" />
将
<remote name="aosp"
fetch="https://android.googlesource.com"
改成
<remote name="aosp"
fetch="https://aosp.tuna.tsinghua.edu.cn"
将
<default revision="..."
remote="github
改成
<default revision="..."
remote="lineage"
这里需要注意的是,因为清华源的教程更新的较慢,现在lineage-os的repo配置已经更新为更加分层的方式,所以原本教程的manifest.xml里面仅包含着default.xml,进入manifests文件夹才可以找到default.xml.
随后需要加入REPO_URL="https://mirrors.tuna.tsinghua.edu.cn/git/git-repo"到环境内
export REPO_URL="https://mirrors.tuna.tsinghua.edu.cn/git/git-repo"
这样就可以直接进行repo sync
拖下库。在100M的宽带下大约需要70GB与4个小时的时间。
0x02 编译前准备
个人手机是Chiron,所以这里参考了我的手机官方的链接。https://wiki.lineageos.org/devices/chiron/build。这里的讲述基本上可以帮助我完成90%以上的工作。
首先,需要一个靠谱的Linux,我个人比较喜欢Debian,所以下面的所有讲述都是按照Debian进行操作演示。而且全部的操作都定义在code的文件夹下的。
在确保源正常的情况下,使用APT包管理器进行安装,如果使用的是yum也可以直接使用yum安装
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 libncurses5-dev libsdl1.2-dev libssl-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc zip zlib1g-dev openjdk-11-jdk
这里要提一点,官方推荐的openjdk是7.0,但是实际测试发现Debian的openjdk11也是可以的。
curl https://storage.googleapis.com/git-repo-downloads/repo > ./bin/repo
sudo chmod a+x ./bin/repo
mkdir lineage
cd lineage
并将repo加入环境变量文件~/.profile
中
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
这样就可以直接进行repo sync
拖下库。在100M的宽带下大约需要150GB与4个小时的时间。
进行设备元数据的获取与内核设置文件的读取。
在保证有手机的情况下,可以使用adb shell进行数据传输,从手机内取得设备元数据,但是需要adb su的权限。在此之前必须要临时关闭selinux,否则可能出现某些奇奇怪怪的错误,还需要安装patchelf,否则会有某些so文件无法传输。至于adb文件,可以自行百度搜索安装方式,此处不再赘述。
sudo apt install patchelf
adb shell setenforce 0
source ./build/envsetup.sh
cd ./device/xiaomi/chiron
./extract-files.sh
强烈建议第一次编译的时候先进行这个操作,之后在进行后面的操作,否则会在后面莫名其妙的报错。
上面的setenforce是关闭selinux的操作,记得在获取设备元数据之后再将其打开!!!
随后再回退到code文件夹内,再执行breakfast chiron
进行前菜操作。此操作会创建.repo/local_manifests/内创建一个仓库列表文件,专门存储设备内核设置文件的仓库地址。这个时候如果出现错误,就请进行之前的获取设备元数据的操作哟。做好仓库地址之后,软件会自动化同步,此时如果使用了别的源的话,需要停止自动同步,并将文件内部的remote="lineage"
修改为需要的参数。否则,就会到GitHub的原始源上面去下载,而小米的msm8998仓库约有500000的文件,因此数据还是比较大的。
修改完成后即可以进行同步repo sync
,此时就会将仓库同步。此时已经完成了对源码仓库的构建。
0x03 设备编译
此时,基本上所以的源码都已经完成,而下面就是对机器的最终考验:编译!
从日志上看,编译流程大概是:
编译指令为croot && brunch chiron
其中,官方说法是开放ccache会更好些,但是经过实测,可能是我64GB的内存导致ccache似乎并没有什么用,全部流程走完也只用了6GB不到。
0x13 可开可不开的CCACHE
在待编译的终端窗口内输入:
export USE_CCACHE=1
export CCACHE_EXEC=/usr/bin/ccache
export CCACHE_COMPRESS=1
随后直接输入ccache -M 10G
即可,之后可以使用ccache -s
查看输出的参数:
cache directory /code/.ccache
primary config /code/.ccache/ccache.conf
secondary config (readonly) /usr/local/etc/ccache.conf
stats updated Tue Jun 30 22:16:49 2020
cache hit (direct) 48036
cache hit (preprocessed) 547
cache miss 51331
cache hit rate 48.62 %
called for link 294
called for preprocessing 1217
unsupported code directive 9
no input file 568
cleanups performed 0
files in cache 153861
cache size 5.4 GB
max cache size 50.0 GB
开完ccache即可进行croot && brunch chiron
,进行编译。
等待一段时间后一般都会提示编译成功,此时你将获得一个zip压缩包,以及一个recovery的镜像可以刷进手机。
更多
本文首发自 记:关于Lineageos最新分支编译的众多隐坑,更多文章可进入我的博客详查。