常见问题

评估

要把游戏包发给你们吗?

要一个能跑的代表性包,光看接口名判断不了。法务在意就先签 NDA,或先发一个剥皮版 (去美术、留逻辑)。

真机数据覆盖到哪一步?

三款游戏 (PixiJS / Phaser / 原生 Canvas) 在 Mate 30 Pro 上各跑 3 遍,见 性能页; 一致性套件三端共 80 条共有断言全过。原始数据在 migo-bench。

接下来会补上哪些证据?

  • 低端机对照在做现有数字都来自 Mate 30 Pro。补红米 A 档入门机,同套 harness。
  • 真机同帧录像在做Migo 与 WebView 同机同游戏,一镜到底,画面叠加 PSS / CPU。
  • 跨 OEM 一致性在做补小米 / OPPO / vivo 各一行。
  • 接口检索页在做369 个接口独立成页,搜名字直接到答案。
  • 英文站在做东南亚与中东客户需要。

接入

我的包是按小游戏 target 打的,能直接运行吗?

能,这是主路径。装 migo-wx-adapter 后 wx.* 调用原样保留。Cocos / Egret / Laya 小游戏导出即载入;Unity 走 WebGL 导出再转小游戏 target。浏览器 target 走 migo-web-adapter。清单外调用返回错误码,不静默失败。

装上 web 适配层之后,浏览器接口的行为有哪些差异?

装了 migo-web-adapter 后,浏览器名字 → 运行时函数的映射:

浏览器里的名字核心运行时装 web adapter 后说明
  • document.createElement
    document.getElementById
    没有可用适配层建一棵最小元素树,深度刚好够引擎的启动代码不抛错。getElementById("GameCanvas") 会拿到那块真画布。
  • document.querySelector
    getElementsByTagName
    没有返回 null / 空数组不做 CSS 选择器匹配,也不解析 HTML。引擎若依赖选择器查找元素,此处需要适配。
  • getComputedStyle
    CSSStyleDeclaration
    没有仍然没有不跑布局引擎。游戏内的界面由游戏自己画在画布上。
  • addEventListeneronTouchStart()可用适配层把触摸、键盘、手柄转成 DOM 风格事件再派发。
  • new Image()
    XMLHttpRequest
    createImage()
    request()
    可用引擎自带资源加载器原样跑。不支持 CORS、cookie、响应流、Blob 与 FormData。
  • fetchrequest()仍然没有网络走宿主通道,域名白名单与证书策略可控。需要 fetch 时自带 polyfill。
  • WebSocketconnectSocket()可用长连接也走宿主通道,便于统一超时与重连。
  • localStoragesetStorageSync()可用宿主管理,含容量上限与清理策略。缺键返回 null。
  • sessionStorage没有仍然没有没有会话概念。短期状态放内存。
  • new Worker()createWorker()仍然没有子线程由运行时创建,走 postMessage / onMessage。
  • window.innerWidth
    devicePixelRatio
    getWindowInfo()加载时快照不订阅 resize, 避免与引擎布局缓存打架。旋转后自己读 getWindowInfo()。

我的游戏调用的接口在不在清单里?

接口都挂在 migo.* 下,装 wx-adapter 后 wx.* 是同一批函数。十二组互不重叠:

9个接口
广告位

激励视频、插屏、Banner、格子,四种位型的创建与生命周期

3个接口
支付

道具购买与支付能力探测,实现交回宿主

18个接口
账号授权

登录、用户信息、授权设置与隐私协议入口

5个接口
开放数据域

排行榜要的第二个 JS 上下文,加一块共享画布

15个接口
分享转发

群聊、朋友圈、分享图与转发菜单的成对回调

19个接口
键盘与文本

原生输入法浮层与候选事件,游戏侧不需要 DOM input

5个接口
分包与预取

首包瘦身、按需加载、资源与 DNS 预取

16个接口
网络

request、WebSocket、TCP、UDP,全部走宿主通道

25个接口
触摸与输入

触摸、鼠标、滚轮、按键、手柄,每个都可解绑

16个接口
原生浮层

Toast、弹窗、扫码、客服会话与业务视图,由原生绘制

