150款安卓游戏跑上iPhone,靠的不是模拟器

IT之家推了一条消息:开源项目 Husk 2.0 能让 iPhone 直接跑安卓游戏,兼容 150 多款,APK、XAPK、APKM、APKS 四种包都能导入,要求 iOS 16 以上,不需要越狱。

评论区的第一反应几乎一致:iPhone 什么时候能装安卓应用了。

能跑不新鲜,越狱还流行的年代就有人试过。做法不一样的地方在这儿:项目作者 Leviidev 没有模拟一台安卓手机,他把游戏自带的 64 位原生代码直接加载进普通 iOS 应用进程里执行。QEMU 那种整机模拟要开机、加载内核、拉起系统服务,画面出来常常要等几分钟;这套做法下,部分游戏几秒就进屏。

真正值得看的不是它能玩什么,而是省掉了哪一段活儿、又卡在哪条规则上。后一个问题的答案,和端侧 AI 眼下的处境是同一个。

「不是模拟器」这四个字,省掉的是一整台安卓机

模拟器得同时模拟硬件和系统,两样都不能省。QEMU 这类方案把 CPU 指令、内存布局、外设寄存器一样样搬过去,再在上面装一个完整的 Android,启动慢、发热、耗电,都是这条路自带的账。

Husk 绕开的是整机这一段。它把游戏的 DEX 文件和 .so 动态库加载进 iOS 应用进程,再从这个进程外部把 Android 那一侧的环境补齐,于是程序对着"安卓"说话,回话的其实是 iPhone。

这里有个容易被漏掉的事实:iOS 设备和安卓手机的 CPU 都是 ARM64,安卓安装包里那套 arm64-v8a 动态库,编译目标写的是 aarch64-linux-android,指令集和 iPhone 是同一套。真正对不上的地方在操作系统那一侧:代码以为自己能调 bionic 的 libc、能读 /proc、能走 Linux 那套系统调用,结果被塞进 XNU 的环境里。

要做的是把这些期待重新接一遍线,不是把指令逐条翻译。线接得干净,程序就察觉不到自己换了家。这解释了为什么它能跑在实体 CPU 上,而不用像模拟器那样在软件层面逐条搬运。

一层薄地基,四块砖

最重的一块是把 Android Runtime 编译成 iOS 版本。安卓应用里大量 Java 和 Kotlin 代码不是原生机器码,得靠 ART 加载 dex 再执行,Husk 需要的是一份能在 iOS 上启动、能加载 dex 的 ART。

bionic 那层是另一件事。它是安卓的 C 库,open、read、malloc、pthread 这些名字两边都有,参数语义和失败时的行为却经常不一样,得有一层垫在中间做转换。

加载器也只能自己写。iOS 的 dyld 只认 Mach-O,不认安卓的 ELF,想把 libunity.so 这类文件喂进去,得自己解析依赖关系、做重定位、把段映射到内存。

图形走两条转换通道:OpenGL ES 的调用经 ANGLE 转成苹果平台的图形接口,Vulkan 经 MoltenVK 转成 Metal。音频、触控和手柄输入一并接管,不然画面出来了也玩不了。

四块拼起来,得到的是一层薄地基,不模拟整台机器,只把程序脚下的地面铺平。好处是快,代价是容错低:安装包必须是 64 位、必须有原生代码、依赖的库得落在已知范围内。项目公开支持 Unity、虚幻 4、Godot 3 和 4,外加 cocos2d-x 与 SDL2/SDL3。名单里那款《GTA:圣安地列斯》值得单独提一句,它的引擎不在上面任何一家之列,能进名单说明地基的通用性比引擎清单看起来更好。早期的验收标准定得很具体:Flappy Bird 满速、地铁跑酷稳在 60 帧,后来公开的演示视频里最高跑到过120 帧​。

苹果只把 JIT 许可证发给调试器

"免越狱"这四个字容易让人误解,它说的是不用破解系统,不是说装起来省事。

Husk 依赖即时编译。iOS 对这件事管得很死,进程默认不能一边写内存一边执行内存,想动态生成机器码,得靠调试器附着把 JIT 权限打开。这是苹果的设计取向,不是疏漏,它挡的正是"运行时造代码"这一整类工具。

