构建 LineageOS
进入网站:Info about gauguin | LineageOS Wiki,点击:Build for yourself,里面有详细的教程,我这里就按照Note 9 Pro 5G来。
机器环境
- Ubuntu环境为:20.04.6
- LinagesOS版本:21-20241211-NIGHTLY-gauguin,版本查看:设置→关于本机→ LineageOS版本
1、安装platform-tools
1.1、安装 platform-tools:https://dl.google.com/android/repository/platform-tools-latest-linux.zip
1.2、解压
unzip platform-tools-latest-linux.zip -d ~
1.3、配置环境,在终端执行:(我这里有一个巨坑,一行一行的复制就不会报错 “ :未找到命令”)
vim ~/.profile
#填入如下信息。注意我这里的路径。有一个fugui,根据自己的路径来
# add Android SDK platform tools to path
if [ -d "$HOME/platform-tools" ] ; then
PATH="$HOME/fugui/platform-tools:$PATH"
fi
1.4、更新环境:
source ~/.profile
2、安装构建包
2.1安装基本构建工具
sudo apt update
sudo apt 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
2.2处理Ubuntu版本额外依赖项
如果是Ubuntu 23.10 (mantic)版本:还需要下载 libtinfo5 和 libncurses5库
wget http://archive.ubuntu.com/ubuntu/pool/universe/n/ncurses/libtinfo5_6.4-2_amd64.deb
sudo dpkg -i libtinfo5_6.4-2_amd64.deb
rm -f libtinfo5_6.4-2_amd64.debwget http://archive.ubuntu.com/ubuntu/pool/universe/n/ncurses/libncurses5_6.4-2_amd64.deb
sudo dpkg -i libncurses5_6.4-2_amd64.deb
rm -f libncurses5_6.4-2_amd64.deb
如果是Ubuntu 版本低于 23.10 (mantic):还需要下载以下软件包:
sudo apt install -y lib32ncurses5-dev libncurses5 libncurses5-dev
如果是Ubuntu 版本低于 20.04 (focal):还需要下载以下软件包:
sudo apt install -y libwxgtk3.0-dev
如果是Ubuntu 版本低于 16.04 (xenial):还需要下载以下软件包:
sudo apt install -y libwxgtk2.8-dev
3、下载JDK
确定 LineageOS 版本与所需的 JDK
- LineageOS 18.1 及以上:需要 OpenJDK 11(源码下载中已包含)。
- LineageOS 16.0-17.1:需要 OpenJDK 9(源码下载中已包含)。
- LineageOS 14.1-15.1:需要 OpenJDK 8(需手动安装)。
- LineageOS 11.0-13.0:需要 OpenJDK 7(需手动安装,Ubuntu 16.04 及以上需使用额外方法)。
安装 OpenJDK
sudo apt install -y openjdk-11-jdk
java -version
注意:要构建这些版本,需要在 etc/java-11-openjdk/security/java.security删除 TLSv1和TLSv1.1
4、安装Python3
确定你的 LineageOS 版本所需的 Python 版本
- LineageOS 17.1 及以上:需要 Python 3。(我这里最新是Python 3.8.10)
- LineageOS 11.0 到 16.0:需要 Python 2。
# 安装 python3
sudo apt install python-is-python3
python --version
5、安装repo
5.1创建目录
mkdir -p ~/bin
mkdir -p ~/work/android/lineage
5.2安装命令repo
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
5.3添加环境变量,将目录放在执行路径中~/bin,在Ubuntu 中 PATH 中 如果缺少,请添加它:(一般存在,这一步可以省略)
vim ~/.profile
# 在文件末尾添加以下行:
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
运行以下命令使修改生效:
source ~/.profile
5.1配置 git
git config --global user.email "1115406747@qq.com"
git config --global user.name "fuguidai"
(可选操作) LineageOS 项目中,一些代码库因为文件体积较大,已经配置为使用 Git LFS,如果你的开发环境未安装或配置 Git LFS,可能会导致拉取这些文件失败或出现错误。执行如下命令,必须先执行 git init
fugui@fugui-virtual-machine:~/work/android/lineage$ git init
已初始化空的 Git 仓库于 /home/fugui/work/android/lineage/.git/
fugui@fugui-virtual-machine:~/work/android/lineage$ git lfs install
Updated git hooks.
Git LFS initialized
(可选操作)为避免提交消息中出现重复的尾部,尤其是在挑选更改时,请向 git 制作一个已知的尾部:Change-Id:
git config --global trailer.changeid.key "Change-Id"
5.2打开缓存以加快构建速度(可选操作)
ccache 是一种编译缓存工具,它通过缓存之前编译过的内容,在后续的编译过程中直接复用这些缓存,从而显著减少编译时间。它特别适用于像 Android 这样需要频繁重复编译的大型代码库。
export USE_CCACHE=1
export CCACHE_EXEC=/usr/bin/ccache
并将该行添加到您的文件中m指定要使用的最大磁盘空间量:~/.bashr cccache
vim ~/.bashrc
#添加如下信息
# Enable ccache for faster builds export USE_CCACHE=1 export
CCACHE_EXEC=/usr/bin/ccache
# 立即生效
source ~/.bashrc
指定缓存空间大小,50G 表示最大缓存大小为 50GB,可以根据需要调整。如果只编译单个设备:25GB-50GB 足够。如果编译多个设备(尤其是内核源码不共享的情况):建议 75GB-100GB。
ccache -M 50G
默认情况下,ccache 不会对缓存文件进行压缩,如果希望提高缓存命中率,可以开启压缩:
ccache -o compression=true
5.3初始化 LineageOS 源存储库
国内需要对repo下载后需要修改REPO_URL
vi ~/bin/repo
找到REPO_URL ,修改为:
# 原路径REPO_URL = "https://gerrit.googlesource.com/git-repo",替换成如下
REPO_URL ='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'
输入以下内容以初始化存储库:
cd ~/work/android/lineage
repo init -u https://github.com/LineageOS/android.git -b lineage-21.0 --git-lfs
- lineage-18.1
- lineage-19.1
- lineage-20.0
- lineage-21.0
5.4repo init后,需要对.repo的xml进行修改(非常关键)
如果repo init后直接repo sync,国内会报出很多错误,错误原因还是因为国内网络,解决方法如下:对 /home/fugui/work/android/lineage/.repo/manifests/default.xml进行修改,这个是隐藏文件,按住ctrl+h显示,修改具体点如下,用git diff给大家看:
建议先备份:
cp /home/fugui/work/android/lineage/.repo/manifests/default.xml /home/fugui/work/android/lineage/.repo/manifests/default.xml.bak
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
- <remote name="github"
- fetch=".."
review="review.lineageos.org" />
+ <remote name="github"
+ fetch="https://github.com/"review="review.lineageos.org" />
+ <remote name="lineage"
+ fetch="https://mirrors.tuna.tsinghua.edu.cn/git/lineageOS/"
+ review="review.lineageos.org" />
<remote name="private"
fetch="ssh://git@github.com" />
<remote name="aosp"
- fetch="https://android.googlesource.com"
- review="android-review.googlesource.com"
+ fetch="https://mirrors.tuna.tsinghua.edu.cn/git/AOSP"
revision="refs/tags/android-14.0.0_r67" />
<default revision="refs/heads/lineage-21.1"
- remote="github"
+ remote="lineage"
sync-c="true"
sync-j="4" />
同步下载源代码(需要很长的时间)
repo sycn
经过漫长的一晚上,终于下载好了。
6、开始编译
6.1 编译执行的环境,在源码路径下执行如下命令
source build/envsetup.sh
breakfast gauguin
等待一会后,我们就可以把大部分gauguin的依赖下载好,但是有一些无法下载,有两种办法:
- 使用魔法翻墙。
- 从我们已经刷了lineage os手机上提取专有驱动文件 blobs,lineage已经给我们写了extract-files.sh脚本(注意一定要保证手机已经可以adb root成功)
6.2 提取专有驱动文件 blobs
运行脚本 extract-files.sh
提取设备专有驱动文件,这些文件会用于构建 LineageOS。
目的:
提取专有驱动文件是 Android 系统构建的关键步骤,这些文件(blobs)是设备厂商提供的闭源组件,包含了设备硬件(如 GPU、调制解调器、摄像头等)正常运行所必需的驱动和库文件。
原因:
在 Android 开源项目(AOSP)中,这些专有驱动文件并没有公开,需要从设备中提取或从官方的可安装包中解压。
这些文件会被集成到编译生成的 ROM 中,使 LineageOS 能够支持特定设备的硬件。
现在确保红米 Note 9 Pro 5G 已通过 USB 数据线连接到您的计算机,并启用了 adb 和 root,并且您在文件夹中。然后运行脚本:
当前路径为:cd ~/work/android/lineage/device/xiaomi/gauguin
# 执行脚本提取专有文件,这个脚本会从设备中提取专有驱动文件(proprietary blobs)。
./extract-files.sh
提取的文件会存放到路径 ~/wrok/android/lineage/vendor/xiaomi。
再次执行
source build/envsetup.sh
breakfast gauguin
如果遇到 command not found 错误,说明系统找不到相关命令。这时你需要确保相关工具(如 adb)被正确安装并放在正确的路径中。错误提示中建议你将命令添加到 ~/android/lineage/vendor/xiaomi/adb~/bin 目录中。
检查你的 ADB 工具是否正确安装, 确保 ADB 已安装,可以运行以下命令:
sudo apt install android-tools-adb
如果 ADB 工具不在系统 PATH 中,将 ADB 工具拷贝到 ~/bin 目录下:
cp /path/to/adb ~/bin/
#确保 ~/bin 在 PATH 中:
echo 'export PATH=$PATH:~/bin' >> ~/.bashrc
source ~/.bashrc
6.3 开始编译,在源码路径下执行如下命令
croot
brunch gauguin
7、刷入编译的压缩包
1、首先进入recovery
adb reboot recovery
2、点击这里的Apply Update
这个页面再执行命令:
adb sideload out/target/product/gauguin/lineage-21-20241211-NIGHTLY-gauguin.zip
本篇文章参考:aosp 12/13/lineageos19.1 framework学习编译刷入小米手机,努比亚_红米手机可以刷aosp吗-CSDN博客