我正在用Unity制作Android应用程序,我从Unity得到了一些资源包,但是Unity启动之前我不知道URL。因此,Unity需要调用本机(Android)的功能来获得URL。
我不知道应该怎么做(依我看来Unity文档很坑爹)。我决定用NDK来解决这一问题,不用Unity就能解决library里的文件。现在问题是怎样在Unity里调用这些C函数。
这是我的lib:
#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;
}
Unity代码加载library没问题(使用[DllImport ("libname")])。
现在,如果我“正确的”加载这个功能,就像private static extern jstring Java_com_lyfelotto_blah_blah_getURL(JNIEnv * env, jobject this),不好的事情就会发生。
是不是我做错了什么?(就像我说的,我所要做的是得到一个字符串)。有没有解决办法?
来自@peterept 的答案:
我建议放弃NDK,使用Android的JAVA插件。
YourPlugin.cs:
然后,UnityUrlPlugin.java:
把UnityUrlPlugin.放到Assets/Plugins/Android 文件夹。
不需要 NDK!
来自@Yuri Visser 的回答:
你可以在调用时发送动态URL来获得URL。像这样做:
然后java 看起来是这个样子的: