架构不一致警告!
由于绝大部分 Android/嵌入式设备采用 ARM64(AArch64) 架构,而部分桌面 Linux 环境则使用 x86_64(AMD64) 架构,因此在 Android 设备上构建得到的程序、依赖库以及工具链不一定能够直接用于目标设备。

如果你的目标平台与当前构建环境架构不同,请特别注意交叉编译问题。

容器环境!
由于本教程面向无需 Root 权限的 Android 设备,因此 UserLAnd 中运行的 Linux 并不是传统意义上的完整虚拟机,而是通过 PRoot 等机制提供的用户态 Linux 环境。

因此,系统初始化通常不是由 systemd 完成的,systemctl 等依赖真正系统初始化系统的命令通常无法正常工作。

不要按照普通 Debian 实体机的方式配置 systemd 服务。

仍有其他方法!
除了 UserLAnd 之外,也可以使用 Termux 搭建构建环境。Termux 本身提供了 Android 上的类 Unix 用户空间,并且可以通过 proot-distro 等工具运行 Debian、Ubuntu、Arch Linux 等发行版。

对于熟悉命令行环境的用户而言,Termux 通常更加灵活;而 UserLAnd 则更适合希望直接使用完整 Linux 发行版环境的用户。

本章节讲述如何使用 UserLAnd 在 Android 设备上建立一个轻量级 Debian GNU/Linux 环境,并使用该环境进行便携式构建。

考虑到部分开发者可能没有可用于构建项目的计算机,或者现有计算机性能不足以运行较新的开发环境,因此特写本章。


# 下载 & 安装

UserLAnd 是一个可以在 Android 设备上运行 Linux 发行版的应用。

目前可以通过以下渠道获取:

  • Google Play
  • F-Droid
  • UserLAnd 官方 GitHub 仓库

安装完成后直接启动应用即可。

注意:
UserLAnd 的发行版文件通常需要从网络下载。如果下载速度较慢,请耐心等待。


# 初始化配置

首次启动 UserLAnd 时,应用可能需要从网络获取 Linux 发行版列表以及相关文件。

打开应用后,进入 “文件系统” 页面,点击右上角的 “+” 创建新的文件系统。

选择:

1
发行版:Debian

文件系统名称可以自由填写,例如:

1
phira-debian

用户名可以自行设置,例如:

1
starmoe

用户名通常只能使用英文字符,并建议使用小写字母。

密码可以自行设置。

如果后续需要使用 VNC,还需要设置 VNC 密码。根据 UserLAnd 的要求设置为符合其长度限制的密码即可。

完成后点击右上角的保存按钮。


# 建立会话

UserLAnd 通常可以通过不同的方式提供 Linux 会话,例如:

  • SSH
  • VNC
  • XSDL

本教程只需要命令行环境,因此使用 SSH 即可。

操作步骤:

  1. 转到 “会话” 页面。
  2. 点击右上角的 “+”
  3. 创建新的会话。
  4. 会话名称可以随意填写。
  5. 文件系统选择刚刚创建的 Debian。
  6. 服务类型选择:

1
SSH

  1. 点击右上角的保存按钮。
  2. 点击刚刚创建的会话。

第一次启动时,UserLAnd 会下载并初始化 Debian 所需的文件。

由于相关文件可能需要从 GitHub 等网络服务下载,因此第一次启动可能需要较长时间。

请耐心等待。


# 配置软件源

注意:Debian 软件源格式已经发生变化

较新的 Debian 版本逐渐采用 DEB822 格式的软件源配置文件,例如:

1
/etc/apt/sources.list.d/debian.sources

因此,不建议继续依赖旧教程中直接覆盖 /etc/apt/sources.list 的方法。

如果你的 Debian 版本仍然使用传统 sources.list,则旧方法仍然可以工作。

进入 Debian 后,首先更新软件包索引:

1
sudo apt update

随后建议进行一次基础升级:

1
sudo apt upgrade

如果希望一次完成:

1
sudo apt update && sudo apt upgrade

# 使用 USTC 软件源

如果位于中国大陆,可以考虑使用中国科学技术大学镜像。

对于仍然使用传统 sources.list 的 Debian,可以执行:

1
2
sudo sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
sudo apt update

也可以手动编辑软件源。

安装编辑器:

1
sudo apt install nano -y

然后:

1
sudo nano /etc/apt/sources.list

根据当前 Debian 版本填写对应的软件源。

例如:

1
2
deb https://mirrors.ustc.edu.cn/debian stable main contrib non-free non-free-firmware
deb https://mirrors.ustc.edu.cn/debian stable-updates main contrib non-free non-free-firmware

如果需要安全更新,还应配置对应的 Debian Security 仓库。

重要:

不建议盲目复制网上的旧 sources.list

Debian 的发行版代号和软件源结构会随着版本变化。对于新版本 Debian,建议优先检查:

1
cat /etc/os-release

以及:

1
ls /etc/apt/sources.list.d/

再根据当前 Debian 版本配置软件源。


# 配置系统语言

安装 locales

1
sudo apt install locales

然后运行:

1
sudo dpkg-reconfigure locales

此时会出现类似以下界面:

1
2
3
4
(Enter the items or ranges you want to select,
separated by spaces.)

请选择需要生成的区域设置(locale)。

根据自己的需求选择需要生成的 Locale。

例如,如果希望使用简体中文 UTF-8,可以选择:

1
zh_CN.UTF-8

如果还需要英文环境,可以同时生成:

1
en_US.UTF-8

完成后选择默认 Locale。

也可以通过命令确认当前 Locale:

1
locale

如果希望将系统默认语言设置为中文,例如:

1
sudo update-locale LANG=zh_CN.UTF-8

重新进入会话后,可以通过:

1
locale

确认配置是否生效。


# 完成

至此,你已经拥有了一个可以在 Android 设备上运行的轻量级 Debian GNU/Linux 用户空间。

可以检查系统:

1
cat /etc/os-release

检查 CPU 架构:

1
uname -m

例如:

1
aarch64

则表示当前环境运行在 ARM64/AArch64 架构上。

随后即可继续安装 Phira 构建所需要的编译器、Rust、Git 以及其他依赖,并进行项目构建。

特别提醒:

UserLAnd 中的 Debian 并不是虚拟机。

1
2
3
4
5
Android
└── Linux Kernel
└── PRoot
└── Debian 用户空间
└── Phira 构建环境

因此它与直接在 x86_64 PC 上安装 Debian 所得到的环境并不完全相同。

如果构建过程中遇到权限、挂载、systemd、网络或架构相关问题,应首先考虑 PRoot/Android 环境带来的限制。