在安卓Termux上用Box64运行Minecraft BDS服务器:跨架构兼容实践
2026/8/24 2:07:41 网站建设 项目流程

1. 项目缘起:为什么要在手机上折腾BDS?

如果你是一个Minecraft的深度玩家,尤其是喜欢折腾服务器的那一类,那你肯定对BDS(Bedrock Dedicated Server)不陌生。它是Minecraft基岩版的官方专用服务器,性能稳定,功能原生。但通常,我们都是在Windows、Linux甚至macOS的电脑上运行它。你有没有想过,能不能在口袋里那台性能越来越强的安卓手机上,也跑起来一个属于自己的BDS服务器呢?

这个想法听起来有点疯狂,毕竟BDS是x86_64架构的二进制程序,而我们的手机绝大多数都是ARM架构。这就好比想让一个只会说中文的人,去直接执行一份用英文写的复杂操作手册,中间缺了个翻译。而“翻译官”的角色,在Linux世界里,通常由QEMU这样的全系统模拟器来扮演,但它的效率,尤其是在手机上,实在不敢恭维。直接模拟整个x86系统来跑一个服务器?那体验恐怕会卡成幻灯片。

所以,当我在Termux这个强大的安卓终端模拟器里,了解到Box64这个“神器”时,这个疯狂的想法又重新燃了起来。Box64不是一个全系统模拟器,它是一个用户态的动态二进制翻译器。简单来说,它更像一个“实时口译员”,只负责在程序运行时,将x86_64的指令“现场翻译”成ARM64能听懂的指令。它跳过了模拟整个硬件环境的巨大开销,效率要高得多。这就让在ARM设备(比如你的手机)上运行x86_64程序成为了可能,而且体验相当可用。

那么,在Termux里用Box64启动BDS,这件事的价值在哪里?首先,它极大地拓展了移动设备作为轻量级、便携式服务器的可能性。你可以随时随地用手机开一个私人小服,和朋友在局域网里联机,测试插件或者建筑创意。其次,对于学习Linux服务器运维、理解二进制兼容性原理来说,这是一个绝佳的实践案例。整个过程涉及Termux环境配置、依赖库处理、动态链接库路径设置等非常“硬核”的Linux操作,走通一遍,你对Linux的理解会上一个台阶。

当然,我必须提前给你打好预防针:这不是一个点一下就能用的“一键脚本”式教程。你会遇到依赖缺失、库版本冲突、性能调优等各种问题。但正因为如此,成功后的成就感也非同一般。下面,我就把我从环境准备到成功启动BDS的完整过程,以及中间踩过的所有坑,毫无保留地分享给你。

2. 战前准备:打造合格的Termux战斗环境

在开始安装Box64和BDS之前,我们必须先把Termux这个“基地”建设好。一个混乱、残缺的Termux环境是后续所有失败的根源。很多人直接pkg install一堆东西就开始,往往会在后期遇到各种诡异的“Command not found”或“Library not found”错误。

2.1 Termux的基础加固与源配置

首先,确保你的Termux是从F-Droid或GitHub官方仓库安装的。某些修改版或老旧版本可能存在兼容性问题。安装后,第一件事不是急着装软件,而是更新包列表并升级所有已安装的包:

pkg update && pkg upgrade -y

这个操作会同步软件源信息并更新系统核心组件,非常重要。接下来,我们需要安装一些最基础的开发工具和依赖,它们是编译和运行复杂软件的基石:

pkg install -y git wget curl proot cmake make python python-pip clang binutils

这里特别说明一下clangbinutils。在ARM平台上编译一些x86相关的工具链或库时,GCC有时会遇到一些目标架构识别的问题,而Clang的交叉编译支持往往更友好。binutils则提供了objdumpnm等分析二进制文件的工具,在排错时不可或缺。

然后是软件源的问题。Termux默认的官方源在某些网络环境下可能速度较慢。我们可以添加一个国内的镜像源来加速。编辑$PREFIX/etc/apt/sources.list文件:

nano $PREFIX/etc/apt/sources.list

将内容替换为(以清华大学镜像为例):

# The termux repository mirror from TUNA: deb https://mirrors.tuna.tsinghua.edu.cn/termux/termux-packages-24 stable main

保存后,再次执行pkg update。这个步骤能显著提升后续大量软件包下载的速度。

