kira~☆ 本文将同步闪耀于 CSDN & 看雪论坛,请多指教!
最近闲得快要长蘑菇了,于是淘来一台二手 LG G8 ThinQ (代号是 alphaplus 哦~),打算让它成为我的新玩具... 啊不,是备用机!然后捏,一个大胆的想法突然降临:何不亲手为它打造一套 LineageOS 呢?
说干就干,冒险的帷幕,就此拉开!(•̀ㅂ•́)و✧
首先,得把我们的 Linux 小窝打造成适合编译魔法的环境。需要安装一些神秘的咒语。
本教程基于 Archlinux 魅魔,Ubuntu 小姐姐部分如果有误,请温柔地指出,我会立刻修正哒~ (没有特别标注的话,就是两个系统通用的咒语哦!)
!!!注意注意!!!编译的时候千万不要用 root 大人的权限,会引来不必要的麻烦哦!Σ( ° △ °|||)
For Archlinux 小伙伴:
For Ubuntu 小伙伴:
诶嘿嘿~ 想要让之后的编译快到飞起吗?那就快来召唤 Ccache 酱 这位时间魔法师吧!她能记住你编译过的东西,下次再编译同样的内容时,就能瞬间完成,大大缩短等待时间哦!(ノ´ヮ´)ノ*:・゚✧
要召唤 Ccache 酱,你需要咏唱以下咒语:
然后,记得把这两行神秘代码也添加到你的 ~/.bashrc (或者 ~/.zshrc,看你用哪个 Shell 啦) 文件里,这样每次打开终端,Ccache 酱就会自动准备好为你加速啦!
接下来,要告诉 Ccache 酱她能使用多少硬盘空间来存放她的编译产物。念这个咒语:
这里的 30G 就代表 Ccache 酱可以征用 30GB 的硬盘空间哦。这个咒语只需要成功咏唱 一次 就好~
Ccache 酱需要多大空间呢?
还有个小秘技!Ccache 酱的压缩魔法!
你可以选择开启 Ccache 酱的压缩模式!虽然这可能会让她的编译速度稍微慢一丢丢,但好处是能在同样的空间里塞下更多的缓存文件!更省空间了耶!
要开启压缩模式,就念这个咒语 (同样,只需一次):
小贴士: 如果开启了压缩模式,之前设定的缓存大小就可以适当调小一点啦 (比如只为一个设备编译的话,大概 20GB 可能就够用了~)
好啦!有了 Ccache 酱的加持,我们的编译大业就能更加顺畅啦!继续前进!➡️
就在咱的用户目录下建一个新家吧~
然后,瞬移进去!
我们选择清华大学的镜像作为主要传送点。(当然 BFSU 镜像在 LineageOS-21.0 时也能成功抵达终点,但 LineageOS-22.1 遇到了 VNDK33 无法召唤的问题,22.2 又遇到了奇怪的编译错误... 可能是版本更新太快,同步还没跟上?)
简单对比一下两大传送门 (截至我上次观察时... 诶~我上次观察是啥时候来着?):
结论: 清华更稳妥全面,但可能慢;BFSU 快但可能有坑。大家可以根据自己的网络情况和追求选择信仰!(当然,直连官方 GitHub/GoogleSource 的都是真·勇士!这件事实在是泰裤辣!)
这里以 BFSU 源为例 (因为它在我的 LineageOS-21 冒险中成功了嘛):
小小解说:
第一次进行大规模召唤 (拉取操作) 前,需要先跟 Git 大神报上名号:
先悄悄修改一下传送契约 .repo/manifests/default.xml:
把这段:
改成这样 (具体修改可以参考镜像站点的帮助文档):
然后,启动召唤法阵!
加 --no-clone-bundle 这个小咒语是为了防止某些调皮的仓库 (比如 Lineage_framework_base) 在同步时闹别扭,出现 bundle 错误。
召唤途中可能会遇到小波折,不要慌!按下 Ctrl + C 中断仪式,然后重新念咒:
如果还不行,试试更强硬的姿态:
但有时,会遇到极其可怕的恶性错误:
这是我在尝试召唤 LineageOS-22.1 时遇到的噩梦...
遇到这种级别的错误,基本就是绝境了... (偷偷用 git clone 塞东西到 .repo/project 里面?想都别想!repo 酱会用小皮鞭严厉惩罚每一个不听话的宝宝;中途更换代码源到 googlesource 或 github?她同样会惩罚那些三心二意的宝宝,必须对选择的源保持忠贞不渝!)
实在没办法了,可以试试这些最后的挣扎:
强制对问题仓库进行灵魂同步:
物理超度损坏的仓库,然后重新召唤:
如果以上都不行... 终极奥义:删库重来!
然后回到 Step 4,重新配置仓库 (repo init)。这次... 也许该考虑放弃国内镜像,直接拥抱官方源了 (虽然可能要经历漫长的等待... 大约 200GB 的数据量呢)。
之后,就是... 泡杯茶,看几集番,或者睡一觉吧... 等待法阵完成它的工作... 直到所有星辰归位... ✨
请务必查清你家设备的代号!可以去官方文档或者XDA这样的论坛找找看。
在 .repo 目录下创建一个叫做 local_manifests 的小文件夹。在里面新建一个文件,名字可以叫 <你的手机厂商>_manifest.xml (比如 lge_manifest.xml)。然后,参考下面的模板抄写咒语:
那么,这些神秘力量的地址在哪里找呢?
很简单!去 GitHub 这个大宝库里搜索关键词,比如:
很多机型的这些宝贝都可以在 TheMuppets (木偶大佬!) 的 GitHub 仓库下找到 (但不一定是最新的哦)。想要最新鲜的?直接在 GitHub 搜索框里搜,像这样:

