簡體   English   中英

適用於Android的Unity Native C ++插件

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

我將此腳本附加到一個空的游戲對象上:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM