该技能用于把 Godot 4.x 游戏发布到 Android 和 iOS,聚焦通用导出之外的平台差异:签名、生命周期、权限、插件、IAP、设备特性与移动渲染性能。相关技能包括 export-pipeline(通用导出与 CI/CD)、responsive-ui(安全区布局)、input-handling(触控)、godot-optimization(移动性能)、csharp-godot(C# 移动注意事项)。
一、导出与签名 Android 需 OpenJDK 17 与 Android SDK,在编辑器设置中配置 Java SDK Path 与 Android SDK Path(按用户而非按项目)。生成发布密钥:keytool -v -genkey -keystore mygame.keystore -alias mygame -keyalg RSA -validity 10000。预设字段填 Release / Release User / Release Password(密钥库与密钥密码当前须一致),取消勾选 Export With Debug;新 Play 上传强制使用 AAB。CI 环境变量覆盖:GODOT_ANDROID_KEYSTORE_RELEASE_{PATH,USER,PASSWORD}。iOS 需 macOS 与 Xcode,导出需 App Store Team ID 和反向 DNS 的 bundle Identifier,Godot 生成 .xcodeproj 在 Xcode 构建;iOS 模拟器仅支持 Compatibility 渲染器。使用 v2 插件和 IAP(Godot 4.2+)需自定义 Gradle 构建(Project → Install the Gradle Build template);自 Godot 4.7 起 Use Gradle Build 不再是实验性选项。注意 Godot 4.7 移除了已弃用的 Google Play OBB 扩展文件支持,依赖它的项目应迁移到 AAB + Play Asset Delivery,或安装单独的 Godot OBB 插件。
二、应用生命周期 关键通知:NOTIFICATION_APPLICATION_PAUSED(2015)、RESUMED(2014)、FOCUS_IN/_OUT(2016/2017)、NOTIFICATION_WM_GO_BACK_REQUEST(1007,Android 返回键)。移动端没有 WM_CLOSE_REQUEST。应在 PAUSED 时自动保存;iOS 在暂停后约 5 秒会结束应用。GDScript 与 C# 示例见原文(C# 名称为推测)。Android 4.7+ 支持画中画:DisplayServer.pip_mode_enter()、is_in_pip_mode()、pip_mode_set_aspect_ratio()、pip_mode_set_auto_enter_on_background(),通知为 NOTIFICATION_APPLICATION_PIP_MODE_ENTERED(2019)/EXITED(2020),均为 Android 专属。
三、权限 在导出预设中以 permissions/<name> 声明,运行时用 OS.request_permission(name) 请求,结果经 MainLoop 的 on_request_permissions_result(permission, granted) 返回;权限必须同时在预设中启用。
四、调用 Android API(JavaClassWrapper,Godot 4.4+) Godot 4.4+ 用 JavaClassWrapper.wrap("<java.class>") 调用 Java/Kotlin 类,无需插件;AndroidRuntime 单例(4.4 新增)提供 getActivity()、getApplicationContext()、createRunnableFromGodotCallable(callable)。跨平台替代方案 Input.vibrate_handheld(duration_ms, amplitude) 需 VIBRATE 权限(iOS 需 iOS 13+)。4.7+ 可用 create_proxy(object, interfaces) 与 create_sam_callback(sam_interface, callable) 实现 Java 接口,非 Android 平台返回 null。
五、设备特性与安全区 DisplayServer.get_display_safe_area() 返回刘海/挖孔内的可用区域(Android/iOS),get_display_cutouts()(Android)列出挖孔矩形。运动传感器在 Input 上(加速度计/重力/陀螺仪/磁力计,仅 Android/iOS)。Android 支持原生文件对话框;Godot 4.7 起原生文件选择器在所有设备可用。4.7+ 可用内置 VirtualJoystick 节点。4.7+ 支持 orientation_changed(orientation) 信号(1 竖屏、2 横屏、0 未定义)。
六、移动性能与渲染器 使用 Mobile(或 Compatibility)渲染器,iOS 模拟器仅兼容模式;Android 纹理压缩需启用 rendering/textures/vram_compression/import_etc2_astc=true(ETC2/ASTC)。保持单架构 APK 精简,AAB 会自动按设备拆分。
七、C# 移动端 C# 的 Android/iOS 导出自 Godot 4.2+ 起为实验性。Android C# 导出在 Godot 4.5 下需 .NET 9+;iOS 导出仅限 macOS,模拟器模板仅 x64。C# 无法导出到 Web。建议尽早测试 C# 导出流程。
文中另附实现检查清单,涵盖密钥库/签名配置、AAB、PAUSED 自动保存、权限声明与请求、JavaClassWrapper 版本标注、安全区适配、渲染器与压缩、.NET 版本以及 OBB 迁移。