点进搜索结果,找到看起来最靠谱的仓库(数量不多的话也可以依次查看,顺便看看作者有没有其他的库),然后去看看它的 Branches (分支) 页面:

选择与你的 LineageOS 版本 (比如 lineage-21) 相对应的那个分支,把仓库地址和分支名填到我们刚才的 .xml 文件里。
保存好 .xml 文件后,再次执行召唤仪式!
现在呢...
呐~ 你吃早餐了吗?要不要和可爱的 Android 酱共进早餐呢?
诶?同意了嘛?那... 把你手机的代号作为用餐券交给 Android 酱吧~
欸嘿,别忘了问 Android 酱的联系方式哦~ (虽然她可能不会直接告诉你)
嗯... 果然,傲娇的 Android 酱没有直接回应... 但没关系,我们可以用刚才的“用餐券”来正式邀请她共进早餐啦!
如果是第一次约 Android 酱吃早餐,她可能会需要从 GitHub 上拉取一些专属于你设备的材料 (device, hardware, kernel 等)。这时候可能需要你的魔法上网工具助力!如果开了代理(全局)还是卡住不动,就按 Ctrl + C 强制取消,然后重新邀请她吃早餐 (多试几次可能就好了)。

早餐过后,就是激动人心的早午餐 (Brunch) 时间!这才是正餐!

接下来,就是漫长而又悲壮的炼成时间... 期间你可能会经历:
不过不用太担心!即使编译中途电脑不幸牺牲,直接强制重启后,回到源码目录,重新执行 source build/envsetup.sh 和 brunch <你的设备代号>,编译大法师会从上次中断的地方继续施法 (有点像断点续传,超神奇!)。

坚持住!胜利的 BGM 终将奏响!—— 编译成功!

我们亲手炼成的 ROM 包就静静地躺在 ./out/target/product/<你的设备代号>/ 这个目录下。

