Unity_與android交互


Unity調用Android代碼

方法一:

//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)

 

方法二:

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,不過代碼比較繁瑣.

 Android調用Unity代碼

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM