【问题标题】:How to prevent code stripping with IL2CPP?如何防止使用 IL2CPP 进行代码剥离?
【发布时间】:2020-03-20 15:15:42
【问题描述】:

我们正在制作我们的第一个小型 Unity Android 游戏。应用程序连接到我们的 Socket.IO 服务器并发送/接收一些数据。在开发过程中一切正常。我们通过 USB 连接设备,在设备上使用 Unity Remote 5,应用程序连接到服务器,一切都很好。

然后我们从 Unity 构建签名的 APK。我们将APK安装到同一设备,应用程序启动没有问题,但socket.io通信不起作用。在服务器端,我可以看到初始连接请求(成功),但是应用程序不会连接到指定的命名空间,也不会发送加载数据的请求。

我们是否犯了一些明显的错误?我们是否必须指定其他内容来构建有效的 APK?我们只是添加密钥库来签名发布。似乎在发布 APK 中启用了网络通信,因为我们看到了一些请求。我们是 Unity 初学者,感谢任何帮助。

我们使用 Unity 2019.1.11f1。我们使用这个 socket.io 客户端库:https://github.com/doghappy/socket.io-client-csharp

我们尝试过其他库:https://github.com/Quobject/SocketIoClientDotNet,但遇到了同样的问题。在开发期间有效,在发布 APK 中无效。我们还尝试了 2 种不同的 Socket.IO 服务器实现,两者(Flask 和 go-socket.io)表现相同。

编辑:我们进行了更多测试并发现,使用 Mono 时,一切正常。但是当我们切换到 IL2CPP 时,APK 坏了。 由于 Play 商店(需要 64 位),我们必须使用 IL2CPP。我们当前的理论是过于激进的代码剥离,即删除了代码的某些重要部分。

那么,问题应该是,如何防止使用 IL2CPP 进行代码剥离?

【问题讨论】:

标签: android unity3d socket.io apk


【解决方案1】:

不确定它是否真的与您的问题有关,但代码剥离在引擎中有适当的设置:

https://docs.unity3d.com/Manual/ManagedCodeStripping.html

【讨论】:

  • 这似乎是正确的方法,但我们无法确定究竟是哪个类/文件/程序集被剥离。所以我们废弃了 Unity 项目,并在没有 3d 支持的情况下在原生 Android 中重写了整个应用程序。无论如何感谢您的建议。
  • @Kubik 据我所知,如果启用了统一中的代码剥离,那么 Unity 会从所有 DLL 中剥离所有未使用的内容(包括外部的、它自己的引擎内部的、所有内容) ,我认为这是在功能层面上的。很遗憾听到您因为这个问题而放弃了 Unity,但很高兴听到您以某种方式解决了这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-30
  • 1970-01-01
相关资源
最近更新 更多