记:关于Lineageos最新分支编译的众多隐坑

成功!

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 设备编译

此时,基本上所以的源码都已经完成,而下面就是对机器的最终考验:编译!

从日志上看,编译流程大概是:

Created with Raphaël 2.2.0 开始编译指令 预准备环境检查 环境软件预编译 基础文件空间编译 应用软件集体编译 设备初始化引导参数生成 根据前面的成果生成镜像文件并签名 并和镜像文件进行打包 清空环境垃圾

编译指令为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最新分支编译的众多隐坑,更多文章可进入我的博客详查。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GreenDreamer

如果帮到了你,还望请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值