Guide · 05 Mobile, Web & MiniProgram Hosts

移动端、Web WASM 与小程序宿主适配

一套 GPUI 视图无缝运行于 iOS、Android、HarmonyOS NEXT 以及浏览器 WebGPU/WebGL2 与小程序 WASM 容器,自动适配灵动岛、底部手势条、胶囊按钮安全区与响应式断点。

移动与 WASM 交叉编译目标矩阵

目标平台Rust Target Triple产物类型原生图形宿主与渲染后端
iOS / iPadOSaarch64-apple-iosstaticlibUIKit + CAMetalLayer (Metal · ProMotion)
Android 10+aarch64-linux-androidcdylibNativeActivity + ANativeWindow (Vulkan / GLES3)
HarmonyOS NEXTaarch64-unknown-linux-ohoscdylibArkTS Native XComponent + OHNativeWindow
Web (Browser WASM)wasm32-unknown-unknowncdylib (.wasm)gpui_web + HTML5 Canvas (WebGPU / WebGL2)
MiniProgram (小游戏/小程序)wasm32-unknown-unknowncdylib (.wasm)WeChat / Douyin / Alipay WebGL2 Canvas + Canvas2D CJK Fallback

响应式断点与安全区 (`ResponsiveContext` & `SafeAreaInsets`)

gpux::ResponsiveContext 根据视口尺寸与运行平台自动推导 Breakpoint(Compact < 600px、Medium 600..1024px、Expanded >= 1024px),并携带 iOS 灵动岛、Android 状态栏或小程序右上角胶囊按钮的 SafeAreaInsets:

rust
use gpux::prelude::*;

let safe_area = SafeAreaInsets {
    top: 47.0,    // iOS Dynamic Island / HarmonyOS 状态栏避让
    right: 0.0,
    bottom: 34.0, // Home Indicator 手势条避让
    left: 0.0,
};

let ctx = ResponsiveContext::new(393.0, 852.0, safe_area);
assert_eq!(ctx.breakpoint(), Breakpoint::Compact);
assert!(ctx.is_mobile_layout());

Web WASM 与小程序宿主 (`gpux-web`)

在 Web 浏览器与微信/抖音/支付宝小程序中,gpux_web::WebBackend 默认开启 WebFontFallback::EmojiAndCjk,将中文字形与彩色 Emoji 交由宿主 Canvas2D 光栅化并上传至 GPU 纹理图集,无需在 WASM 包内内嵌 15MB+ 中文字体即可保持约 1.9 MB 的极致首屏体积:

rust
use gpux::prelude::*;
use gpux_web::{WasmHostKind, WebBackend, WebFontFallback};

// 1. 标准浏览器 DOM Canvas 宿主 (#gpux-canvas)
let web_host = WebBackend::new();
assert_eq!(web_host.font_fallback, WebFontFallback::EmojiAndCjk);

// 2. 微信小程序 WebGL2 宿主(自动注入 44pt 顶部胶囊安全区与 34pt 底部安全区)
let mp_host = WebBackend::miniprogram(WasmHostKind::WeChatMiniProgram);
assert_eq!(mp_host.kind(), PlatformKind::MiniProgram);