好啦!快去把这份带着你心血和汗水的 ROM 刷入你的爱机吧!享受这份亲手创造的喜悦!(≧∇≦)
sudo pacman -Syyu
sudo pacman -S --needed base-devel git jdk17-openjdk python python-pip ccache \
libxml2 ncurses zlib openssl pngcrush schedtool imagemagick \
bc android-tools rsync wget unzip zip p7zip curl \
libxslt lz4 patchelf coreutils findutils gawk grep sed git git-lfs
sudo pacman -Syyu
sudo pacman -S --needed base-devel git jdk17-openjdk python python-pip ccache \
libxml2 ncurses zlib openssl pngcrush schedtool imagemagick \
bc android-tools rsync wget unzip zip p7zip curl \
libxslt lz4 patchelf coreutils findutils gawk grep sed git git-lfs
sudo apt update && sudo apt upgrade
sudo apt install bc bison build-essential ccache curl flex g++-multilib gcc-multilib git git-lfs gnupg gperf imagemagick lib32readline-dev lib32z1-dev libdw-dev libelf-dev liblz4-tool lz4 libsdl1.2-dev libssl-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc zip zlib1g-dev libwxgtk3.0-dev lib32ncurses5-dev libncurses5 libncurses5-dev
sudo apt update && sudo apt upgrade
sudo apt install bc bison build-essential ccache curl flex g++-multilib gcc-multilib git git-lfs gnupg gperf imagemagick lib32readline-dev lib32z1-dev libdw-dev libelf-dev liblz4-tool lz4 libsdl1.2-dev libssl-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc zip zlib1g-dev libwxgtk3.0-dev lib32ncurses5-dev libncurses5 libncurses5-dev
export USE_CCACHE=1
export CCACHE_EXEC=/usr/bin/ccache
export USE_CCACHE=1
export CCACHE_EXEC=/usr/bin/ccache
ccache -M 30G
ccache -o compression=true
ccache -o compression=true
mkdir ~/LineageOS
cd LineageOS
mkdir ~/bin
PATH=~/bin:$PATH
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o ~/bin/repo
chmod a+x ~/bin/repo
mkdir ~/bin
PATH=~/bin:$PATH
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o ~/bin/repo
chmod a+x ~/bin/repo
repo init -u https://mirrors.bfsu.edu.cn/git/lineageOS/LineageOS/android.git -b lineage-21.0 --git-lfs
repo init -u https://mirrors.bfsu.edu.cn/git/lineageOS/LineageOS/android.git -b lineage-21.0 --git-lfs
git config --global user.name "<你的昵称或者名字啦,记得去掉尖括号哦>"
git config --global user.email "<你的邮箱地址,也去掉尖括号哈>"
git config --global user.name "<你的昵称或者名字啦,记得去掉尖括号哦>"
git config --global user.email "<你的邮箱地址,也去掉尖括号哈>"
<remote name="github"
fetch="e0aK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1j5`." />
<remote name="private"
fetch="ssh://git@github.com" />
<remote name="aosp"
fetch="688K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6E0K9i4u0J5L8%4u0K6i4K6u0W2j5X3k6K6N6g2)9J5k6h3g2V1N6g2)9J5k6h3y4F1i4K6u0r3k6$3W2@1i4K6u0r3b7f1!0e0f1l9`.`."
review="android-review.googlesource.com"
revision="refs/tags/android-14.0.0_r67" />
<default revision="refs/heads/lineage-21.0"
remote="github"
sync-c="true"
sync-j="4" />
<remote name="github"
fetch="1dcK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1j5`." />
<remote name="private"
fetch="ssh://git@github.com" />
<remote name="aosp"
fetch="2daK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6E0K9i4u0J5L8%4u0K6i4K6u0W2j5X3k6K6N6g2)9J5k6h3g2V1N6g2)9J5k6h3y4F1i4K6u0r3k6$3W2@1i4K6u0r3b7f1!0e0f1l9`.`."
review="android-review.googlesource.com"
revision="refs/tags/android-14.0.0_r67" />
<default revision="refs/heads/lineage-21.0"
remote="github"
sync-c="true"
sync-j="4" />
<remote name="github"
fetch="754K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1j5`." />
<remote name="lineage"
fetch="4fdK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6E0K9i4u0J5L8%4u0K6i4K6u0W2j5X3k6K6N6g2)9J5k6h3g2V1N6g2)9J5k6h3y4F1i4K6u0r3k6$3W2@1i4K6u0r3L8r3W2F1k6h3q4Y4k6f1!0e0i4K6u0r3"
review="review.lineageos.org" />
<remote name="aosp"
fetch="7b1K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6E0K9i4u0J5L8%4u0K6i4K6u0W2j5X3k6K6N6g2)9J5k6h3g2V1N6g2)9J5k6h3y4F1i4K6u0r3k6$3W2@1i4K6u0r3b7f1!0e0f1l9`.`."
review="android-review.googlesource.com"
revision="refs/tags/android-14.0.0_r67" />
<default revision="refs/heads/lineage-21.0"
remote="lineage"
sync-c="true"
sync-j="12" />
<remote name="github"
fetch="fb7K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1j5`." />
<remote name="lineage"
fetch="f7cK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6E0K9i4u0J5L8%4u0K6i4K6u0W2j5X3k6K6N6g2)9J5k6h3g2V1N6g2)9J5k6h3y4F1i4K6u0r3k6$3W2@1i4K6u0r3L8r3W2F1k6h3q4Y4k6f1!0e0i4K6u0r3"
review="review.lineageos.org" />
<remote name="aosp"
fetch="8d3K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6E0K9i4u0J5L8%4u0K6i4K6u0W2j5X3k6K6N6g2)9J5k6h3g2V1N6g2)9J5k6h3y4F1i4K6u0r3k6$3W2@1i4K6u0r3b7f1!0e0f1l9`.`."
review="android-review.googlesource.com"
revision="refs/tags/android-14.0.0_r67" />
[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!
最后于 2025-4-18 15:40
被OrionisLi编辑
,原因: 修改错误的格式