解决方案:将C/C++代码编译成so供C#代码调用。
SO生成工具:android studio,简称AS
一,so 生成方法:
1,菜单:File->New->New Project-> Native C++
2,编写C++导出函数
3,菜单:Build->Select Build Variants,选择构建类型 Debug或Release
4, 菜单:Build->Make Project,等待构建完成,打开Project视图,cmake下可以找到生成的各种 so
二,Unity中使用So
1,将生成的SO文件放入到UNITY的Plugins文件夹中,然后设置如下(每个so文件对应设置,arm64-v8a设置为ARM64,armeabi-v7a设置为ARMV7,X86设置为X86)
2,编写C#,调用SO
using System; using System.Runtime.InteropServices; using UnityEngine; using UnityEngine.UI; public class testdll : MonoBehaviour { [DllImport("libnative-lib", CharSet = CharSet.Ansi)] public static extern int ABAdd(int a, int b); void Start() { var goText = GameObject.Find("infotext").GetComponent<Text>(); goText.text = "准备调用 "; int ret = -1; try { ret = ABAdd(3, 4); } catch (Exception e) { goText.text += $"DLL调用出错, {e} "; } if(ret > 0) { goText.text += $"调用完成, ret:{ret} "; } } }
三,打包为APK,安装到手机上测试。
因为SO文件只能在安卓上使用,所以在编辑器下运行会报 System.DllNotFoundException异常。
同理,DLL文件在编辑器下可以被调用,在安卓上会报异常。