# 平台特定问题

> "在桌面能用，在手机上崩溃" —— 状态栏、键盘、权限、BLE 桩、密度。

Source: https://crossfly.dev/zh/docs/troubleshooting/platform-specific — CrossFly documentation. Full docs as one file: https://crossfly.dev/llms-full.txt

# 平台特定问题

只在某个目标平台上出现的行为。格式：**症状 → 原因 → 修复**。

## Android：内容被状态栏遮挡
**原因：** 没有应用状态栏的偏移 `difY` / 高度。
**修复：** 在顶部布局中考虑 `DeviceConfig.statusbarHeight`。
（[Android](/docs/platforms/android)）

## 虚拟键盘遮住了聚焦的字段
**原因：** 键盘弹起时字段没有重新定位。
**修复：** 根据 `Device.keyboardShift`/`keyboardHeight` 进行调整。
（第 6 章 —— 事件与输入）

## iOS：构建失败（RoboVM）
**原因：** 工具链/签名（macOS+Xcode、provisioning）。
**修复：** 检查 iOS launcher 以及证书/provisioning。（[iOS](/docs/platforms/ios)）

## 设备权限被拒绝（摄像头/GPS/存储）
**原因：** 权限未授予 / 未声明。
**修复：** 检查 `DeviceConfig.cameraAllowed`/`storageAllowed`，并在 `AndroidManifest.xml`/`Info.plist` 中声明；在启动 UI **之前**于运行时请求权限（Android 上延迟启动）。
（第 24 章）

## 蓝牙"什么都不做"
**原因：** 在 **core** 中，BLE 的部分只是**基于缓存的骨架**——真正的射频运行在各平台的 launcher 中。
**修复：** 在**真实设备**上测试；确认目标平台的实现。
（[Bluetooth BLE](/docs/data-and-services/device-bluetooth-ble)）

## `FilePicker` / `IWebView` 没有效果（或 web 上的 `WebContainer`）
**原因：** 某些目标平台上只有骨架/没有具体实现；在 **web** 上 `createWebView()` 返回 `null`。
**修复：** 检查 `!= null`/`Device.platform` 并使用替代方案（`Device.homeFolder` 中的文件；web 上使用 `PlatformUtils.instance.view(url)`）。（[原生集成](/docs/platforms/native-integration)）

## 各平台之间颜色/渲染有差异
**原因：** 通常是 `Screen.scale`/密度。
**修复：** 使用**逻辑像素**和 `Relative`，绝不要把 `Gdx.graphics` 当作尺寸参照。
（[响应式](/docs/best-practices/responsividade)）

## 另请参阅
- [构建与 Gradle](/docs/troubleshooting/build-gradle) · [平台矩阵](/docs/platforms/overview)
