focus-creative-games / hybridclr_unity

Unity package for HybridCLR
https://code-philosophy.com/
MIT License
753 stars 131 forks source link

Unity 2022.3.17.f1c1 + hybridclr_unity 5.0 使用UniTask会闪退。 #45

Closed JianWangDragonPlus closed 9 months ago

JianWangDragonPlus commented 9 months ago

Unity版本: 2022.3.17.f1.c1

hybridclr_unity 版本: 5.0

只要在热更代码里面调用UniTask 函数函数就会闪退

例如下面的这个非常简单的代码:

public async UniTask UniTaskTest()
{
       await Task.Delay(1000);
       Debug.LogError("UnitTask");
}

之前使用的hybirdclr版本是3.4.2, unity 版本是2022.3.7.f1c1 是没有问题, 升级unity到3.17f1c1之后,使用原来的hybirdclr版本(3.4.2)会出编译错误的问题,就将hybirdclr升级到了最新版本, 打包出来之后,游戏走到热更代码中unitask相关代码的时候就会闪退了,在IOS和Android上都会发生, 我创建了一个复现工程使用下面的代码作为热更代码

using System.Threading.Tasks;
using Cysharp.Threading.Tasks;
using UnityEngine;

public class GameApp 
{

    private static GameApp _instance;

    public static GameApp Instance
    {
        get
        {
            if (null == _instance)
            {
                _instance = new GameApp();
            }

            return _instance;
        }
    }

    //UniTask测试代码,执行到这里必定崩溃
    public async UniTask UniTaskTest()
    {
        await Task.Delay(1000);
        Debug.LogError("UnitTask");
    }

    //游戏热更代码入口

    public static void Entrance(object[] objects)
    {
        Debug.Log("Enter Entrance");

        Debug.Log("Start UniTaskTest");
        Instance.UniTaskTest().Forget();
    }
}

复现问题的工程

  1. 下载链接中的文件,使用unity2022.3.17 android平台打开;
  2. 打开hybirdclr install 安装hybirdclr 5.0
  3. 点击build ANDROID,打包apk,打包完成之后在工程目录下 AndroidExport中生成Trial_Issue.Apk了,
  4. 安装Trial_Issue.Apk 运行,运行过程中有显示LOG,执行Task函数是没有问题的,执行到Unitask就会闪退
pirunxi commented 9 months ago

未能在Android armv8真机上复现问题。

JianWangDragonPlus commented 9 months ago

终于找到原因了,可以关掉了!从3.4.2升上来的新版本的StripAOTDllCommand 会新加了从EditorUserBuildSettings上读取 development状态,之前的没有的。项目设置里面默认没有勾选development,导致打出的热更新DLL 是Release的,后面项目buildplayer是根据传的参数设置的BuildOptions,前后不一致了