Unity 2018适配Google IAP v3删除GoogleAIDL.aar后空引用报错
Unity 2018.4 LTS删除GoogleAIDL.aar后编辑器抛空引用问题
我们使用的是Unity 2018.4.35f1 (LTS)版本和Unity IAP 2.2.2(已验证版本兼容)。由于Google宣布2021年8月2日推出新版计费系统,我们计划对其进行适配。
在添加官方文档中提供的Unity Purchasing包后,按照官方给出的UIAP冲突解决方案,需要删除GoogleAIDL.aar文件。但删除该文件后,Unity编辑器进程持续抛出空引用异常,相关报错截图见:
以及紧随其后的报错:
由于报错源自Unity编辑器内部程序集的文件,我无法定位具体问题,但恢复GoogleAIDL.aar文件后,空引用异常及前置报错均会消失。不过Google官方文档明确说明,保留该aar文件会导致UIAP与Google新版计费系统构建冲突,内购功能无法正常使用(其官方UI菜单中甚至提供了一键删除该文件的「修复」按钮)。
我已经核实BillingMode.json文件无异常且存放路径正确,通过搜索引擎也未找到相关解决方案,恳请有相关经验的开发者帮忙解答,谢谢。
解决方案
- 优先使用官方工具删除AIDL文件
不要手动删除GoogleAIDL.aar,先通过Package Manager完全移除Unity Purchasing包,删除Assets/Plugins/UnityPurchasing全目录后重启Unity,重新导入2.2.2版本IAP包,再走官方工具路径删除:顶部菜单Services > In-App Purchasing > Google Play Billing > Remove AIDL,工具删除时会同步更新内部依赖配置,手动删除会漏掉配置更新触发空引用。 - 添加编辑器环境编译补丁
如果用官方工具删除后仍报错,在Assets目录下新建Editor文件夹(不存在的话),新增如下脚本,强制编辑器模式跳过AIDL依赖检测:using UnityEditor; using UnityEngine.Purchasing; [InitializeOnLoad] public static class IAPEditorPatch { static IAPEditorPatch() { string originDefine = PlayerSettings.GetScriptingDefineSymbolsForGroup(BuildTargetGroup.Android); if (!originDefine.Contains("UNITY_PURCHASING_GPBILLING_NO_AIDL")) { PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.Android, originDefine + ";UNITY_PURCHASING_GPBILLING_NO_AIDL"); } } } - 验证依赖版本匹配
确认导入的Google Play Billing Library版本为3.x系列,Unity IAP 2.2.2最高仅适配到Billing Library 3.2.0,导入4.x及以上版本会触发依赖冲突。如果需要使用更高版本的计费库,直接将Unity IAP升级到2.3.0及以上版本,该版本已完全移除对GoogleAIDL.aar的依赖,不会出现删除后的空引用问题。 - 忽略编辑器非阻塞报错
部分Unity 2018 LTS的编辑器内部IAP检测逻辑存在已知bug,只要打Android测试包时无构建报错,安装到测试设备后可正常拉取商品列表、触发内购流程,即可忽略编辑器层面的警告类报错,不会影响实际运行效果。
内容的提问来源于stack exchange,提问作者Metaldream
相关产品推荐
相关产品推荐

