Unity升级到2022.3.xx后导出的gradle工程编译出的Android包内缺少“libil2cpp.so“

        先说点废话:最近将Unity从一个老版本升级到Unity2022.3.xx时遇到了下面的问题,本想着这个应该是一个非常常见的问题,其他先行者们在升级过程中肯定也遇到了该问题,网上应该有其他大佬分享的现成的解决方案。但是通过本人在百度上的一通查找,并没有发现完整的、完美的解决方案分享,本着技术分享可以给他人排忧解难的想法,于是就有了这样一篇文章。

        我觉本次分享一定能够使其他的后来者在此问题上少受磨难!

        承蒙不弃,如果觉得有用请点赞收藏。

1、问题现象:将Unity从2018.3.xx升级到2022.3.xx后导出的gradle工程编译出的Android包启动闪退或者启动卡死。

2、将手机通过工具提取到现场关键日志如下:

jni_internal.cc:825] JNI FatalError called: Unable to load library: /data/app/~~[android应用路径]==/lib/arm64/libil2cpp.so [dlopen failed: library "libil2cpp.so" not found]

3、通过上面的日志可以分析出该包内缺少"libil2cpp.so",于是返回到从Unity导出的gradle工程中,不难发现,在其文件夹中多了一个名称为:Il2CppOutProject的文件夹,详细如下图所示:

4、通过研究发现Unity在2020版本之后,其通过Export Project的gradle工程没有IL2CPP.SO这个库,但是却把这个库的源码工程给出来了。有人说这样方便加密处理,该问题在此按下不表。

5、我最初的想法是,Unity的新版本一定是多了某些设置,于是我翻查Unity官网资料,我将Unity的各种设置面板全部打开查看,包括Project Settings下面的Player的各种设置面板。最终我都无功而返,甚至一度怀疑是Unity的版本有bug。在网上也看到有人说新版本的il2cpp.so需要手动编译处理的说法。

6、后来突然惊奇的发现,使用Unity2022.3.xx版本创建一个空工程,然后导出的gradle工程打出来的Android包中竟然包含il2cpp.so,这一发现直接的证明了该Unity版本是没有bug的,也变相的推翻了网上部分人说的il2cpp.so需要手动编译的说法。(当今社会能自动化谁还手动)

7、继续研究、对比发现最新生成的gradle工程中的unitylibrary/build.gradle文件中与编译完成闪退的gradle工程中的文件存在差异,当下推断该部分的差异就是是否能够生成il2cpp.so的关键。文件结构如下图所示:

8、立即将空工程中导出的unitylibrary/build.gradle文件多余部分内容拷贝到自己项目工程导出的相同文件末尾处,重新编译后安装启动游戏后,完美运行。多余部分的文件内容如下截图:

9、至此,有的人认为该问题已经圆满解决,本篇文章也应该就此结束了!是的,按照快速解决问题的想法应该是已经解决了,只需要写个脚本,每次导出gradle工程之后在unitylibrary/build.gradle文件的末尾处添加上图的文本内容即可。

        但是我觉得这不应该解决问题的态度,这也不应该是Unity处理问题的思路,我一定还遗漏了什么重要内容。于是我继续寻找答案……

10、终于,在一些网络帖子的启发下,我成功的找到了它。

        因为我导出的是gradle工程,所以我坚信它一定与其相关的设置或者配置有关系。于是我找到了Android平台下的设置面板下的它,如下图所示:

11、于是我将空工程下的mainTemp.gradle文件和我的项目工程下的mainTemp.gradle文件进行了对比,最终在文件的末尾处发现了可疑目标,如下图:

12、于是我在空工程中将上图中红框中的内容删除后导出的gradle工程,然后编译处Android手机包,这时候发现包内没有了il2cpp.so。我再将上图中红框中的内容添加到我的项目工程中,重新导出gradle工程,然后编译成Android手机包后完美运行。

        至此,就像大家看到的一样,针对该问题已经拥有了一个完整且完美的解决方案。

                         承蒙不弃,如果觉得有用请点赞收藏。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值