编译

❗注意事项

Windows启用WSL2,可以看看我这篇文章Windows11启用WSL2并安装ArchLinux

❗官方文档推荐Ubuntu20.04 LTS,所以这里演示的是WSL2 + Ubuntu20.04 LTS编译的操作,><20.04 LTS版本安装生成包与本篇文章有区别,请自行查看官方文档

1
2
[Windows下载安装Ubuntu20.04 LTS]
wsl --install -d Ubuntu-20.04

安装完成后会自动打开Linux

1
2
3
4
5
6
7
8
[用户名]
Enter new UNIX username:

[新密码]
New password:

[先更新一下]
sudo apt-get update && sudo apt upgrade -y

💾安装生成包

如果安装太慢,就换源,详情看

1
2
[安装生成包]
sudo apt-get install -y bc bison build-essential ccache curl flex g++-multilib gcc-multilib git git-lfs gnupg gperf imagemagick lib32readline-dev lib32z1-dev libelf-dev liblz4-tool libsdl1.2-dev libssl-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc zip zlib1g-dev lib32ncurses5-dev libncurses5 libncurses5-dev

安装Python

下载设备的特定配置和内核时,一直出错,眼瞎最后才发现需要Python - w -

1
sudo apt-get install python-is-python3

创建目录

💾安装 repo

谷歌源可能会卡顿,你可以换清华镜像源,详情请看清华lineageOS 源代码镜像使用帮助

将 ~/bin 目录放在执行路径中

新版本的 Ubuntu 中, /bin 应该已经在您的 PATH 中,检查/.profile文件验证是否有以下代码,没有自行添加。

1
2
3
4
5
6
7
8
9
10
11
[打开~/.profile文件编辑]
vim ~/.profile

[代码]
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi

[如果没有添加后保存退出并运行以下代码更新环境]
source ~/.profile

配置 git

1
2
[简单配置以下账户与邮箱,貌似不需要真实的,但推荐用真的-w-]

打开缓存以加快构建速度

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[编辑~/.profile文件,并键入以下命令]
vim ~/.profile

[ccache 如果您想通过运行以下命令来加速后续构建]
export USE_CCACHE=1
export CCACHE_EXEC=/usr/bin/ccache

[ccache 使用的最大磁盘空间量]
ccache -M 50G

[启用可选压缩 ccache]
ccache -o compression=true

[保存退出后更新环境]
source ~/.profile

初始化 LineageOS 源存储库

注意这段的可用分支

小米8青春版官方推荐构建lineage-18.1,但我这里选择最新版21.0

1
2
3
4
5
6
7
8
[到/android/lineage目录下]
cd ~/android/lineage

[初始化仓库]
repo init -u https://github.com/LineageOS/android.git -b lineage-21.0 --git-lfs

[同步源码树]
repo sync

🪞清华镜像源

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
[到/android/lineage目录下]
cd ~/android/lineage

[初始化仓库]
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/lineageOS/LineageOS/android.git -b lineage-21.0 --git-lfs

[修改xml文件]
vim .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://mirrors.tuna.tsinghua.edu.cn/git/AOSP"

❗[将]
<default revision="refs/heads/lineage-21.0"
remote="github"

[修改]
<default revision="refs/heads/lineage-21.0"
remote="lineage"

[同步源码树]
repo sync

打开窗户🪟,坐在椅子💺上戴着耳机🎧听几首歌🎵或者啃着薯条🍟喝着可乐🧃追部番剧🎞️,静静等待完成。

预计用时:50m5+2m49 7m11.206s+1h13m9.209s

在准备构建前你可能需要增加交换空间

没有交换分区会导致构建失败

根据自己内存与设备储存自行更改数值大小

WSL2下修改交换内存,原系统下如何修改自行搜索。

用户目录自动跳转路径%UserProfile%

在用户目录下创建.wslconfig文件

1
2
[wsl2]
swap=64G

默认情况下

swap 为 Windows 上内存大小的 25%

主要修改swap的值,推荐64G

memory 为 Windows 总内存的 80%

processsors 与 Windows 上的处理器核心数量相同

详情请看WSL 中的高级设置配置

1
2
3
4
5
[关闭WSL2]
wsl --shutdown

[重新启动ubuntu2004]
ubuntu2004.exe
1
2
[查看交换空间大小]
free -h

交换空间大小

准备特定于设备的代码

1
2
3
4
5
[到源代码的根目录]
cd ~/android/lineage
[下载设备的特定配置和内核]
source build/envsetup.sh
breakfast platina

::: warning
某些设备需要在成功之前填充供应商目录。如果在此处收到有关生成文件的错误,需要提取专有Blob,完成后可以重新运行 breakfast platina。
:::

生成文件错误

从基于有效负载的 OTA 中提取专有 blob

创建一个临时目录来提取 zip 的内容并移动到那里

1
2
mkdir ~/android/system_dump/
cd ~/android/system_dump/

