summaryrefslogtreecommitdiff
path: root/Runtime/Export/AndroidJNISafe.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Runtime/Export/AndroidJNISafe.cs')
-rw-r--r--Runtime/Export/AndroidJNISafe.cs514
1 files changed, 514 insertions, 0 deletions
diff --git a/Runtime/Export/AndroidJNISafe.cs b/Runtime/Export/AndroidJNISafe.cs
new file mode 100644
index 0000000..8883059
--- /dev/null
+++ b/Runtime/Export/AndroidJNISafe.cs
@@ -0,0 +1,514 @@
+#if UNITY_EDITOR || UNITY_ANDROID
+
+using System;
+
+namespace UnityEngine
+{
+internal class AndroidJNISafe
+{
+ public static void CheckException()
+ {
+ IntPtr jthrowable = AndroidJNI.ExceptionOccurred();
+ if (jthrowable != IntPtr.Zero)
+ {
+ AndroidJNI.ExceptionClear();
+ IntPtr jthrowableClass = AndroidJNI.FindClass("java/lang/Throwable");
+ try
+ {
+ IntPtr toStringMethodId = AndroidJNI.GetMethodID(jthrowableClass, "toString", "()Ljava/lang/String;");
+ throw new AndroidJavaException(AndroidJNI.CallStringMethod(jthrowable, toStringMethodId, new jvalue[]{}));
+ }
+ finally
+ {
+ AndroidJNISafe.DeleteLocalRef(jthrowable);
+ AndroidJNISafe.DeleteLocalRef(jthrowableClass);
+ }
+ }
+ }
+
+ public static void DeleteGlobalRef(IntPtr globalref)
+ {
+ if (globalref != IntPtr.Zero) AndroidJNI.DeleteGlobalRef(globalref);
+ }
+
+ public static void DeleteLocalRef(IntPtr localref)
+ {
+ if (localref != IntPtr.Zero) AndroidJNI.DeleteLocalRef(localref);
+ }
+
+ public static IntPtr NewStringUTF(string bytes)
+ {
+ try { return AndroidJNI.NewStringUTF(bytes); } finally { CheckException(); }
+ }
+
+ public static string GetStringUTFChars(IntPtr str)
+ {
+ try { return AndroidJNI.GetStringUTFChars(str); } finally { CheckException(); }
+ }
+
+ public static IntPtr GetObjectClass(IntPtr ptr)
+ {
+ try { return AndroidJNI.GetObjectClass(ptr); } finally { CheckException(); }
+ }
+
+ public static IntPtr GetStaticMethodID(IntPtr clazz, string name, string sig)
+ {
+ try { return AndroidJNI.GetStaticMethodID(clazz, name, sig); } finally { CheckException(); }
+ }
+
+ public static IntPtr GetMethodID(IntPtr obj, string name, string sig)
+ {
+ try { return AndroidJNI.GetMethodID(obj, name, sig); } finally { CheckException(); }
+ }
+
+ public static IntPtr GetFieldID(IntPtr clazz, string name, string sig)
+ {
+ try { return AndroidJNI.GetFieldID(clazz, name, sig); } finally { CheckException(); }
+ }
+
+ public static IntPtr GetStaticFieldID(IntPtr clazz, string name, string sig)
+ {
+ try { return AndroidJNI.GetStaticFieldID(clazz, name, sig); } finally { CheckException(); }
+ }
+
+ public static IntPtr FromReflectedMethod(IntPtr refMethod)
+ {
+ try { return AndroidJNI.FromReflectedMethod(refMethod); } finally { CheckException(); }
+ }
+
+ public static IntPtr FromReflectedField(IntPtr refField)
+ {
+ try { return AndroidJNI.FromReflectedField(refField); } finally { CheckException(); }
+ }
+
+ public static IntPtr FindClass(string name)
+ {
+ try { return AndroidJNI.FindClass(name); } finally { CheckException(); }
+ }
+
+ public static IntPtr NewObject(IntPtr clazz, IntPtr methodID, jvalue[] args)
+ {
+ try { return AndroidJNI.NewObject(clazz, methodID, args); } finally { CheckException(); }
+ }
+
+
+ public static void SetStaticObjectField(IntPtr clazz, IntPtr fieldID, IntPtr val)
+ {
+ try { AndroidJNI.SetStaticObjectField(clazz, fieldID, val); } finally { CheckException(); }
+ }
+
+ public static void SetStaticStringField(IntPtr clazz, IntPtr fieldID, string val)
+ {
+ try { AndroidJNI.SetStaticStringField(clazz, fieldID, val); } finally { CheckException(); }
+ }
+
+ public static void SetStaticCharField(IntPtr clazz, IntPtr fieldID, Char val)
+ {
+ try { AndroidJNI.SetStaticCharField(clazz, fieldID, val); } finally { CheckException(); }
+ }
+
+ public static void SetStaticDoubleField(IntPtr clazz, IntPtr fieldID, double val)
+ {
+ try { AndroidJNI.SetStaticDoubleField(clazz, fieldID, val); } finally { CheckException(); }
+ }
+
+ public static void SetStaticFloatField(IntPtr clazz, IntPtr fieldID, float val)
+ {
+ try { AndroidJNI.SetStaticFloatField(clazz, fieldID, val); } finally { CheckException(); }
+ }
+
+ public static void SetStaticLongField(IntPtr clazz, IntPtr fieldID, Int64 val)
+ {
+ try { AndroidJNI.SetStaticLongField(clazz, fieldID, val); } finally { CheckException(); }
+ }
+
+ public static void SetStaticShortField(IntPtr clazz, IntPtr fieldID, Int16 val)
+ {
+ try { AndroidJNI.SetStaticShortField(clazz, fieldID, val); } finally { CheckException(); }
+ }
+
+ public static void SetStaticByteField(IntPtr clazz, IntPtr fieldID, Byte val)
+ {
+ try { AndroidJNI.SetStaticByteField(clazz, fieldID, val); } finally { CheckException(); }
+ }
+
+ public static void SetStaticBooleanField(IntPtr clazz, IntPtr fieldID, bool val)
+ {
+ try { AndroidJNI.SetStaticBooleanField(clazz, fieldID, val); } finally { CheckException(); }
+ }
+
+ public static void SetStaticIntField(IntPtr clazz, IntPtr fieldID, Int32 val)
+ {
+ try { AndroidJNI.SetStaticIntField(clazz, fieldID, val); } finally { CheckException(); }
+ }
+
+
+ public static IntPtr GetStaticObjectField(IntPtr clazz, IntPtr fieldID)
+ {
+ try { return AndroidJNI.GetStaticObjectField(clazz, fieldID); } finally { CheckException(); }
+ }
+
+ public static string GetStaticStringField(IntPtr clazz, IntPtr fieldID)
+ {
+ try { return AndroidJNI.GetStaticStringField(clazz, fieldID); } finally { CheckException(); }
+ }
+
+ public static Char GetStaticCharField(IntPtr clazz, IntPtr fieldID)
+ {
+ try { return AndroidJNI.GetStaticCharField(clazz, fieldID); } finally { CheckException(); }
+ }
+
+ public static double GetStaticDoubleField(IntPtr clazz, IntPtr fieldID)
+ {
+ try { return AndroidJNI.GetStaticDoubleField(clazz, fieldID); } finally { CheckException(); }
+ }
+
+ public static float GetStaticFloatField(IntPtr clazz, IntPtr fieldID)
+ {
+ try { return AndroidJNI.GetStaticFloatField(clazz, fieldID); } finally { CheckException(); }
+ }
+
+ public static Int64 GetStaticLongField(IntPtr clazz, IntPtr fieldID)
+ {
+ try { return AndroidJNI.GetStaticLongField(clazz, fieldID); } finally { CheckException(); }
+ }
+
+ public static Int16 GetStaticShortField(IntPtr clazz, IntPtr fieldID)
+ {
+ try { return AndroidJNI.GetStaticShortField(clazz, fieldID); } finally { CheckException(); }
+ }
+
+ public static Byte GetStaticByteField(IntPtr clazz, IntPtr fieldID)
+ {
+ try { return AndroidJNI.GetStaticByteField(clazz, fieldID); } finally { CheckException(); }
+ }
+
+ public static bool GetStaticBooleanField(IntPtr clazz, IntPtr fieldID)
+ {
+ try { return AndroidJNI.GetStaticBooleanField(clazz, fieldID); } finally { CheckException(); }
+ }
+
+ public static Int32 GetStaticIntField(IntPtr clazz, IntPtr fieldID)
+ {
+ try { return AndroidJNI.GetStaticIntField(clazz, fieldID); } finally { CheckException(); }
+ }
+
+
+ public static void CallStaticVoidMethod(IntPtr clazz, IntPtr methodID, jvalue[] args)
+ {
+ try { AndroidJNI.CallStaticVoidMethod(clazz, methodID, args); } finally { CheckException(); }
+ }
+
+ public static IntPtr CallStaticObjectMethod(IntPtr clazz, IntPtr methodID, jvalue[] args)
+ {
+ try { return AndroidJNI.CallStaticObjectMethod(clazz, methodID, args); } finally { CheckException(); }
+ }
+
+ public static string CallStaticStringMethod(IntPtr clazz, IntPtr methodID, jvalue[] args)
+ {
+ try { return AndroidJNI.CallStaticStringMethod(clazz, methodID, args); } finally { CheckException(); }
+ }
+
+ public static Char CallStaticCharMethod(IntPtr clazz, IntPtr methodID, jvalue[] args)
+ {
+ try { return AndroidJNI.CallStaticCharMethod(clazz, methodID, args); } finally { CheckException(); }
+ }
+
+ public static double CallStaticDoubleMethod(IntPtr clazz, IntPtr methodID, jvalue[] args)
+ {
+ try { return AndroidJNI.CallStaticDoubleMethod(clazz, methodID, args); } finally { CheckException(); }
+ }
+
+ public static float CallStaticFloatMethod(IntPtr clazz, IntPtr methodID, jvalue[] args)
+ {
+ try { return AndroidJNI.CallStaticFloatMethod(clazz, methodID, args); } finally { CheckException(); }
+ }
+
+ public static Int64 CallStaticLongMethod(IntPtr clazz, IntPtr methodID, jvalue[] args)
+ {
+ try { return AndroidJNI.CallStaticLongMethod(clazz, methodID, args); } finally { CheckException(); }
+ }
+
+ public static Int16 CallStaticShortMethod(IntPtr clazz, IntPtr methodID, jvalue[] args)
+ {
+ try { return AndroidJNI.CallStaticShortMethod(clazz, methodID, args); } finally { CheckException(); }
+ }
+
+ public static Byte CallStaticByteMethod(IntPtr clazz, IntPtr methodID, jvalue[] args)
+ {
+ try { return AndroidJNI.CallStaticByteMethod(clazz, methodID, args); } finally { CheckException(); }
+ }
+
+ public static bool CallStaticBooleanMethod(IntPtr clazz, IntPtr methodID, jvalue[] args)
+ {
+ try { return AndroidJNI.CallStaticBooleanMethod(clazz, methodID, args); } finally { CheckException(); }
+ }
+
+ public static Int32 CallStaticIntMethod(IntPtr clazz, IntPtr methodID, jvalue[] args)
+ {
+ try { return AndroidJNI.CallStaticIntMethod(clazz, methodID, args); } finally { CheckException(); }
+ }
+
+
+ public static void SetObjectField(IntPtr obj, IntPtr fieldID, IntPtr val)
+ {
+ try { AndroidJNI.SetObjectField(obj, fieldID, val); } finally { CheckException(); }
+ }
+
+ public static void SetStringField(IntPtr obj, IntPtr fieldID, string val)
+ {
+ try { AndroidJNI.SetStringField(obj, fieldID, val); } finally { CheckException(); }
+ }
+
+ public static void SetCharField(IntPtr obj, IntPtr fieldID, Char val)
+ {
+ try { AndroidJNI.SetCharField(obj, fieldID, val); } finally { CheckException(); }
+ }
+
+ public static void SetDoubleField(IntPtr obj, IntPtr fieldID, double val)
+ {
+ try { AndroidJNI.SetDoubleField(obj, fieldID, val); } finally { CheckException(); }
+ }
+
+ public static void SetFloatField(IntPtr obj, IntPtr fieldID, float val)
+ {
+ try { AndroidJNI.SetFloatField(obj, fieldID, val); } finally { CheckException(); }
+ }
+
+ public static void SetLongField(IntPtr obj, IntPtr fieldID, Int64 val)
+ {
+ try { AndroidJNI.SetLongField(obj, fieldID, val); } finally { CheckException(); }
+ }
+
+ public static void SetShortField(IntPtr obj, IntPtr fieldID, Int16 val)
+ {
+ try { AndroidJNI.SetShortField(obj, fieldID, val); } finally { CheckException(); }
+ }
+
+ public static void SetByteField(IntPtr obj, IntPtr fieldID, Byte val)
+ {
+ try { AndroidJNI.SetByteField(obj, fieldID, val); } finally { CheckException(); }
+ }
+
+ public static void SetBooleanField(IntPtr obj, IntPtr fieldID, bool val)
+ {
+ try { AndroidJNI.SetBooleanField(obj, fieldID, val); } finally { CheckException(); }
+ }
+
+ public static void SetIntField(IntPtr obj, IntPtr fieldID, Int32 val)
+ {
+ try { AndroidJNI.SetIntField(obj, fieldID, val); } finally { CheckException(); }
+ }
+
+
+ public static IntPtr GetObjectField(IntPtr obj, IntPtr fieldID)
+ {
+ try { return AndroidJNI.GetObjectField(obj, fieldID); } finally { CheckException(); }
+ }
+
+ public static string GetStringField(IntPtr obj, IntPtr fieldID)
+ {
+ try { return AndroidJNI.GetStringField(obj, fieldID); } finally { CheckException(); }
+ }
+
+ public static Char GetCharField(IntPtr obj, IntPtr fieldID)
+ {
+ try { return AndroidJNI.GetCharField(obj, fieldID); } finally { CheckException(); }
+ }
+
+ public static double GetDoubleField(IntPtr obj, IntPtr fieldID)
+ {
+ try { return AndroidJNI.GetDoubleField(obj, fieldID); } finally { CheckException(); }
+ }
+
+ public static float GetFloatField(IntPtr obj, IntPtr fieldID)
+ {
+ try { return AndroidJNI.GetFloatField(obj, fieldID); } finally { CheckException(); }
+ }
+
+ public static Int64 GetLongField(IntPtr obj, IntPtr fieldID)
+ {
+ try { return AndroidJNI.GetLongField(obj, fieldID); } finally { CheckException(); }
+ }
+
+ public static Int16 GetShortField(IntPtr obj, IntPtr fieldID)
+ {
+ try { return AndroidJNI.GetShortField(obj, fieldID); } finally { CheckException(); }
+ }
+
+ public static Byte GetByteField(IntPtr obj, IntPtr fieldID)
+ {
+ try { return AndroidJNI.GetByteField(obj, fieldID); } finally { CheckException(); }
+ }
+
+ public static bool GetBooleanField(IntPtr obj, IntPtr fieldID)
+ {
+ try { return AndroidJNI.GetBooleanField(obj, fieldID); } finally { CheckException(); }
+ }
+
+ public static Int32 GetIntField(IntPtr obj, IntPtr fieldID)
+ {
+ try { return AndroidJNI.GetIntField(obj, fieldID); } finally { CheckException(); }
+ }
+
+
+ public static void CallVoidMethod(IntPtr obj, IntPtr methodID, jvalue[] args)
+ {
+ try { AndroidJNI.CallVoidMethod(obj, methodID, args); } finally { CheckException(); }
+ }
+
+ public static IntPtr CallObjectMethod(IntPtr obj, IntPtr methodID, jvalue[] args)
+ {
+ try { return AndroidJNI.CallObjectMethod(obj, methodID, args); } finally { CheckException(); }
+ }
+
+ public static string CallStringMethod(IntPtr obj, IntPtr methodID, jvalue[] args)
+ {
+ try { return AndroidJNI.CallStringMethod(obj, methodID, args); } finally { CheckException(); }
+ }
+
+ public static Char CallCharMethod(IntPtr obj, IntPtr methodID, jvalue[] args)
+ {
+ try { return AndroidJNI.CallCharMethod(obj, methodID, args); } finally { CheckException(); }
+ }
+
+ public static double CallDoubleMethod(IntPtr obj, IntPtr methodID, jvalue[] args)
+ {
+ try { return AndroidJNI.CallDoubleMethod(obj, methodID, args); } finally { CheckException(); }
+ }
+
+ public static float CallFloatMethod(IntPtr obj, IntPtr methodID, jvalue[] args)
+ {
+ try { return AndroidJNI.CallFloatMethod(obj, methodID, args); } finally { CheckException(); }
+ }
+
+ public static Int64 CallLongMethod(IntPtr obj, IntPtr methodID, jvalue[] args)
+ {
+ try { return AndroidJNI.CallLongMethod(obj, methodID, args); } finally { CheckException(); }
+ }
+
+ public static Int16 CallShortMethod(IntPtr obj, IntPtr methodID, jvalue[] args)
+ {
+ try { return AndroidJNI.CallShortMethod(obj, methodID, args); } finally { CheckException(); }
+ }
+
+ public static Byte CallByteMethod(IntPtr obj, IntPtr methodID, jvalue[] args)
+ {
+ try { return AndroidJNI.CallByteMethod(obj, methodID, args); } finally { CheckException(); }
+ }
+
+ public static bool CallBooleanMethod(IntPtr obj, IntPtr methodID, jvalue[] args)
+ {
+ try { return AndroidJNI.CallBooleanMethod(obj, methodID, args); } finally { CheckException(); }
+ }
+
+ public static Int32 CallIntMethod(IntPtr obj, IntPtr methodID, jvalue[] args)
+ {
+ try { return AndroidJNI.CallIntMethod(obj, methodID, args); } finally { CheckException(); }
+ }
+
+
+ public static IntPtr[] FromObjectArray(IntPtr array)
+ {
+ try { return AndroidJNI.FromObjectArray(array); } finally { CheckException(); }
+ }
+
+ public static Char[] FromCharArray(IntPtr array)
+ {
+ try { return AndroidJNI.FromCharArray(array); } finally { CheckException(); }
+ }
+
+ public static double[] FromDoubleArray(IntPtr array)
+ {
+ try { return AndroidJNI.FromDoubleArray(array); } finally { CheckException(); }
+ }
+
+ public static float[] FromFloatArray(IntPtr array)
+ {
+ try { return AndroidJNI.FromFloatArray(array); } finally { CheckException(); }
+ }
+
+ public static Int64[] FromLongArray(IntPtr array)
+ {
+ try { return AndroidJNI.FromLongArray(array); } finally { CheckException(); }
+ }
+
+ public static Int16[] FromShortArray(IntPtr array)
+ {
+ try { return AndroidJNI.FromShortArray(array); } finally { CheckException(); }
+ }
+
+ public static Byte[] FromByteArray(IntPtr array)
+ {
+ try { return AndroidJNI.FromByteArray(array); } finally { CheckException(); }
+ }
+
+ public static bool[] FromBooleanArray(IntPtr array)
+ {
+ try { return AndroidJNI.FromBooleanArray(array); } finally { CheckException(); }
+ }
+
+ public static Int32[] FromIntArray(IntPtr array)
+ {
+ try { return AndroidJNI.FromIntArray(array); } finally { CheckException(); }
+ }
+
+
+ public static IntPtr ToObjectArray(IntPtr[] array)
+ {
+ try { return AndroidJNI.ToObjectArray(array); } finally { CheckException(); }
+ }
+
+ public static IntPtr ToCharArray(Char[] array)
+ {
+ try { return AndroidJNI.ToCharArray(array); } finally { CheckException(); }
+ }
+
+ public static IntPtr ToDoubleArray(double[] array)
+ {
+ try { return AndroidJNI.ToDoubleArray(array); } finally { CheckException(); }
+ }
+
+ public static IntPtr ToFloatArray(float[] array)
+ {
+ try { return AndroidJNI.ToFloatArray(array); } finally { CheckException(); }
+ }
+
+ public static IntPtr ToLongArray(Int64[] array)
+ {
+ try { return AndroidJNI.ToLongArray(array); } finally { CheckException(); }
+ }
+
+ public static IntPtr ToShortArray(Int16[] array)
+ {
+ try { return AndroidJNI.ToShortArray(array); } finally { CheckException(); }
+ }
+
+ public static IntPtr ToByteArray(Byte[] array)
+ {
+ try { return AndroidJNI.ToByteArray(array); } finally { CheckException(); }
+ }
+
+ public static IntPtr ToBooleanArray(bool[] array)
+ {
+ try { return AndroidJNI.ToBooleanArray(array); } finally { CheckException(); }
+ }
+
+ public static IntPtr ToIntArray(Int32[] array)
+ {
+ try { return AndroidJNI.ToIntArray(array); } finally { CheckException(); }
+ }
+
+ public static IntPtr GetObjectArrayElement(IntPtr array, int index)
+ {
+ try { return AndroidJNI.GetObjectArrayElement(array, index); } finally { CheckException(); }
+ }
+
+ public static int GetArrayLength(IntPtr array)
+ {
+ try { return AndroidJNI.GetArrayLength(array); } finally { CheckException(); }
+ }
+}
+}
+
+#endif