构建模拟器/AVD
简介
如果您没有官方支持的设备,不想在日常使用的设备上测试更改,或者只是想测试具有 LineageOS 特定功能的应用程序,我们仍然可以满足您的需求。
这些说明将帮助您构建与模拟器兼容的 LineageOS 版本,以便在您的计算机上运行。如果您想使用 Android Studio/AVD,也有关于打包/安装您的自定义构建而不是 Google 提供的默认 AOSP 镜像的说明。
您需要准备什么
- 一台较新的 x86_64 计算机
- Linux、macOS 或 Windows - 这些构建说明仅使用 Ubuntu 20.04 LTS 进行测试,因此我们建议使用该版本。
- 足够的 RAM(构建到
lineage-17.1
需要 16 GB,lineage-18.1
及更高版本需要 32 GB 或更多)。RAM 越少,构建所需的时间就越长。启用 ZRAM 可能会有所帮助。 - 足够的存储空间(构建到
lineage-17.1
需要 200 GB,lineage-18.1
及更高版本需要 300 GB)。启用ccache
或为多个设备构建可能需要更多可用空间。使用 SSD 比传统硬盘驱动器可以显著缩短构建时间。
- 良好的互联网连接和可靠的电力。:)
- 对基本 Android 操作和术语有一定的了解。了解一些基本的命令行概念可能很有用,例如
cd
(代表“更改目录”)、目录层次结构的概念,以及在 Linux 中它们由/
分隔等等。
让我们开始吧!
构建 LineageOS
安装 platform-tools
如果您之前没有安装过 adb
和 fastboot
,您可以从 Google 下载它们。解压它,运行
unzip platform-tools-latest-linux.zip -d ~
现在您必须将 adb
和 fastboot
添加到您的 PATH。打开 ~/.profile
并添加以下内容
# add Android SDK platform tools to path
if [ -d "$HOME/platform-tools" ] ; then
PATH="$HOME/platform-tools:$PATH"
fi
然后,运行 source ~/.profile
以更新您的环境。
安装构建包
构建 LineageOS 需要几个软件包。您可以使用发行版的软件包管理器安装这些软件包。
apt install
命令。要构建 LineageOS,您需要
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 lz4 libsdl1.2-dev libssl-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc zip zlib1g-dev
对于 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) 之前的版本,只需安装
lib32ncurses5-dev libncurses5 libncurses5-dev
此外,对于 Ubuntu 20.04 (focal) 之前的版本,还要安装
libwxgtk3.0-dev
而对于 Ubuntu 16.04 (xenial) 之前的版本,安装
libwxgtk2.8-dev
Java
不同版本的 LineageOS 需要不同版本的 JDK(Java 开发工具包)。
- LineageOS 18.1+:OpenJDK 11(包含在源代码下载中)
- LineageOS 16.0-17.1:OpenJDK 1.9(包含在源代码下载中)
- LineageOS 14.1-15.1:OpenJDK 1.8(安装
openjdk-8-jdk
)- 注意:对于构建这些版本,您需要从
/etc/java-8-openjdk/security/java.security
中的jdk.tls.disabledAlgorithms
中删除TLSv1
和TLSv1.1
。
- 注意:对于构建这些版本,您需要从
- LineageOS 11.0-13.0:OpenJDK 1.7(安装
openjdk-7-jdk
)*
* Ubuntu 16.04 及更高版本在标准软件包存储库中没有 OpenJDK 1.7。请参阅 Ask Ubuntu 问题“如何在 Ubuntu 16.04 或更高版本上安装 openjdk 7?”。请注意,使用 PPA openjdk-r 的建议已过时(PPA 从未更新其提供的 openjdk-7-jdk,因此缺少安全修复程序);即使它是最受好评的答案,也请跳过该答案。
Python
不同版本的 LineageOS 需要不同的默认 Python 版本。
- LineageOS 17.1+:Python 3(安装
python-is-python3
) - LineageOS 11.0-16.0:Python 2(安装
python-is-python2
)
如果您的默认版本是 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"
由于它们的大小,某些仓库配置为 lfs
或 Large File Storage
。为确保您的发行版为此做好准备,请运行
git lfs install
为了避免在提交消息中出现重复的 Change-Id:
尾部,尤其是在选择更改时,请将 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
ccache
大小可以更小(一个设备的目标约为 20GB)。初始化 LineageOS 源代码仓库
以下分支已针对构建模拟器镜像进行了测试
- lineage-16.0
- lineage-17.1
- lineage-18.1
- lineage-19.1
- lineage-20.0
- lineage-21.0
- lineage-22.1
输入以下内容以初始化仓库
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 上可用的所有分支。
repo sync
命令用于从 LineageOS 和 Google 更新最新的源代码。记住它,因为您可能希望每隔几天执行一次以保持您的代码库新鲜和最新。但请注意,如果您进行了任何更改,运行 repo sync
可能会擦除它们!开始构建
开始构建的时候了!
设置环境
source build/envsetup.sh
通过运行以下命令选择构建目标,其中 <target>
是下表中的条目之一
breakfast <target> eng
构建目标 | 支持的 <arch> |
||
---|---|---|---|
LineageOS 17 及更低版本 | |||
手机 | 模拟器/GSI | <arch> |
arm , arm64 , x86 和 x86_64 |
LineageOS 18.1 | |||
手机 | 模拟器/GSI | <arch> |
arm , arm64 , x86 和 x86_64 |
电视 | 模拟器/GSI | tv_<arch> |
arm , arm64 , x86 和 x86_64 |
汽车 | 模拟器/GSI | car_<arch> |
arm64 和 x86_64 |
LineageOS 19 及更高版本 | |||
手机 | 模拟器 | sdk_phone_<arch> |
x86 和 x86_64 |
手机 | GSI | gsi_<arch> |
arm , arm64 , x86 和 x86_64 |
电视 | 模拟器 | sdk_tv_<arch> |
arm 和 x86 |
电视 | GSI | gsi_tv_<arch> |
arm , arm64 , x86 和 x86_64 |
汽车 | 模拟器 | sdk_car_<arch> |
arm64 和 x86_64 |
汽车 | GSI | gsi_car_<arch> |
arm64 和 x86_64 |
LineageOS 21 及更高版本 | |||
手机 | 模拟器 | sdk_phone_<arch> |
arm64 和 x86_64 |
手机 | GSI | gsi_<arch> |
arm , arm64 , x86 和 x86_64 |
电视 | 模拟器 | sdk_tv_<arch> |
arm , x86 和 x86_64 |
电视 | GSI | gsi_tv_<arch> |
arm , arm64 , x86 和 x86_64 |
汽车 | 模拟器 | sdk_car_<arch> |
arm64 和 x86_64 |
汽车 | GSI | gsi_car_<arch> |
arm64 和 x86_64 |
对于初学者,建议使用 x86
或 x86_64
,因为您的计算机可以使用硬件加速本地运行它。
arm64
。与通过 Rosetta 2 等转换层使用
x86_64
构建相比,这将显著提高模拟器性能。除了 eng
之外,还可以将目标设为 userdebug
,后者被官方 AOSP 模拟器镜像使用,但需要先启用 ADB 以及与模拟器的通信。
现在,构建镜像
mka
运行模拟器
假设构建完成且没有错误,请在运行构建的终端窗口中键入以下内容
emulator
模拟器将启动,您将看到 LineageOS 启动动画。一段时间后,它将完成启动并准备好使用。
成功!那么…接下来是什么?
您做到了!欢迎加入自构建者的精英俱乐部。您从头开始,从底层构建了自己的操作系统。您是您领域的主人/女主人……并且希望您在此过程中学到了一些东西,并且也获得了一些乐趣。
导出以在 Android Studio/AVD 中使用
如果您想独立于构建它的系统/终端运行模拟器镜像,您可以将构建的镜像导出为 Android Studio/AVD 可以使用的格式。为此,请在您最初启动构建的同一终端中运行以下命令
- LineageOS 20 及更低版本
mka sdk_addon
如果您现在查看 out/host/linux-x86/sdk_addon
目录,您将找到一个 ZIP 文件(以 -img.zip
结尾),其中包含外部运行模拟器镜像所需的所有文件。
- LineageOS 21 及更高版本
mka emu_img_zip
如果您现在查看 out/target/product/<arch>
目录,您将找到一个 ZIP 文件 sdk-repo-linux-system-images.zip
,其中包含外部运行模拟器镜像所需的所有文件。
要将构建部署到您的 Android Studio 安装中,请将包含的文件夹(以您构建的架构命名)移动到 /path/to/android/sdk/system-images
的子文件夹中。AOSP 默认使用以下路径名,但您也可以自由创建自己的路径名
system-images/android-<sdk version>/<tag>/<arch>
(其中 <tag>
是 default
/google_apis
/google_apis_playstore
之一)
LineageOS 模拟器构建默认将使用标签 lineage
(在镜像列表中显示为“LineageOS”)。
只要您没有将文件夹直接移动到 system-images
中,模拟器镜像现在就应该在创建新的虚拟 Android 设备时显示在镜像列表中。
寻求帮助
- #LineageOS-dev - Libera.Chat IRC 网络上一个有用的实时聊天室(或“频道”)。