[英]Unity Native C++ Plug-in for Android
我正在制作一个用C ++编写的Android原生插件,并打包在Unity Game Engine的共享库中。 但是,我什至得到了EntryPointNotFoundException甚至Android Studio生成的默认native-lib.cpp。
#include <jni.h>
#include <string>
extern "C" JNIEXPORT jstring JNICALL Java_com_example_willgauthier_stublibrary_MainActivity_stringFromJNI(
JNIEnv *env,
jobject /* this */) {
std::string hello = "Hello from C++";
return env->NewStringUTF(hello.c_str());
}
在Android Studio中,我构建了项目。 然后在Unity中,我制作了文件夹结构Assets / Plugins / Android / libs并复制到共享的libnative-lib.so库armeabi-v7a和x86上 。
我将此脚本附加到一个空的游戏对象上:
using System;
using System.Runtime.InteropServices;
using UnityEngine;
using UnityEngine.UI;
public class LibLoadTest : MonoBehaviour
{
public Text debugText;
[DllImport("native-lib")]
private static extern string stringFromJNI();
private void Start()
{
try
{
debugText.text = stringFromJNI();
}
catch(Exception exception)
{
debugText.text = exception.ToString();
}
}
}
我的debugText显示“ System.EntryPointNotFoundException :(从包装器托管到本地)LibLoadTest :: stringFromJNI()在0处LibLoadTest.Start()[0x00000]处的stringFromJNI”,而不是“从C ++发出的Hello”。
有谁知道如何在Unity中成功使用Android的本机插件共享库以及我的处理过程出了什么问题? 谢谢。
我在Unity Answers论坛上通过Bonfire-Boy找出了问题所在:我应该尝试导入的函数的名称是Java_com_example_willgauthier_stublibrary_MainActivity_stringFromJNI ,而不仅仅是stringFromJNI 。 我错误地认为,由于长名称是自动生成的,并且包含了包(不确定这是正确的术语)结构,因此可以忽略它。 不过,删除库函数定义中stringFromJNI之前的所有内容都可以。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.