文章目录 一、前言二、NDK环境配置1、下载NDK2、Unity NDK配置3、NDK环境变量配置 三、il2cpp打包四、补充
一、前言
海,大家好,我是新发。
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 2019或2020呢?因为版本跨越越大,要处理的兼容问题越多,即使是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解压后如下:
在Unity中点击菜单Edit / Preferences...,点击External Tools,然后设置NDK的路径,例:
I:android-ndk-r13b-windows-x86_64android-ndk-r13b
虽然Unity中设置了NDK路径,但如果你没有配置环境变量,打包的时候会提示:
Invalid NDK versionUnable to detect NDK version, please pick a different folder.我们需要把NDK路径配置到环境变量中,例:
I:android-ndk-r13b-windows-x86_64android-ndk-r13b;
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会报错:
解决办法是删掉System.Reflection.Emit的相关调用。