zoukankan      html  css  js  c++  java
  • 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代码

  • 相关阅读:
    调戏木马病毒的正确姿势——下
    调戏木马病毒的正确姿势——上
    可恢复的安全rm
    关于System.Convert那些事
    ORA-00600: internal error code, arguments: [kkqtSetOp.1]
    PL/SQL个人学习笔记
    苹果iOS手机后门的”诊断功能论“不攻自破
    畅谈HTML开发
    Triangle
    Java中的equals()和hashCode()
  • 原文地址:https://www.cnblogs.com/penguin-panda/p/3273680.html
Copyright © 2011-2022 走看看