前言
一直以来,由于受 iOS 系统封闭性限制,在 iPhone、iPad 上运行原生 Java 环境、部署 Minecraft Java 版服务端,近乎是不可能的。如今,得益于 TrollStore 和 Roothide Bootstrap 环境,我们完全可以绕开这些限制,把手里闲置的 iOS 设备真正变成一台便携的服务器。
本文方案仅支持 iOS 14.0-17.0 系统的旧款设备,17.0.1 及以上版本无适配可能性。
底层逻辑
本教程依赖 TrollStore(巨魔商店)和 Roothide Bootstrap。TrollStore 利用 CoreTrust 漏洞打破限制实现提权,Bootstrap 则在此之上构建了隐蔽的无根(Rootless)运行环境。
但在该环境下,受 iOS 严格的代码签名机制(AMFI)限制,直接执行未经签名的二进制文件会被系统强制终止(终端会提示 Killed)。
因此,我们需要将其构建为标准的 deb 软件包,然后使用 ldid 进行签名,再通过 Roothide Patcher 进行架构转换,最后使用 Sileo 完成安装。
部署环境及所需工具
- 一台已安装 TrollStore(巨魔商店)和 Roothide Bootstrap 的 iPhone、iPad 或 iPod touch(受支持的系统版本为 iOS/iPadOS 14.0-16.6.1 以及 16.7 RC 和 17.0)
- 确保 Bootstrap 处于已引导状态(每次重启后需重新引导)
- 在 Sileo 中安装 NewTerm、Filza、RootHide Patcher、wget、unzip、tar、xz-utils
- 良好的访问国际互联网的环境
注意正常安装 TrollStore 不会影响或清除个人数据,但涉及底层折腾,强烈建议在动手前先做好备份,以防万一。
我所用的设备为搭载 A10 处理器的 iPad 7,系统版本为 iPadOS 16.3。

打包 deb 软件包
注意本步骤中的命令均在 NewTerm 中执行!
首先,下载编译好的 Java 21 二进制包并解压(Java 压缩包来自 Amethyst-iOS 项目):
mkdir -p /var/mobile/Documents/jre21
cd /var/mobile/Documents
wget https://crystall1ne.dev/cdn/amethyst-ios/jre21-ios-aarch64.zip
unzip jre21-ios-aarch64.zip
tar -xvJf jre21-ios-arm64-20250915-release.tar.xz -C jre21/
rm jre21-ios-aarch64.zip jre21-ios-arm64-20250915-release.tar.xz
建立软件包框架:
mkdir -p my_java/DEBIAN
mkdir -p my_java/var/jb/usr/lib/jvm/java-21
mkdir -p my_java/var/jb/usr/bin
写入标准的 Control 文件:
cat << 'EOF' > my_java/DEBIAN/control
Package: com.java.jre21
Name: Java 21 Runtime
Version: 21.0.8
Architecture: iphoneos-arm64
Maintainer: RootHide Hacker
Author: OpenJDK
Section: Utilities
Description: A natively packaged Java for RootHide.
EOF
复制 Java 核心文件:
cp -r /var/mobile/Documents/jre21/* my_java/var/jb/usr/lib/jvm/java-21/
由于 iOS 限制,必须关闭 Java 的指针压缩才能运行。为避免每次执行都要加上参数,可以对 Java 命令进行封装:
cat << 'EOF' > my_java/var/jb/usr/bin/java
#!/bin/sh
exec /var/jb/usr/lib/jvm/java-21/bin/java -Duser.language=en -Duser.country=US -Dfile.encoding=UTF-8 -XX:-UseCompressedOops -XX:-UseCompressedClassPointers "$@"
EOF
创建软链接:
ln -s /var/jb/usr/lib/jvm/java-21/bin/{jfr,jrunscript,jwebserver,keytool,rmiregistry} my_java/var/jb/usr/bin/
生成权限文件:
cat << 'EOF' > /var/mobile/Documents/ent.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.private.security.no-sandbox</key>
<true/>
<key>com.apple.private.security.no-container</key>
<true/>
<key>platform-application</key>
<true/>
<key>com.apple.developer.dynamic-codesigning</key>
<true/>
</dict>
</plist>
EOF
对可执行文件和动态库进行批量签名:
find /var/mobile/Documents/my_java/var/jb/usr/lib/jvm/java-21 -type f \( -path "*/bin/*" -o -name "*.dylib" \) -exec ldid -S/var/mobile/Documents/ent.xml {} \;
最后,赋予可执行权限并完成打包:
chmod -R 755 my_java/var/jb/usr/lib/jvm/java-21/bin
chmod -R 755 my_java/DEBIAN
dpkg-deb -Zzstd -b my_java jre21_rootless.deb
通过 Roothide Patcher 转换
打开 Filza,进入[jbroot] 中的 /var/mobile/Documents 目录,找到我们刚刚打包好的 deb 文件。长按并选择 使用 App 打开,在更多 App 中选择 Patcher。点击 Convert .deb,并等待转换完成。

转换完成后,点击 ->Sileo,会自动打开安装界面。
使用 Sileo 安装
点击 获取,然后点击右下角的 队列 ,点击 确认 进行安装即可。

运行 Minecraft Java 服务端
实测原版 MC 服务端可以正常运行,并且可以成功进入游戏。在跑图等高负载场景下,服务器表现稳定,未出现明显的掉帧或卡顿。(注:本次仅针对原版纯净服,模组服的实际表现暂未测试。)
由于 Java 官方不支持 iOS 系统,程序会误以为自己运行在 macOS 上。这不影响正常使用,直接忽略即可。
成果展示:


评论