在 Apple 芯片 Mac 上为 UTM 虚拟机构建和安装

已知问题

请参考这里

介绍

类似于 libvirt QEMU 虚拟机,这也提供了在基于 QEMU 的虚拟机内部的 LineageOS 体验。

UTM 应用是一款流行的非商业虚拟机应用,专为 Apple iOS 和 macOS 打造,基于 QEMU。

请注意,我们目前仅记录在 Apple 芯片 Mac 上的使用。

virtio_* 目标也适用于在 UTM 虚拟机中使用。

你需要的

让我们开始吧!

构建 LineageOS

安装 platform-tools

如果您之前没有安装过 adbfastboot,您可以从 Google 下载它们。解压它,运行

unzip platform-tools-latest-linux.zip -d ~

现在您必须将 adbfastboot 添加到您的 PATH。打开 ~/.profile 并添加以下内容

# add Android SDK platform tools to path
if [ -d "$HOME/platform-tools" ] ; then
    PATH="$HOME/platform-tools:$PATH"
fi

然后,运行 source ~/.profile 以更新您的环境。

安装构建软件包

构建 LineageOS 需要几个软件包。您可以使用您的发行版的软件包管理器安装这些软件包。

要构建 LineageOS,你需要

自 LineageOS 22.0 起,virtio_* 目标使用基于上游仓库的 Mesa。要为 virtio_* 目标构建 LineageOS 22.0 及以上版本,你还需要

对于 Ubuntu 23.10 (mantic),从 23.04 (lunar) 安装 libncurses5,如下所示

wget https://archive.ubuntu.com/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2_amd64.deb && sudo dpkg -i libtinfo5_6.3-2_amd64.deb && rm -f libtinfo5_6.3-2_amd64.deb
wget https://archive.ubuntu.com/ubuntu/pool/universe/n/ncurses/libncurses5_6.3-2_amd64.deb && sudo dpkg -i libncurses5_6.3-2_amd64.deb && rm -f libncurses5_6.3-2_amd64.deb

而对于 Ubuntu 版本低于 23.10 (mantic) 的版本,只需安装

此外,对于 Ubuntu 版本低于 20.04 (focal) 的版本,还需要安装

而对于 Ubuntu 版本低于 16.04 (xenial) 的版本,安装

Java

不同版本的 LineageOS 需要不同版本的 JDK(Java 开发工具包)。

* Ubuntu 16.04 及更高版本在标准软件包仓库中没有 OpenJDK 1.7。请参阅 Ask Ubuntu 问题 “如何在 Ubuntu 16.04 或更高版本上安装 openjdk 7?”。请注意,使用 PPA openjdk-r 的建议已过时(PPA 从未更新其提供的 openjdk-7-jdk,因此缺乏安全修复);即使它是最受赞同的答案,也请跳过该答案。

Python

不同版本的 LineageOS 需要不同的默认 Python 版本。

如果你的默认是 python3,但你正在构建的分支需要 python2,则有各种方法可以使用它,例如手动创建符号链接或为其创建一个 virtualenv。我们推荐后者

使用 virtualenv --python=python2 ~/.lineage_venv 一次性生成 virtualenv。之后,在每个需要默认 python2 的终端中激活它,运行 ~/.lineage_venv/bin/activate

路径 ~/.lineage_venv 可以自由选择,这只是一个例子!

创建目录

您需要在构建环境中设置一些目录。

要创建它们

mkdir -p ~/bin
mkdir -p ~/android/lineage

~/bin 目录将包含 git-repo 工具(通常命名为 “repo”),而 ~/android/lineage 目录将包含 LineageOS 的源代码。

安装 repo 命令

输入以下内容以下载 repo 二进制文件并使其可执行(可运行)

curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

~/bin 目录添加到你的执行路径中

在最近的 Ubuntu 版本中,~/bin 应该已经在你的 PATH 中。您可以通过使用文本编辑器打开 ~/.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

鉴于 repo 要求您验证身份以同步 Android,请运行以下命令来配置您的 git 身份