要使用 payload.bin 提取器,您将需要 python3-protobuf,如果您还没有它

1
2
3
4
5
6
7
8
sudo apt-get install python3-protobuf

现在,您将克隆使用payload.bin提取器所需的存储库

``` bash
git clone https://github.com/LineageOS/android_prebuilts_extract-tools android/prebuilts/extract-tools
git clone https://github.com/LineageOS/android_tools_extract-utils android/tools/extract-utils
git clone https://github.com/LineageOS/android_system_update_engine android/system/update_engine

提取世系中的payload.bin-*.zip:

1
unzip path/to/lineage-*.zip

其中 path/to/ 是可安装 zip 的路径。

1
2
3
4
5
6
7
8
9

# 提取专有Blob

``` BASH
[到platina目录]
cd ~/android/lineage/device/xiaomi/platina

[运行脚本]
./extract-files.sh

提取ing

会有双红色‼️感叹号,但这不是问题。

双红色‼️感叹号

重新尝试准备特定于设备的代码

1
2
3
4
5
[到源代码的根目录]
cd ~/android/lineage
[下载设备的特定配置和内核]
source build/envsetup.sh
breakfast platina

成功

开始构建

1
2
3
4
5
6
[到源代码根目录]
cd ~/android/lineage

[开始构建]
croot
brunch platina

签名

1
2
3
4
5
6
7
8
[到android根目录下]
cd ~/android

subject='/C=CN/ST=Shandong/L=Zhanhua View/O=LotusLandStory/OU=Cirno/CN=BakaXiaofang/emailAddress=bakaxiaofang@gmail.com'
mkdir ~/.android-certs
for cert in bluetooth cyngn-app media networkstack platform releasekey sdk_sandbox shared testcert testkey verity; do \
./development/tools/make_key ~/.android-certs/$cert "$subject"; \
done

参数代表

C —> Country Name (2 letter code)
ST —> State or Province Name (full name)
L —> Locality Name (eg, city)
O —> Organization Name (eg, company)
OU —> Organizational Unit Name (eg, section)
CN —> Common Name (eg, your name or your server’s hostname)
emailAddress —> Contact email address

C —> 国家/地区名称(2 个字母代码)
ST —> 州或省名称(全名)
L —> 地点名称(例如城市)
O —> 组织名称(例如公司)
OU —> 组织单位名称(例如,部门)
CN —> 通用名称(例如,您的姓名或服务器的主机名)
emailAddress —> 联系电子邮件地址

有可能遇到 error: Cannot locate config makefile for product “lineage_platina”. 的问题

解决方案 科学上网,自行搜索

WSL2 Ub v2

clash 开启tun模式在常规里安装服务模式就行。service mode

tun 模式

tun:
enable: false # enable ‘true’
mtu: 1500
stack: system # or ‘gvisor’
dns-hijack:
- “any:53”
- “tcp://any:53”
auto-route: true
auto-detect-interface: true

[[[ ]]] /home/bakaxiaofang/.android-certs/bluetooth
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.adbd
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.adservices
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.adservices.api
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.appsearch
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.art
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.bluetooth
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.btservices
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.cellbroadcast
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.compos
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.configinfrastructure
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.connectivity.resources
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.conscrypt
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.devicelock
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.extservices
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.graphics.pdf
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.hardware.biometrics.face.virtual
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.hardware.biometrics.fingerprint.virtual
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.hardware.boot
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.hardware.cas
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.hardware.wifi
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.healthfitness
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.hotspot2.osulogin
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.i18n
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.ipsec
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.media
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.media.swcodec
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.mediaprovider
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.nearby.halfsheet
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.networkstack.tethering
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.neuralnetworks
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.ondevicepersonalization
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.os.statsd
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.permission
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.resolv
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.rkpd
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.runtime
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.safetycenter.resources
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.scheduling
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.sdkext
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.support.apexer
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.telephony
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.telephonymodules
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.tethering
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.tzdata
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.uwb
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.uwb.resources
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.virt
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.vndk.current
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.vndk.current.on_vendor
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.wifi
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.wifi.dialog
[[[ ]]] /home/bakaxiaofang/.android-certs/com.android.wifi.resources
[[[ ]]] /home/bakaxiaofang/.android-certs/com.google.pixel.camera.hal
[[[ ]]] /home/bakaxiaofang/.android-certs/com.google.pixel.vibrator.hal
[[[ ]]] /home/bakaxiaofang/.android-certs/com.qorvo.uwb
[[[ ]]] /home/bakaxiaofang/.android-certs/media
[[[ ]]] /home/bakaxiaofang/.android-certs/networkstack
[[[ ]]] /home/bakaxiaofang/.android-certs/platform
[[[ ]]] /home/bakaxiaofang/.android-certs/releasekey
[[[ ]]] /home/bakaxiaofang/.android-certs/sdk_sandbox
[[[ ]]] /home/bakaxiaofang/.android-certs/shared