32个接口
WebAudio

完整节点图:振荡器、滤波、混响、分析与声道路由

9个接口
帧与定时

逐帧回调、定时器,以及目标帧率的显式设定

另有 197 个: 画布与图像、音视频录制与直播、设备与系统信息、文件系统、蓝牙与 Beacon、定位、日志与性能上报、Worker、小程序跳转、生命周期。

11 个是桩 (虚线框) — 名字在、调用不报错、但什么也不做。与 data/surface.txt 同源,构建期门禁校验。

369 / 369
AnalyserNodeAudioBufferAudioBufferSourceNodeAudioContextAudioDestinationNodeAudioListenerAudioNodeAudioParamBiquadFilterNodeChannelMergerNodeChannelSplitterNodeConstantSourceNodeDelayNodeDynamicsCompressorNodeFileManagerFloat16ArrayGainNodeIIRFilterNodeImageBitmapInnerAudioContextMediaAudioPlayerOscillatorNodePannerNodePeriodicWaveScriptProcessorNodeTemporalURLWaveShaperNodeWebGL2RenderingContextWebGLRenderingContextaddColorSignaddRecentColorSignalertauthPrivateMessageauthorizecancelAnimationFramecheckIsAddedToMyMiniProgramcheckIsSupportMidasPaymentcheckScenecheckSessioncheckUpdatecheckUserLocationcheckWritePhotosAlbumchooseImagechooseMessageFileclearIntervalclearStorageclearStorageSyncclearTimeoutcloseBLEConnectioncloseBluetoothAdaptercloseSocketcompressImageconfigconnectSocketcreateBLEConnectioncreateBannerAdcreateBufferURLcreateCameracreateCanvascreateCustomAdcreateFeedbackButtoncreateGameBannercreateGameClubButtoncreateGameIconcreateGamePortalcreateGridAdcreateImagecreateImageBitmapcreateImageDatacreateInnerAudioContextcreateInterstitialAdcreateLivePlayercreateLivePushercreateMediaAudioPlayercreatePageManagercreateRewardedVideoAdcreateTCPSocketcreateUDPSocketcreateUserInfoButtoncreateVideocreateVideoDecodercreateWebAudioContextcreateWorkerdecodedefinedownloadFileencodeenverrorexitApplicationexitMiniProgramfetchSecondFloorIconOptionSyncgetAccountInfoSyncgetAppAuthorizeSettinggetAppBaseInfogetAvailableAudioSourcesgetBLEDeviceCharacteristicsgetBLEDeviceRSSIgetBLEDeviceServicesgetBLEMTUgetBatteryInfogetBatteryInfoSyncgetBeaconsgetBluetoothAdapterStategetBluetoothDevicesgetClipboardDatagetConnectedBluetoothDevicesgetDeviceBenchmarkInfogetDeviceInfogetDirectAdStatusSyncgetEnterOptionsSyncgetFileSystemManagergetFriendCloudStoragegetFuzzyLocationgetGameClubDatagetGameLogManagergetGamepadsgetHeapStatisticsgetLaunchOptionsSyncgetLocalIPAddressgetLocationgetLogManagergetMenuButtonBoundingClientRectgetNetworkTypegetOpenDataContextgetPerformancegetPhoneNumbergetPotentialFriendListgetPrivacySettinggetRealtimeLogManagergetRecorderManagergetScreenBrightnessgetSettinggetSharedCanvasgetShowSplashAdStatusgetStoragegetStorageInfogetStorageInfoSyncgetStorageSyncgetSystemInfogetSystemInfoAsyncgetSystemInfoSyncgetSystemSettinggetTextLineHeightgetUpdateManagergetUserCryptoManagergetUserGameLabelgetUserInfogetUserProfilegetWhatsNewSubscriptionsSettinggetWindowInfogetWritePhotosAlbumhideKeyboardhideLoadinghideShareMenuhideToastisBluetoothDevicePairedisColorSignExistSyncloadFontloadSubpackageloginmakeBluetoothPairmodifyFriendInteractiveStoragenavigateBackMiniProgramnavigateToMiniProgramnavigateToScenenotifyBLECharacteristicValueChangeoffAccelerometerChangeoffAddToFavoritesoffAppHideoffAppShowoffAudioInterruptionBeginoffAudioInterruptionEndoffBLECharacteristicValueChangeoffBLEConnectionStateChangeoffBLEMTUChangeoffBeaconServiceChangeoffBeaconUpdateoffBluetoothAdapterStateChangeoffBluetoothDeviceFoundoffCompassChangeoffCompositionEndoffCompositionStartoffCompositionUpdateoffDeviceMotionChangeoffDeviceOrientationChangeoffDirectAdStatusChangeoffErroroffGamepadConnectedoffGamepadDisconnectedoffGyroscopeChangeoffHideoffKeyDownoffKeyUpoffKeyboardCompleteoffKeyboardConfirmoffKeyboardHeightChangeoffKeyboardInputoffMemoryWarningoffMessageoffMouseDownoffMouseMoveoffMouseUpoffNeedPrivacyAuthorizationoffNetworkStatusChangeoffNetworkWeakChangeoffShareAppMessageoffShareMessageToFriendoffShareTimelineoffShowoffSocketCloseoffSocketErroroffSocketMessageoffSocketOpenoffTouchCanceloffTouchEndoffTouchMoveoffTouchStartoffUnhandledRejectionoffUserCaptureScreenoffWheeloffWindowResizeonAccelerometerChangeonAddToFavoritesonAppHideonAppShowonAudioInterruptionBeginonAudioInterruptionEndonBLECharacteristicValueChangeonBLEConnectionStateChangeonBLEMTUChangeonBeaconServiceChangeonBeaconUpdateonBluetoothAdapterStateChangeonBluetoothDeviceFoundonCompassChangeonCompositionEndonCompositionStartonCompositionUpdateonDeviceMotionChangeonDeviceOrientationChangeonDirectAdStatusChangeonErroronGamepadConnectedonGamepadDisconnectedonGyroscopeChangeonHideonKeyDownonKeyUponKeyboardCompleteonKeyboardConfirmonKeyboardHeightChangeonKeyboardInputonMemoryWarningonMessageonMouseDownonMouseMoveonMouseUponNeedPrivacyAuthorizationonNetworkStatusChangeonNetworkWeakChangeonShareAppMessageonShareMessageToFriendonShareTimelineonShowonSocketCloseonSocketErroronSocketMessageonSocketOpenonTouchCancelonTouchEndonTouchMoveonTouchStartonUnhandledRejectiononUserCaptureScreenonWheelonWindowResizeopenAppAuthorizeSettingopenBluetoothAdapteropenBusinessViewopenCustomerServiceConversationopenPageopenPrivacyContractopenSettingopenSystemBluetoothSettingperformancepostMessagepreDownloadSubpackageprefetchAssetsprefetchDnsprefetchImagepreviewImagepreviewMediaqueueMicrotaskreadBLECharacteristicValuereadyremoveStorageremoveStorageSyncremoveUserCloudStoragereportEventreportMonitorreportPerformancereportScenerequestrequestAnimationFramerequestMidasPaymentrequestMidasPaymentGameItemrequestSubscribeMessagerequestSubscribeSystemMessagerequestSubscribeWhatsNewrequirerequirePrivacyAuthorizerestartMiniProgramrestartMiniProgramSyncrevokeBufferURLsaveAppToDesktopsaveFilesaveFileSyncsaveFileToDisksaveImageToPhotosAlbumscanCodesendSocketMessagesetBLEMTUsetClipboardDatasetDeviceOrientationsetEnableDebugsetImmediatesetInnerAudioOptionsetIntervalsetKeepScreenOnsetMessageToFriendQuerysetPreferredFramesPerSecondsetScreenBrightnesssetStoragesetStorageSyncsetTimeoutsetUserCloudStorageshareAppMessageshareMessageToFriendshowActionSheetshowKeyboardshowLoadingshowModalshowShareImageMenushowShareMenushowToaststartAccelerometerstartBeaconDiscoverystartBluetoothDevicesDiscoverystartCompassstartDeviceMotionListeningstartGyroscopestopAccelerometerstopBeaconDiscoverystopBluetoothDevicesDiscoverystopCompassstopDeviceMotionListeningstopGyroscopesubscribeAppMsgtriggerGCupdateAppupdateKeyboardupdateSecondFloorChannelupdateShareMenuuploadFilevibrateLongvibrateShortwriteBLECharacteristicValue

性能与体积

能不能不让所有用户都下载这 16 MB?

能,v0.9.4 起支持 nojni.aar:当前首包 0.40 MB,不含引擎;首启时由宿主下载(Play 走 PFD,其他渠道走自有通道),校验 sha256 后本地缓存。引擎和二进制与 AAR 内嵌版本相同,不是简化版。失败可重试,不必重启。

推到 22 万精灵会怎样?

Bunnymark 从 4 万加到 22 万,每档两遍取均值。膝点两边都在 4 万,差别在膝点之后:

帧率中位数 · fps移入或用方向键逐档查看
精灵数70 000系统 WebView42.0Migo45.0
01530456040k70k100k140k180k220k精灵数 · k = 千7 万起换手
帧率扫描原始数据
精灵数系统 WebView fpsMigo fps
400006060
7000042.544.5
1000003132
1400002323
1800001617
2200001313

两边跌破 55 fps 的位置相同, 但 7 万 / 10 万 / 18 万三档 Migo 各高 1 fps。22 万这档远超真实游戏,两边都是 13 fps。

凭什么说各平台行为一致?

有一致性套件同一批断言在 Linux 参考实现、Android 模拟器、Mate 30 Pro 三台跑。2026-08-30 对 v0.9.6 实测,三次运行逐条一致:Linux 参考实现(x86_64)80/80、Android 模拟器(API 26,本引擎支持的最低版本)86/86、华为 Mate 30 Pro(API 31,arm64)86/86。多出的 6 条是只有真机才有意义的两个测试 —— 需要转屏、需要将 app 切到后台。跳过的断言必打印,绝不静默。首跑抓到三个真 bug: getImageData 空缓冲、ctx.font 一次赋值两个字号、新建 WebGL 首次 clear 回读空。仓库在 migo-conformance。

