从Unity Script调用Android NDKfunction
所以我正在创建一个使用Unity的Android应用程序……我从Unity获得了一些资产包,但我不知道Unity开始之前的url。 因此Unity需要调用Native(Android)端的函数来获取url。
我已经失去了一段时间如何做到这一点(Unity文档是非常可怕的imho)。 我决定用NDK来帮助我。 没有Unity,关于我的库文件的一切都可以解决……现在问题是在Unity中调用这些C函数。
这是我的lib:
#include #include #include #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("instance"); return plugin.Call("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!
您可能会在调用getURL时发送“动态”url。 做类似的事情:
return plugin.Call
然后你的java看起来像这样:
public String getURL(Object newUrl) { return newUrl.ToString(); }
- JNI – 如何使用具有不同字段的多个Jni包装器实例?
- UnsatisfiedLinkError:无法从加载程序加载X.
- 应用程序中的Android JNI DETECTED ERROR:JNI GetMethodID被调用挂起exception
- java.lang.UnsatisfiedLinkError:无法加载eposprint:findLibrary返回null
- 我应该从getFft中看到什么样的输出?
- 使用API21进行编译时出现UnsatisfiedLinkError
- 来自PayPal的交易详情使用Android中的Pay-key
- 如何在opencv for android中将ArrayList 从Java传递到本机端(NDK)
- 使用Android NDK构建Soundtouch