微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Unity il2cpp方式打包问题记录,Unable to detect NDK version,il2cpp.exe已停止工作

一、前言

海,大家好,我是新发。
Unity项目需要上架google应用商店。而google要求上架的app必须支持64架构
如下:

在这里插入图片描述

详见此页:https://developer.android.com/distribute/best-practices/develop/64-bit

因为项目用的Unity版本是5.x,不能打出支持arm64架构的包,

于是,升级Unity版本到2017.4.29f1支持arm64架构了,不过必须使用il2cpp

注:为什么不直接升级Unity 20192020呢?因为版本跨越越大,要处理的兼容问题越多,即使是5.x版本升2017版本,也耗了我好些时间来处理兼容问题。

使用il2cpp方式打包过程中遇到一点小问题,记录一下。

二、NDK环境配置

1、下载NDK

使用il2cpp模式打包,需要用到NDK,所以我们需要先下载NDK,点这里下载:
https://developer.android.google.cn/ndk/downloads/
比如我下载的是r13b版本的Windows 64位版本

在这里插入图片描述

注:不同版本的Unity有对应的NDK版本,Unity 2017.4.29f1版本只能使用13b版本的NDK,如果配置了不对应的NDK版本,设置时会报错:Invalid NDK version:IL2CPP requires r13b (64-bit) (13.1.3345770).

NDK解压后如下:

在这里插入图片描述

2、Unity NDK配置

Unity中点击菜单Edit / Preferences...,点击External Tools,然后设置NDK的路径,例:
I:\android-ndk-r13b-windows-x86_64\android-ndk-r13b

3、NDK环境变量配置

虽然Unity中设置了NDK路径,但如果你没有配置环境变量,打包的时候会提示

Invalid NDK version
Unable to detect NDK version,please pick a different folder.

我们需要把NDK路径配置到环境变量中,例:
I:\android-ndk-r13b-windows-x86_64\android-ndk-r13b;

三、il2cpp打包

il2cpp打包过程中弹出了il2cpp.exe已停止工作的提示框,通过日志发现是有一部分如下的代码

[DllImport("__Internal")]
private extern static void Login();

这是iOS SDK方法,因为没有使用#if UNITY_IOS #endif包起来,所以在转il2cpp的时候失败了。
解决办法就是使用#if UNITY_IOS #endif包起来。

四、补充

1 在Unity2017中,不建议勾选Strip Engine Code,否则可能转il2cpp会失败。
2 使用il2cpp需要预留足够的磁盘空间,否则会打包失败,因为il2cpp会比mono方式生成更多的临时文件,比mono模式至少预留多5G空间才行。
3 有些插件il2cpp模式下会傻掉,比如HOTween插件,里面使用了System.Reflection.Emit,执行Hotween会报错:

Unsupported internal call for IL2CPP:AssemblyBuilder::basic_init - System.Reflection.Emit is not supported.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