Unity調用Android代碼java
方法一:spa
//using讓 Local Ref 回收 using(AndroidJavaClass javaClazz = new AndroidJavaClass("com.ddianle.Bitmap")) { int res = javaClazz.CallStatic<int>("DrawText", 'a');//調用靜態方法 }
public static int DrawText(char c) { return 1; }
Unity調用Java方法時,參數或者返回值最好是Byte或者Byte[]。
此方法的缺點是在Android平臺容易形成Local Ref > 512的溢出Bug。(由於本身沒法手動刪除Local Ref)code
方法二:對象
public static byte[] DrawText(String str, byte[] b) { return null; }
IntPtr clazzPtr = AndroidJNI.FindClass("com/ddianle/Bitmap"); IntPtr methodPtr = AndroidJNI.GetStaticMethodID(clazzPtr, "DrawText", "(Ljava.lang.String;[B)[B"); //Two param IntPtr v1 = AndroidJNI.NewStringUTF("abc"); jvalue j1 = new jvalue(); j1.l = v1; IntPtr v2 = AndroidJNI.ToByteArray(Encoding.Default.GetBytes("abc")); jvalue j2 = new jvalue(); j1.l = v2; IntPtr resPtr = AndroidJNI.CallStaticObjectMethod(clazzPtr, methodPtr, new jvalue[]{j1, j2 });//調用 byte[] b = AndroidJNI.FromByteArray(resPtr); //... //刪除Local Ref。methodPtr不須要手動刪除,由於它不是一個jobject對象。
AndroidJNI.DeleteLocalRef(clazzPtr); AndroidJNI.DeleteLocalRef(v1); AndroidJNI.DeleteLocalRef(v2); AndroidJNI.DeleteLocalRef(resPtr);
該方法能夠手動的刪除Local Ref,不過代碼比較繁瑣.blog
Android調用Unity代碼it