第一次上手就得先过这道门:iOS 26 起可以用项目自带的 StikJIT 自己开,更老的系统要绕 TrollStore 或者越狱。装也只能侧载,GPL-2.0 的授权摆在那儿,这条本身就断了上架 App Store 的路。还有两条会直接影响体验的限制:一次只能跑一款应用,换游戏要彻底关掉 Husk 再重开;翻译层兜不住的时候,项目会退回去用 LineageOS 起一个完整的安卓环境,那又回到模拟整机的老路上去了。

它此刻的位置很清楚,是给爱好者用的试验场,不是普通用户的产品。名单上那 150 多款是一遍遍试出来的结果,不是一份"支持全部安卓应用"的承诺;它给开发者的信号也不是"安卓应用可以无成本搬上 iOS",而是移植的成本结构变了,不必替对方重写一份客户端,却得替它找一层运行环境。

两个最容易被说错的地方

第一个说法是"既然免越狱,装起来应该很省事"。这话不是没道理,不破解系统,保修和账号风险确实小得多。但它说不清上手成本到底落在哪里:签名、侧载、JIT 授权、单实例运行,每一步都要人守着,哪一步卡住,前面的功夫全白费。免越狱降的是合规风险,不是操作门槛,这两件事常被混成一件。

第二个说法是"兼容 150 款,等于安卓应用都能跑"。名单覆盖了 Unity、虚幻、Godot 这些主流引擎,听起来确实像通用。可一旦追问细节就露出边界:为什么必须 64 位,为什么只认这几种引擎,为什么兜不住还要退回完整系统。答案指向同一处,薄地基只撑得住依赖可枚举的程序,依赖一旦超出范围,就得把整台机器搬回来。它是一条快路径,不是一层万能胶。

端侧 AI 正在走同一条窄门

把 Husk 这一套拆下来,能留下的东西不多:语言运行时、系统接口的映射、图形或计算后端,三样。谁想在自己的平台上跑别人的程序,都得先把这三样补齐,差别只在补在哪一层。

端侧模型今天面对的是同一道题。模型的权重文件本身是跨平台的,难的是外面那层:算子谁来写、内存怎么摆、后端认不认。llama.cpp 能在 iPhone 上跑,靠的是把 Metal 着色器提前编译好、把内核按硬件写死;Core ML 走得更远,直接把模型编译到神经网络引擎上。两条路的共同点都落在"提前编译"。

Husk 没有这个选项。它要跑的是任意一个 .so,不可能把别人的代码提前编译好再发版,于是只能要求 JIT。同一台 iPhone,跑模型能成,跑安卓游戏得先找调试器,差别就在这里。

我更愿意把这件事记成一条判断:跨端能不能成,取决于谁拿着编译权,而不是芯片跑分。苹果不开放 JIT,Husk 就只能拿侧载和调试器去换;苹果把 Metal 的离线编译放出来,推理框架就活得下去。规则没有改,改的是你站在规则的哪一侧。

Leviidev 的工程量倒着看更清楚:加载器自己写,bionic 那层接口一个个对,两个 APK 解析程序跑了 30 万次模糊测试没崩过一次;名单上那 150 多个名字,是一遍遍测试攒出来的。平台不肯给的接口,自己补一层是可行的,只是底下那层得跟着重写一遍。

想试就先查两样东西:安装包是不是 64 位,系统版本够不够 iOS 16;再去翻项目文档里 JIT 那一段,门槛写在那里,不在下载页上。真装上了,说说你第一个跑起来的是哪款游戏。

相关新闻

shadPS4 固件模块放置指南:把 .sprx 放进 sys_modules 让游戏跑起来

shadPS4 固件模块放置指南:把 .sprx 放进 sys_modules 让游戏跑起来

shadPS4 固件模块放置指南:把 .sprx 放进 sys_modules 让游戏跑起来 【免费下载链接】shadPS4 PlayStation 4 emulator for Windows, Linux, macOS and FreeBSD written in C 项目地址: https://gitcode.com/GitHub_Trending/sh/shadPS4 shadPS4 是面向 Wind…