2.2 处理可能缺失的关键库

BDS和Box64在运行时会依赖一些特定的库。在Termux的默认环境中,有些库的名称或提供方式与标准Linux发行版不同。我们需要提前安装好它们的替代品或兼容包。

一个常见的坑是libcurlOpenSSL。Termux的libcurl可能链接的是OpenSSL的特定版本,而BDS可能需要较新或较旧的符号。为了减少麻烦,我们可以安装开发版以获取更全的符号:

pkg install -y libcurl-dev openssl-dev

另外,一些图形库或音频库虽然服务器用不到,但它们的缺失可能导致程序在初始化时检查环境失败。我们可以安装一些基础的兼容库:

pkg install -y libx11 libx11-dev libxext libxext-dev

注意,这里安装的是-dev包,它们包含了头文件和动态链接库。虽然Termux没有X11图形环境,但这些库的符号存在有时是程序依赖链所必需的。Box64在翻译过程中会去查找这些符号,如果完全缺失,可能会导致翻译失败。

最后,创建一个干净的工作目录,我们之后的所有操作都将在这里进行,避免把文件下载得到处都是:

mkdir -p ~/bds_box64 && cd ~/bds_box64

3. 核心引擎:编译与安装Box64

Box64是整个项目的核心,我们需要自己编译它,以确保获得针对你手机CPU架构的最佳优化。直接从网上下载预编译的二进制文件虽然方便,但无法保证与你的Termux环境(特别是libc版本)100%兼容,也失去了针对特定CPU调优的机会。

3.1 获取源码与准备编译环境

首先,从GitHub上克隆Box64的源代码仓库。我建议使用--depth=1参数只克隆最新的一次提交,以节省时间和空间:

git clone https://github.com/ptitSeb/box64 --depth=1 cd box64

Box64的编译依赖cmakemake,我们已经安装过了。但它还需要一个关键的组件:dynarec(动态再编译器)的代码生成器。这个生成器本身是一个需要被编译的x86程序。Box64的编译系统很聪明,它会先尝试在宿主机上编译一个轻量版的Box64(或者使用其他方法)来运行这个x86的生成器,为我们生成ARM平台的动态再编译代码。

为了确保这个过程顺利,我们需要确保Termux的/system分区(即安卓系统分区)下的某些库在Proot环境中可用。但更简单直接的方法是,安装Termux的termux-exec包,它提供了更好的execve()系统调用处理,有助于解决一些二进制执行时的路径问题:

pkg install termux-exec

然后,重新登录Termux会话(关闭App再打开,或者执行exec $SHELL),让设置生效。

3.2 配置与编译:针对ARM64的优化

现在进入关键的配置和编译步骤。我们为ARM64(aarch64)架构编译,并开启一些优化选项:

mkdir build && cd build cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo -DARM_DYNAREC=ON

这里解释一下参数:

  • -DCMAKE_BUILD_TYPE=RelWithDebInfo:生成带调试信息的发布版本。万一运行崩溃,我们可以获取到有价值的堆栈信息,这对于排错至关重要。纯Release版本虽然更小更快,但出了问题几乎无法排查。
  • -DARM_DYNAREC=ON:明确启用ARM平台的动态再编译。这是性能的关键,它允许Box64将翻译过的热点代码块缓存下来,下次直接执行,而不是每次都重新翻译。

接下来就是漫长的编译过程。执行make命令,并可以使用-j$(nproc)参数来启用多核编译,加快速度:

make -j$(nproc)

这个过程视手机CPU性能而定,可能需要10到30分钟。期间CPU会满载,手机会发热,这是正常的。建议在充电且通风良好的环境下进行。

编译成功后,我们进行安装。Box64默认会安装到/usr/local/bin,但在Termux中,我们通常安装到$PREFIX目录下,这是Termux的自包含环境目录:

make install

安装完成后,你可以验证一下:

box64 --version

如果输出了版本信息,比如“Box64 with Dynarec v0.x.x”,那么恭喜你,核心引擎就位了。

3.3 一个关键的隐藏步骤:配置binfmt_misc(可选但推荐)

为了让系统能自动识别x86_64的可执行文件并用Box64来运行,我们可以配置binfmt_misc。不过,在非root的Termux环境中,我们无法直接配置系统的binfmt_misc。但我们可以通过一个取巧的方法:为Box64创建一个包装脚本,并让我们习惯性地使用它。

创建一个脚本/data/data/com.termux/files/usr/bin/box64-run(或者放在你的~/bds_box64目录下,并添加到PATH):

#!/data/data/com.termux/files/usr/bin/bash # 用box64来运行x86_64程序 exec box64 "$@"

然后给它执行权限:

chmod +x /data/data/com.termux/files/usr/bin/box64-run

以后,对于任何x86_64的程序,我们就可以用box64-run ./program来执行了,非常直观。当然,直接box64 ./program也是一样的。

4. 获取与配置:Minecraft BDS服务器端

引擎准备好了,现在需要“燃料”——BDS服务器程序。我们需要从Minecraft官网下载Linux版的服务器端。注意,一定要下载Linux版本,而不是Windows版本。

4.1 下载与解压:注意架构标识

前往 Minecraft官网的下载页面 ,找到“Minecraft Dedicated Server for Linux”的下载链接。你可以用Termux里的wgetcurl直接下载到手机里。

假设我们下载的文件名是bedrock-server-1.20.15.01.zip。我们把它放到工作目录并解压:

cd ~/bds_box64 wget -O bedrock-server.zip [这里替换成实际的下载链接] unzip bedrock-server.zip -d bds_server cd bds_server

解压后,你会看到bedrock_server这个主程序文件。用file命令检查一下:

file bedrock_server

输出应该显示为“ELF 64-bit LSB executable, x86-64, ...”,确认这是一个x86_64架构的二进制文件。

4.2 首次运行尝试与依赖库分析

现在,激动人心的第一次尝试来了。我们直接用Box64来运行它:

box64 ./bedrock_server

99%的概率,你会看到程序崩溃,并输出类似“error while loading shared libraries: libxxx.so.x: cannot open shared object file: No such file or directory”的错误。这是完全正常的,也是整个过程里最磨人的环节——处理动态链接库依赖

BDS是一个闭源的二进制程序,它动态链接了许多系统库。在它原本的Ubuntu等发行版环境中,这些库都存在。但在Termux里,库的路径、名称甚至版本都可能不同。Box64虽然负责翻译指令,但程序加载库的请求(通过dlopen等)最终还是会传递给Termux的系统来执行。Termux找不到对应的库,自然就失败了。

我们的任务就是找到这些缺失的库,并把它们“喂”给BDS。有两种主要思路:

  1. 从x86_64的Linux系统(如Ubuntu)中提取所需的库文件,放在BDS程序目录下的某个文件夹(例如libs_x86)里,然后通过环境变量LD_LIBRARY_PATH告诉Box64和BDS去那里找。
  2. 尝试在Termux中安装同名或功能相似的ARM版本库,有时Box64的兼容层能够处理。但对于核心的、与架构紧密相关的库(如libclibm),方法1是必须的。

我强烈推荐方法1,它更干净、更可控。我们可以使用一个Ubuntu的docker容器或者一台x86的Linux电脑来提取库文件。

4.3 搭建x86库文件补给站

假设你有一台x86的Linux电脑(或一个x86的docker环境),操作步骤如下:

  1. 在该电脑上,创建一个临时目录,把下载的BDS Linux版解压进去。
  2. 使用ldd命令分析bedrock_server的依赖:
    ldd bedrock_server
    这会列出一堆类似libcurl.so.4 => /lib/x86_64-linux-gnu/libcurl.so.4的信息。记下所有以/lib/usr/lib开头的路径。
  3. 将这些库文件复制到一个新文件夹,比如bds_libs_x64。注意,有些库是符号链接,需要把链接指向的实际文件也一并复制。一个相对安全的方法是写一个简单的脚本,或者手动复制主要依赖。

主要依赖通常包括(具体版本号可能不同):

  • libcurl.so.4
  • libssl.so.3libssl.so.1.1
  • libcrypto.so.3libcrypto.so.1.1
  • libpthread.so.0
  • libdl.so.2
  • librt.so.1
  • libm.so.6
  • libc.so.6
  • libstdc++.so.6
  • libgcc_s.so.1
  • libz.so.1

特别注意:libc.so.6libm.so.6是极其核心的C库和数学库。我们不能简单地从x86系统复制它们到ARM环境使用,因为它们是架构相关的。幸运的是,Box64自身内置了对这些核心库的“翻译”支持,它会提供自己的实现(通常叫libc.solibm.so)来拦截程序的调用。所以,对于这两个库,我们通常不需要额外提供,Box64会处理。如果遇到相关问题,可能需要更新Box64版本。

将收集好的bds_libs_x64文件夹打包,传送到你的手机Termux工作目录下,例如放在~/bds_box64/bds_server/libs_x86

5. 连接一切:环境变量与最终启动

库文件就位后,最后的挑战就是正确地设置环境变量,将Box64、库路径和BDS程序连接起来。

5.1 设置关键环境变量

在BDS服务器目录下,我们创建一个启动脚本start.sh,内容如下:

#!/data/data/com.termux/files/usr/bin/bash cd /data/data/com.termux/files/home/bds_box64/bds_server # 设置库搜索路径,优先搜索我们提供的x86_64库目录 export LD_LIBRARY_PATH="./libs_x86:${LD_LIBRARY_PATH}" # 设置Box64的一些优化和日志选项(可选) # BOX64_LOG=1 可以开启基础日志,用于调试 # BOX64_DLSYM_ERROR=1 可以帮助查找缺失的符号 # BOX64_DYNAREC_SAFE=1 如果遇到崩溃,可以尝试开启此选项以禁用某些激进优化 # export BOX64_LOG=1 # 使用box64运行bedrock_server # 添加 --server-name 等参数可以在这里进行 exec box64 ./bedrock_server

给脚本执行权限:

chmod +x start.sh

这个脚本做了几件关键事:

  1. cd到服务器目录,确保程序的工作路径正确,能找到server.properties等配置文件。
  2. 设置LD_LIBRARY_PATH环境变量。这个变量告诉系统的动态链接器(loader)去哪里找共享库。我们让它首先./libs_x86:在前)搜索我们提供的x86_64库目录。这样,当BDS请求libcurl.so.4时,系统会先在./libs_x86里找到我们准备的x86版本,而不是去Termux的ARM库路径里找(那里没有或者架构不对)。
  3. 通过exec命令用Box64启动BDS。exec会用新的进程替换当前shell,使得服务器进程成为终端的主进程,这样我们可以用Ctrl+C来安全地停止服务器。

5.2 首次成功启动与配置

现在,运行启动脚本:

./start.sh

如果一切顺利,你将看到BDS服务器熟悉的启动日志在屏幕上滚动,最后停留在类似“Server started.”这样的信息上。恭喜你,你已经成功在Termux上用Box64启动了BDS!

首次启动后,服务器会在目录下生成server.propertieswhitelist.json等配置文件。你可以按Ctrl+C停止服务器,然后编辑server.properties来配置服务器名称、游戏模式、难度、端口(默认为19132)等。

注意:由于手机的性能和网络环境限制,不建议将此服务器用于超过3-5个玩家的公开或高强度游戏。它更适合作为本地局域网联机、单人测试或插件开发的轻量级环境。

5.3 性能调优与后台运行

服务器跑起来了,但你可能发现它有点卡,或者希望它在后台运行。这里有几个小技巧:

  1. 调整Box64参数:在启动脚本中,可以尝试设置BOX64_DYNAREC_SAFE=1BOX64_DYNAREC=0(禁用动态再编译,作为问题排查步骤)。虽然禁用Dynarec会极大降低性能,但如果在某些特定操作下服务器崩溃,禁用它可以判断是否与动态再编译的某些优化有关。
  2. 使用screentmux后台运行:Termux可以安装screentmux,它们允许你创建虚拟终端会话。这样即使关闭Termux App,服务器进程也不会终止。
    pkg install screen screen -S mcserver # 在新打开的screen会话中,运行 ./start.sh # 按下 Ctrl+A, 然后按 D 键,可以脱离(detach)当前会话。 # 想重新连接时,执行 screen -r mcserver
  3. Termux唤醒锁:为了防止手机休眠时Termux进程被冻结,可以在启动服务器前执行:
    termux-wake-lock
    服务器关闭后,记得执行termux-wake-unlock释放。

6. 疑难杂症:常见问题与排查心法

这个过程不可能一帆风顺。下面是我在多次尝试中遇到的一些典型问题及解决方法,希望能帮你快速定位。

6.1 “Segmentation fault”或“Illegal instruction”

这是最令人头疼的错误之一,通常意味着Box64在翻译某些特定指令时遇到了问题,或者程序访问了非法内存地址。

  • 排查步骤
    1. 升级Box64:首先确保你使用的是最新版本的Box64。开发者ptitSeb一直在积极修复各种兼容性问题。重新git pull拉取最新代码并重新编译安装。
    2. 启用日志:在启动脚本中设置export BOX64_LOG=1,甚至更详细的BOX64_LOG=2。重新运行,观察崩溃前最后的日志输出,看Box64正在处理哪个库或哪个函数。这能提供关键线索。
    3. 禁用Dynarec:设置export BOX64_DYNAREC=0。如果禁用后程序能运行(尽管很慢)但不崩溃了,那问题很可能出在动态再编译的某个环节。可以尝试BOX64_DYNAREC_SAFE=1
    4. 检查库文件:确认你提供的x86_64库文件是完整的,没有损坏,并且来自一个兼容的系统(如Ubuntu 20.04/22.04 LTS)。不同Linux发行版的库版本可能有细微差别。

6.2 “error while loading shared libraries: libxxx.so.x”

这明确是动态链接库的问题。

  • 排查步骤
    1. 确认路径:检查LD_LIBRARY_PATH是否设置正确,以及./libs_x86目录下是否存在报错缺失的那个库文件(libxxx.so.x)。
    2. 检查架构:在x86系统上,用file命令检查你提供的这个库文件,确保它是“ELF 64-bit LSB shared object, x86-64”。如果误复制了32位(x86)的库,也会出错。
    3. 处理符号链接:库文件常常是符号链接。例如,libcurl.so.4 -> libcurl.so.4.8.0。你需要确保链接文件(libcurl.so.4)和实际文件(libcurl.so.4.8.0)都存在于libs_x86目录中。
    4. 使用patchelf(高级):如果库依赖非常复杂,可以考虑在x86系统上,使用patchelf工具修改BDS二进制文件,直接将其库搜索路径(RPATH)指向我们提供的目录,但这有一定风险。

6.3 服务器启动后无法连接

如果服务器日志显示启动成功,但游戏客户端无法连接:

  • 排查步骤
    1. 检查端口:确保server.properties中的server-port(默认19132)是正确的,并且手机防火墙没有阻止此UDP端口。在Termux中,端口通常是开放的,但有些定制安卓系统或安全软件可能会限制。
    2. 检查IP地址:在Termux里用ifconfigip addr命令查看手机在局域网内的IP地址(通常是wlan0接口下的inet地址)。确保客户端连接的是这个IP。
    3. 局域网 vs 公网:此方法搭建的服务器通常只在局域网内可访问。要让公网访问,需要在路由器上设置端口转发(UDP 19132指向手机IP),并且手机需要有一个固定的局域网IP。考虑到手机网络环境的复杂性(如运营商NAT),公网访问难度很大。
    4. 查看服务器日志:尝试连接时,观察Termux中的服务器日志是否有新的连接信息或错误信息。

6.4 性能低下,游戏卡顿

这是预期之内的情况。手机CPU(即使是旗舰芯)的单核性能与桌面CPU仍有差距,Box64的翻译也有开销。

  • 优化思路
    1. 限制玩家和视距:在server.properties中,减小max-players(比如设为2),大幅减小view-distance(比如设为6-8)。这是提升性能最有效的方法。
    2. 关闭生成:将spawn-protection设为0,spawn-animalsspawn-monstersspawn-npcs都设为false,减少服务器运算压力。
    3. 使用轻量级地图:避免在服务器中加载超大型、充满复杂红石或实体的存档。
    4. 手机散热:确保手机散热良好。过热会导致CPU降频,性能进一步下降。

走通在Termux上用Box64运行BDS的整个过程,就像完成了一次微型的系统移植和调试工程。它不仅仅是为了玩,更是一次对Linux底层机制——动态链接、二进制接口、系统调用翻译——的深刻实践。当你看到“Server started.”的字样在手机屏幕上亮起时,那种跨越架构壁垒的成就感,是单纯下载一个App无法比拟的。这个环境非常适合用来学习、测试,或者作为一个小型的、随时可带的私人游戏空间。希望这篇详尽的记录,能帮你绕过我踩过的那些坑,顺利点亮你的移动版BDS服务器。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询