You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity编辑器运行正常,打包Android后触发MissingMethodException报错

解决Unity Addressables导出Android后抛出MissingMethodException的问题

你遇到的这个问题很典型:Unity项目在编辑器里运行一切正常,但导出Android后就报错,根源是IL2CPP代码裁剪机制移除了Addressables运行时反射需要的默认无参构造函数——编辑器用的Mono不会做这么激进的代码裁剪,所以不会触发这个问题。

错误核心定位

从你贴的日志能看到关键报错:

MissingMethodException: Default constructor not found for type UnityEngine.ResourceManagement.AsyncOperations.ProviderOperation`1[[UnityEngine.AddressableAssets.Initialization.ResourceManagerRuntimeData, Unity.Addressables, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]

以及后续针对CompletedOperation的同类报错,这说明IL2CPP编译时把Addressables内部泛型操作类的默认构造函数给删了,而ResourceManager运行时需要通过反射创建这些实例,自然就抛异常了。

可行解决方案

1. 临时调整代码裁剪级别(快速验证)

  • 打开Player Settings(路径:Edit > Project Settings > Player)
  • 切换到Android平台,找到Optimization板块下的Code Stripping选项
  • 把级别从High改成Medium/Low,甚至暂时设为Disabled来验证是否解决问题
  • 注意:这个方法会增大APK体积,适合快速排查,不建议作为最终解决方案

2. 添加链接器配置文件(推荐,不影响体积)

在项目的Assets目录下新建一个名为linker.xml的文件,写入以下内容,告诉IL2CPP不要裁剪指定类型的构造函数:

<linker>
  <!-- 保留ResourceManager相关泛型操作类的所有成员 -->
  <assembly fullname="Unity.ResourceManager">
    <type fullname="UnityEngine.ResourceManagement.AsyncOperations.ProviderOperation`1" preserve="all"/>
    <type fullname="UnityEngine.ResourceManagement.ResourceManager+CompletedOperation`1" preserve="all"/>
  </assembly>
  <!-- 保留Addressables初始化数据类 -->
  <assembly fullname="Unity.Addressables">
    <type fullname="UnityEngine.AddressableAssets.Initialization.ResourceManagerRuntimeData" preserve="all"/>
  </assembly>
  <!-- 如果自定义类ThemeData也被裁剪,添加下面这段 -->
  <assembly fullname="Assembly-CSharp">
    <type fullname="ThemeData" preserve="all"/>
  </assembly>
</linker>

这个配置会精准告诉编译器保留必要的成员,不会额外增大APK体积。

3. 更新Addressables到兼容版本

部分旧版本的Addressables存在IL2CPP编译的已知bug,你可以在Package Manager中找到Addressables,选择更新到对应Unity版本的最新稳定版,很多时候这类问题会被官方修复。

4. 重新构建Addressables内容

有时候是Addressables的构建缓存导致的问题:

  • 打开Addressables Groups窗口(路径:Window > Asset Management > Addressables > Groups)
  • 点击Build > New Build > Default Build Script重新构建Addressables资源
  • 清理旧的Android构建缓存后,再重新执行Build and Run

验证流程

  1. 应用解决方案后,先清理项目构建缓存(File > Build Settings > Clean Build)
  2. 重新执行Android Build and Run,观察终端是否还会抛出MissingMethodException
  3. 确认问题解决后,再根据项目需求优化代码裁剪级别或链接器配置

内容的提问来源于stack exchange,提问作者Stel K9

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 17:57:46