gpt4 book ai didi

java - 从 Unity 脚本调用 Android NDK 函数

转载 作者:搜寻专家 更新时间:2023-11-01 08:11:30 24 4
gpt4 key购买 nike

所以我正在创建一个使用 Unity 的 Android 应用程序......我从 Unity 获得了一些 assetbundle,但在 Unity 启动之前我不知道 url。因此,Unity 需要在 Native (Android) 端调用一个函数来获取 url。

我有一段时间不知道如何做到这一点(恕我直言,Unity 文档非常糟糕)。我决定使用 NDK 来帮助我。如果没有 Unity,我的库文件的所有内容都可以正常运行...现在的问题是在 Unity 中调用这些 C 函数。

这是我的库:​​

    #include <jni.h>  
#include <string.h>
#include <android/log.h>

#define DEBUG_TAG "NDK_blahy"

extern "C" {
jstring Java_com_blah_blah_getURL(JNIEnv * env, jobject this);
void Java_com_blah_blah_setURL(JNIEnv * env, jobject this, jstring URL);
}

jstring url;

void Java_com_blah_blah_setURL(JNIEnv * env, jobject this, jstring URL)
{
url = URL;

jboolean isCopy;
const char * szLogThis = (*env)->GetStringUTFChars(env, URL, &isCopy);

__android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG, "NDK:LC: [%s]", szLogThis);

(*env)->ReleaseStringUTFChars(env, URL, szLogThis);
}

jstring Java_com_lyfelotto_blah_blah_getURL(JNIEnv * env, jobject this)
{
return url;
}

我的统一代码很好地加载了库(使用 [DllImport ("libname")])。

现在,如果我像这样“正确”加载函数 private static extern jstring Java_com_lyfelotto_blah_blah_getURL(JNIEnv * env, jobject this) 不好的事情发生了

我是不是走错了路? (就像我说的,我需要做的就是得到一个字符串)。有什么想法吗?

最佳答案

我建议放弃 NDK。使用 Android java 插件。

在 YourPlugin.cs 中:

using UnityEngine;
using System.Collections;
using System.IO;

#if UNITY_ANDROID
public class UnityUrlPlugin {

// Logs the user out and invalidates the token
public static string getUrl() {
if( Application.platform != RuntimePlatform.Android )
return;

var pluginClass = new AndroidJavaClass("com.you.UnityUrlPlugin") ;
AndroidJavaObject plugin = pluginClass.CallStatic<AndroidJavaObject>("instance");
return plugin.Call<string>("getURL");
}
}
#endif

然后,在 UnityUrlPlugin.java 中:

package com.you;

import android.content.ContentValues;
import android.content.Intent;
import android.os.Environment;

public class UnityUrlPlugin {

private static UnityUrlPlugin m_instance;

public static UnityUrlPlugin instance() {
if(m_instance == null)
m_instance = new UnityUrlPlugin();
return m_instance;
}

private UnityUrlPlugin(){
}

public String getURL() {
return "http://blah.com";
}
}

并将 UnityUrlPlugin.jar 放入 Assets/Plugins/Android 文件夹。

不需要 NDK!

关于java - 从 Unity 脚本调用 Android NDK 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9121781/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com