结论
- 移动端问题通常发生在 Unity、原生 SDK、系统版本、商店政策和构建工具链的交界处。
- Android 16 KB Page Size、SDK 版本升级、OpenURL 文件权限、ANR、Crashlytics 符号化都是发布前必须单独验证的风险点。
- iOS 侧要重点关注符号表、Framework 链接、动态字体、UnityFramework 和原生插件兼容。
- 平台问题不能只在 Editor 验证,必须用真机、Release 包、目标 ABI 和线上等价构建配置验证。
Android 关注点
- Android 16 KB Page Size 要求会影响 native library,对 Unity 版本、NDK、第三方 so 和打包方式都有要求。
- SDK 34 等 Target API 升级可能引发权限、文件访问、通知、广告 SDK 和 Gradle 插件兼容问题。
- Android 7 之后
OpenURL()打开本地文件受 FileProvider / URI 权限限制影响,不能继续依赖旧的file://行为。 - ANR 常见于主线程阻塞、SDK 初始化、广告回调、文件 IO、网络等待和 Unity 与原生线程交互。
- Crashlytics 上报要确认符号文件上传完整,否则 native crash 难以定位。
Android 构建链风险
- AGP、Gradle、JDK、NDK 和 Unity Editor 之间存在隐性兼容关系,升级前应先在最小工程验证。
- 多渠道包要检查 Manifest 合并结果,尤其是
provider、activity、queries、uses-permission和exported。 - Native crash 必须保留 tombstone、Build ID、ABI、符号文件和构建产物,否则只能看到不可读地址。
- 三方 SDK 初始化应延后、异步化并记录耗时,避免启动阶段同时初始化广告、统计、支付、推送和分享。
iOS 关注点
- iOS 崩溃排查依赖 dSYM / cSYM / 符号化流程,上传失败会导致堆栈不可读。
- UnityFramework.framework 链接问题可能与 Unity 版本、Xcode 设置、插件集成方式有关。
- 动态字体纹理、CJK 字体、TextMeshPro fallback 在 iOS/Mac 上要做专项测试。
- 原生 SDK 要检查 bitcode、最低系统版本、隐私清单、权限描述和 App Store 审核要求。
iOS 构建链风险
- Pod 版本升级应和 Unity 导出的 Xcode 工程脚本一起验证,避免本机可编译、CI 或打包机失败。
- Framework Search Paths、Other Linker Flags、静态库/动态库混用容易导致只在 Release 包暴露的问题。
- 权限描述、隐私清单、URL Scheme、Associated Domains、ATS 配置都应在提审前导出复核。
- dSYM/cSYM 上传要验证构建 UUID 是否匹配,不能只看上传命令是否成功。
第三方 SDK
- Firebase、Crashlytics、广告 SDK、ShareSDK、TopOn、AppLovin 等都可能引入 Gradle、Manifest、权限和 native library 冲突。
- SDK 初始化应避免阻塞主线程,必要时拆分到启动后异步流程。
- SDK 版本升级要记录兼容矩阵:Unity 版本、Gradle、AGP、Android SDK、iOS SDK、Xcode。
- 接入 SDK 后要新增最小复现工程或自动化冒烟测试,避免主工程里问题难以定位。
版本矩阵
- 每次平台升级至少记录:Unity 版本、Android SDK、AGP、Gradle、JDK、NDK、Xcode、Pods、三方 SDK 版本。
- 版本矩阵要区分开发环境、CI 环境、打包机环境和线上正式包,避免只在个人电脑验证成功。
- 对广告、支付、统计、分享、推送类 SDK 建立冒烟测试:初始化、登录态、权限、回调、前后台切换、弱网和隐私弹窗。
- 所有三方 SDK 的 Manifest、Info.plist、权限和隐私声明都要在提审前导出并人工复核。
排查流程
- 明确问题发生平台、系统版本、机型、Unity 版本和构建配置。
- 使用 Release/IL2CPP/目标 ABI 复现,不要只看 Editor 或 Development Build。
- 收集平台日志:Android
logcat、ANR trace、tombstone;iOS device log、crash log、symbolicated stack。 - 排除第三方 SDK:按二分法禁用插件、资源、初始化逻辑。
- 检查构建链:Gradle、AGP、NDK、Xcode、Pods、Manifest、Info.plist、Framework 链接。
- 修复后建立发布前 checklist,避免下次 SDK 或 Target API 升级再次踩坑。
发布检查清单
- Android 是否验证 16 KB Page Size 兼容。
- Target API / Compile SDK / AGP / Gradle 是否与 Unity 版本匹配。
- 所有 native so 是否覆盖目标 ABI。
- Crashlytics 符号文件是否上传并能正确符号化。
- ANR 是否有主线程堆栈和 SDK 初始化耗时记录。
- iOS dSYM 是否上传并能还原堆栈。
- Framework、Pods、权限描述和隐私清单是否符合当前商店要求。
- OpenURL、文件分享、相册、相机、通知等系统能力是否真机验证。
Android 构建与适配
- Unity - Scripting API: .AndroidJavaRunnable
- 浅谈Unity与Android原生的桥接
- android | 西瓜SDK
- Unity - Scripting API: AndroidJavaProxy
- 浅谈Unity与Android原生的桥接
- zhOrange/AndroidvsUnity: Android与unity通信Demo
- android - 通过android DLL的Unity android wifi套接字通信 - IT工具网
- unity桥接iOS和Android - 游戏编程 🕹️
- Unity Android Plugin开发指南 - 云+社区 - 腾讯云
- Unity2020 使用VideoPlayer播放视频Android平台播放失败问题 - 知乎
- Unity VideoPlayer使用url方式,Android平台下无法播放http链接的视频(黑屏、无反应、无报错、无log输出) - kingBook - 博客园
- api.unity.com
- c# - How to install Android apk from code in unity - Stack Overflow
- Unity 项目支持 Android 16 KB 的方案 - 技术专栏 - Unity官方开发者社区
- Android适配16 KB Page Size,看这一篇就够了! | 优测云真 - 技术专栏 - Unity官方开发者社区
IL2CPP 与 Mono
- Unity3d 中如何自定义编译宏 - 简书
- Unity Prefab中MonoBehaviour脚本修改带来的序列化问题_monobehaviour 序列化-CSDN博客
- Unity - Scripting API: MonoBehaviour
- Unity下的测试一:节省时间的小技巧——Unity关闭自动刷新编译功能,到需要的时候再手动刷新_unity 自动编译-CSDN博客
- 停止Unity在运行时脚本修改重新编译的情况 - 三页菌 - 博客园
- Unity编译报错Copying Assembly-CSharp.dll问题解决_unity copying assembly from-CSDN博客
- 如何从脚本停止自动编译 – Unity
- GameArki/UnityDirtyCompiler: 🛠 【UnityDirtyCompiler 脏脚本编译工具】修改脚本后,使用此工具进行编译,Unity只会编译脚本所在的程序集。编译速度大约能快8秒以上。
- unity il2cpp导出时生成符号表排查crash问题 | 邹成卓的个人网站
- Unity加速编译小技巧_unity 脚本即时编译-CSDN博客
- Unity il2cpp 编译流程分享 - 视频 - ByteTech
- Unity il2cpp 编译流程分享 (下) - 视频 - ByteTech
平台 SDK 接入
其他参考
- UWA学堂 | Unity和Unreal游戏引擎的从业者学习交流平台
- 搜索unreal - 蛮牛教育 - 国内最大的Unity在线学习平台|Unity培训|Unity3d培训|Unity视频学习|Unity教程 Unreal 虚幻 AR VR - Powered By EduSoho
- (21条消息) Unity宏定义判断运行平台和Application.platform_苦逼的程序员!!!的博客-CSDN博客_application.platform
- 泰课在线 — 志存高远,稳如泰山 - 国内专业的在线学习平台|Unity3d培训|Unity教程|Unity教程 Unreal 虚幻 AR|移动开发|美术CG - Powered By EduSoho
参考链接
以下链接作为本笔记的资料来源保留。