git config --global user.email "[email protected]"
git config --global user.name "Your Name"

由于它们的大小,一些仓库配置为 lfsLarge File Storage。为了确保你的发行版为此做好准备,运行

git lfs install

为了避免在提交消息中出现重复的 Change-Id: 预告片,特别是在 cherry-picking 更改时,使 Change-Id: 成为 git 的已知预告片

git config --global trailer.changeid.key "Change-Id"

开启缓存以加速构建

如果您想加速后续构建,请使用 ccache,通过运行

export USE_CCACHE=1
export CCACHE_EXEC=/usr/bin/ccache

并将该行添加到你的 ~/.bashrc 文件中。然后,通过输入以下内容来指定你希望 ccache 使用的最大磁盘空间量

ccache -M 50G

其中 50G 对应于 50GB 的缓存。这需要运行一次。从 25GB 到 100GB 的任何值都将导致构建速度明显提高(例如,典型的 1 小时构建时间可以缩短到 20 分钟)。如果您只为一个设备构建,25GB-50GB 即可。如果您计划为多个不共享相同内核源代码的设备构建,请以 75GB-100GB 为目标。此空间将永久占用你的驱动器空间,因此请考虑这一点。

您还可以启用可选的 ccache 压缩。虽然这可能涉及轻微的性能下降,但它增加了适合缓存的文件数量。要启用它,运行

ccache -o compression=true

初始化 LineageOS 源代码仓库

目前支持以下分支用于构建 UTM 虚拟机软件包

输入以下内容以初始化仓库

cd ~/android/lineage
repo init -u https://github.com/LineageOS/android.git -b lineage-22.1 --git-lfs --no-clone-bundle

下载源代码

要开始将源代码下载到你的计算机,请输入以下内容

repo sync

LineageOS 清单包含 repo 的明智默认配置,我们强烈建议您使用(即不要向 sync 添加任何选项)。供参考,我们的默认值是 -j 4-c-j 4 部分意味着四个并发线程/连接。如果您在同步时遇到问题,您可以将其降低到 -j 3-j 2。另一方面,-c 使 repo 仅拉取当前分支,而不是 GitHub 上可用的所有分支。

选择要构建的目标

请参考这里以帮助选择你的目标。

开始构建

是时候开始构建了!

要构建包含预装 LineageOS 的 UTM 虚拟机软件包的 ZIP 压缩包

m vm-utm-zip

如果构建完成且没有错误,ZIP 压缩包将出现在 out/target/product/<target>/VirtualMachine/UTM/UTM-VM-lineage-*-20250408-UNOFFICIAL-<target>.zip

现在,将 ZIP 压缩包传输到你希望在其上运行它的 Apple 芯片 Mac。

安装 UTM 应用

请参考UTM 文档

安装虚拟机

在 Finder 中找到 ZIP 压缩包 UTM-VM-lineage-*-20250408-UNOFFICIAL-<target>.zip

双击它以解压缩它。

解压缩过程完成后,名为 LineageOS_on_<Architecture>.utm 的 UTM 虚拟机软件包将出现在同一目录中。

双击该软件包,UTM 主窗口将出现,虚拟机将以名称 LineageOS on <Architecture> 加载到 UTM 上。

设置渲染器后端

如果使用渲染器后端 ANGLE (Metal),Android UI 将在 Android 完成启动后不会出现。必须确保在使用此虚拟机时,渲染器后端始终设置为 ANGLE (OpenGL)

点击 UTM 主窗口的空白区域,点击菜单栏上的 UTM,点击 Settings

在新窗口中,切换到 Display 选项卡,在 Renderer Backend 下拉菜单中选择 ANGLE (OpenGL),然后关闭窗口。

如有必要,禁用虚拟化模式

如果目标是 ARM (64-bit only) 架构,请进行下一步。

如果不是,请打开虚拟机设置,切换到 QEMU 选项卡,取消选中 Use Hypervisor,然后关闭窗口。

启动虚拟机

就这样!虚拟机已准备就绪,可以使用了。

现在,你可以启动虚拟机了。