Unity2020打包android包后,运行Aliyun.OSS.dll失败[阿里云oss]

1.将Unity-Player-Other Settings设置
Api Compatibillity Level* = .NET 4.X

在编辑器上运行相关代码从阿里云桶中下载文件,正常没有任何问题

2.将项目打包出android运行之后,报错如下
2023-10-20 20:50:52.373 1553-2042/? I/WifiStateMachine: checkScoreBasedQuality – mPreviousScore[0]:92 mPreviousScore[1]:93 mPreviousScore[2]:94 s2Score:94mPrevoiusScoreAverage:93
2023-10-20 20:50:52.385 11799-11893/? E/Unity: NullReferenceException: Object reference not set to an instance of an object.
at Aliyun.OSS.Common.Communication.HttpExtensions.AddInternal (System.Net.WebHeaderCollection headers, System.String key, System.String value) [0x00000] in :0
at Aliyun.OSS.Common.Communication.HttpFactory.SetRequestHeaders (System.Net.HttpWebRequest webRequest, Aliyun.OSS.Common.Communication.ServiceRequest serviceRequest, Aliyun.OSS.Common.ClientConfiguration configuration) [0x00000] in :0
at Aliyun.OSS.Common.Communication.HttpFactory.CreateWebRequest (Aliyun.OSS.Common.Communication.ServiceRequest serviceRequest, Aliyun.OSS.Common.ClientConfiguration configuration) [0x00000] in :0
at Aliyun.OSS.Common.Communication.ServiceClientImpl.SendCore (Aliyun.OSS.Common.Communication.ServiceRequest serviceRequest, Aliyun.OSS.Common.Communication.ExecutionContext context) [0x00000] in :0
at
2023-10-20 20:50:52.386 657-14296/? D/qc_adm: ns 3524636 > expected_ns 3000000 (skipped 3)
2023-10-20 20:50:52.406 657-14296/? D/qc_adm: ns 3516251 > expected_ns 3000000 (skipped 3)
2023-10-20 20:50:52.414 657-14296/? D/qc_adm: ns 3500157 > expected_ns 3000000 (skipped 3)
2023-10-20 20:50:52.436 1030-1208/? D/DnsProxyListener: DNSDBG::dns addrinfo af 2

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
=====这是一个广告位,招租中,联系qq 78315851====
5 条回复 A 作者 M 管理员
  1. 原因:
    1.通过查看源码增加打印测试得知,在android环境中,Environment.OSVersion.Platform识别成了
    Environment.OSVersion.Platform=PlatformID.Unix;
    最后导致
    _isMonoPlatform = MonoPlatforms.Contains(Environment.OSVersion.Platform);
    _isMonoPlatform = true;
    后续的赋值导致_addInternalMethod = null;

    解决方案:
    1.注释HttpExtensions.MonoPlatforms变量中的PlatformID.Unix

    2.选中 aliyun-oss-sdk项目重新生成dll
    3.拷贝 D:unityWorkaliyun-oss-csharp-sdk-2.13.0sdkinDebugAliyun.OSS.dll覆盖到项目中
    4.出android包测试成功

  2. 根据您提供的错误信息,看起来您在运行 Unity2020 打包的 Android 包时,遇到了 NullReferenceException 错误。这个错误通常是因为您在运行时引用了一个未初始化的对象。从错误信息中,我们可以看到在 Aliyun.OSS.dll 中,有一个名为 HttpExtensions 的类,该类中的 AddInternal 方法在执行时出现了 NullReferenceException 错误。这可能是因为在运行时,该方法的某个参数未正确初始化。要解决这个问题,您需要检查 HttpExtensions 类中的 AddInternal 方法的参数,确保它们在运行时都已正确初始化。

  3. 这个问题可能是由于Aliyun.OSS.dll与Unity2020的兼容性问题导致的。你可以尝试以下方法解决这个问题:

    1. 确保你的项目使用的是.NET 4.X框架。在Unity编辑器中,选择File -> Build Settings,然后在Player Settings中将Api Compatibility Level设置为.NET 4.X。

    2. 清理并重新构建项目。在Unity编辑器中,选择File -> Clean Project,然后选择File -> Build Settings,最后点击Build按钮进行构建。

    3. 如果问题仍然存在,尝试将Aliyun.OSS.dll文件复制到Unity项目的Plugins文件夹中。确保该文件夹位于Assets文件夹内。

    4. 如果以上方法都无法解决问题,可以考虑使用其他支持.NET 4.X的阿里云SDK替代Aliyun.OSS.dll。

  4. 如果你在Unity2020中打包Android包后,运行Aliyun.OSS.dll时失败,可能有以下几种原因:

    1. DLL文件路径不正确:请确保你已经将Aliyun.OSS.dll文件正确地添加到你的项目中,并且它的路径是正确的。
    2. 缺少依赖项:Aliyun.OSS.dll可能依赖于其他的.NET Framework库,如果你没有安装这些库,可能会导致运行时错误。你可以尝试在Unity的“Player Settings”中检查并添加这些库。
    3. 环境变量问题:请确保你的Android设备的环境变量设置正确。你可以尝试在Unity的“Player Settings”中检查并添加这些环境变量。

    如果以上方法都无法解决问题,你可能需要查阅相关的文档或者寻求专业的技术支持。

  5. 根据您提供的错误信息,问题可能出在Aliyun.OSS.dll与Unity的兼容性上。请尝试以下解决方案:

    1. 确保您的项目使用的是正确的Aliyun.OSS.dll版本。您可以在阿里云官方文档中查找适用于您的项目的SDK版本。

    2. 检查您的项目是否使用了正确的API密钥和访问密钥。确保这些密钥与您在阿里云控制台中设置的一致。

    3. 检查您的项目是否使用了正确的区域设置。您可以在阿里云控制台中查看支持的区域列表,并根据您的需求选择合适的区域。

  6. Unity2020打包android包后,运行Aliyun.OSS.dll失败的可能原因有以下几种:

    • Aliyun.OSS.dll文件不兼容或缺少依赖。可以尝试官网载最新版本的SDK,并将Aliyun.OSS.dll文件放入Unity项目中。也可以检查是否安装了Newtonsoft.Json.dll和log4net.dll等依赖库。
    • Unity的Gradle模板配置不正确。需要在Unity的安装目录下,找到PlaybackEngines/AndroidPlayer/Tools/GradleTemplates/baseProjectTemplate.gradle文件,并修改其中的repositories部分,将google()和jcenter()替换为阿里云的源。