[英]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.