发布与平台

哪些平台已经发布?

  • Android已发布arm64-v8a / x86_64。 AAR + Java/Kotlin SDK, minSdk 26。
  • Linux已发布x86_64 / aarch64。 静态/动态库、pkg-config、CMake; Qt 6 / X11 宿主参考。
  • Windows已发布x86_64 / aarch64。 migo.dll + 导入库、CMake。
  • HarmonyOS NEXT已发布aarch64 / x86_64。 V8 不能 JIT, 见下一条。
  • iOS已发布aarch64 设备与模拟器。 framework + C ABI。
  • macOS已发布aarch64 / x86_64。
  • C ABI 客户端候选不走 Java 层,直接 C 接自有渲染循环。接口未冻结。

产物在 releases,每包附 .attestation.json。

HarmonyOS NEXT 上有什么不一样?

自 5.0.0(12) 起第三方 VM 一律不能 JIT, V8 只能解释执行。在 Android 上用 --jitless 模拟过: 带 .wasm 的内容跑不起来, 纯 JS 内容吃满算力时帧率是 JIT 的 1/2.4 ~ 1/16, 膝点从 40,000 精灵挪到 2,000。轻量纯 JS 在高端机上不受影响, 内存反而低 5-9%。数据在 migo-bench JITLESS.md。

运营

出问题怎么回滚?

运行时随 App 构建固定版本,回滚到上一构建就回到上一运行时。系统 WebView 的版本不受你控制,做不了这个动作。

广告、支付和用户数据归谁?

归宿主。运行时不内置广告网络,不持有账号或商户凭证,只通过显式回调发起请求。 未实现能力按文档明确失败,不自行判定支付成功。 9 组回调不接的后果逐条写在 宿主回调页。

开源版本能直接用于商业产品吗?

源码 BSL 1.1, 可见可改。 生产使用先读 许可文本, 商务走 licensing@minigame-labs.com。 安全漏洞走 SECURITY.md。