2026/10/20 10:57:55 阅读更多 →
播客内容矩阵自动化流水线:Whisper+Claude+OpenClaw实操拆解

播客内容矩阵自动化流水线:Whisper+Claude+OpenClaw实操拆解

做了几十期播客之后,我开始意识到一个问题:录音本身只占工作量的三分之一,真正消耗时间的是录音结束之后的那一长串杂活——剪音频、写shownotes、抽金句、做封面、手动分发到各个平台。明明每期内容质量不差,但产量上不去&#x…

2026/10/20 10:57:55 阅读更多 →
05-02-源码-Boehm GC标记阶段

05-02-源码-Boehm GC标记阶段

源码深度:Boehm GC标记阶段元数据系列:Unity和C#的GC剖析与对比章节:05-源码深度-Boehm GC与IL2CPP编号:05-02标签:Boehm GC, 保守标记, Root发现, Partial Clean, 标记栈阅读时间:~30分钟依赖知识&#xf…

2026/10/20 10:57:55 阅读更多 →

最新新闻

【鸿蒙心迹】HarmonyOS学习笔记05:ArkTS函数约定

【鸿蒙心迹】HarmonyOS学习笔记05:ArkTS函数约定

🔥 个人主页: 杨利杰YJlio ❄️ 个人专栏: 《Windows 疑难杂症与工单复盘案例库》 《Sysinternals实战教程》 《WINDOWS教程》 《Windows PowerShell 实战》 《IOS插件分析测试》 《超简单:用Python让Excel飞起来》…

2026/10/20 12:00:58 阅读更多 →
Trackformer多目标跟踪复现:从环境搭建到ID跳变排查的完整实践

Trackformer多目标跟踪复现:从环境搭建到ID跳变排查的完整实践

1. 从标题拆解这个项目到底在做什么1.1 目标跟踪与轨迹识别,到底解决的是什么问题先把概念说清楚。目标跟踪(Object Tracking)要回答的问题是:在视频里,某一帧出现了一个我关心的目标,接下来的每一帧里&…

2026/10/20 12:00:58 阅读更多 →
开源多智能体项目:三个AI角色交叉质询,收敛出可执行方案

开源多智能体项目:三个AI角色交叉质询,收敛出可执行方案

前段时间我一直在折腾多智能体相关的开源项目,最直观的感受是:模型本身的能力已经够用了,真正让人头疼的是怎么让几个模型像一支团队那样配合起来,而不是各说各话。直到我看到这个项目的思路,才觉得终于有人把“让顶级…

2026/10/20 12:00:58 阅读更多 →
Formula One 表格控件实战:从注册到公式校验的完整指南

Formula One 表格控件实战:从注册到公式校验的完整指南

简介:Formula One 9.0 是一款基于 Java 开发的 VTS 内容编辑工具,面向需要定期制作与定制模板化内容的个人用户及小型团队。它通过模板化编辑方式简化 VTS 内容的创建流程,降低重复劳动,适合对图形化编辑与 XML 数据处理有需求的办…

2026/10/20 12:00:57 阅读更多 →
ICT在线测试全解析:原理、测试策略与误判排查实践

ICT在线测试全解析:原理、测试策略与误判排查实践

简介:PCBA制造中,测试策略的合理选择直接决定产品良率与交付效率。ICT(在线测试仪)作为静态测试手段,通过探针接触与Guarding隔离技术,在不通电状态下精准定位开路、短路、错件、漏件等缺陷,与A…

2026/10/20 12:00:57 阅读更多 →
基于深度学习的新闻摘要生成:从Encoder-Decoder到注意力机制的实践

基于深度学习的新闻摘要生成:从Encoder-Decoder到注意力机制的实践

又到了一年一度的毕设季,后台好几个读者问我同一个题目:“基于深度学习的新闻摘要生成算法实现”。这个题选得挺聪明,新闻摘要属于文本生成里最有代表性的任务之一,数据好找、效果直观、还能往上堆注意力机制和预训练模型&#xf…

2026/10/20 11:59:57 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →