public static IntPtr GetMethodID(IntPtr javaClass, string methodName, string signature)
        {
            bool isStatic = false;

            return(AndroidJNIHelper.GetMethodID(javaClass, methodName, signature, isStatic));
        }
        public static string GetSignature(object obj)
        {
            if (obj == null)
            {
                return("Ljava/lang/Object;");
            }
            Type type = (!(obj is Type)) ? obj.GetType() : ((Type)obj);

            if (type.IsPrimitive)
            {
                if (type.Equals(typeof(int)))
                {
                    return("I");
                }
                if (type.Equals(typeof(bool)))
                {
                    return("Z");
                }
                if (type.Equals(typeof(byte)))
                {
                    return("B");
                }
                if (type.Equals(typeof(short)))
                {
                    return("S");
                }
                if (type.Equals(typeof(long)))
                {
                    return("J");
                }
                if (type.Equals(typeof(float)))
                {
                    return("F");
                }
                if (type.Equals(typeof(double)))
                {
                    return("D");
                }
                if (type.Equals(typeof(char)))
                {
                    return("C");
                }
            }
            else
            {
                if (type.Equals(typeof(string)))
                {
                    return("Ljava/lang/String;");
                }
//                 if (type.Equals(typeof(AndroidJavaRunnable)))
//                 {
//                     return "Ljava/lang/Runnable;";
//                 }
                if (type.Equals(typeof(AndroidJavaObject)))
                {
                    if (obj == type)
                    {
                        return("Ljava/lang/Object;");
                    }
                    AndroidJavaObject androidJavaObject = (AndroidJavaObject)obj;
                    AndroidJavaObject androidJavaObject2;

                    object[] args           = new object[0];
                    IntPtr   cachedMethodID = AndroidJNIHelper.GetMethodID <AndroidJavaObject>(androidJavaObject.GetRawClass(), "getClass", args, false);
                    jvalue[] args2          = AndroidJNIHelper.CreateJNIArgArray(args);
                    IntPtr   pobj           = AndroidJNI.CallObjectMethod(androidJavaObject.GetRawObject(), cachedMethodID, args2);
                    androidJavaObject2 = new AndroidJavaObject(pobj);


                    string retStr;
                    IntPtr cachedMethodID2 = AndroidJNIHelper.GetMethodID <AndroidJavaObject>(androidJavaObject.GetRawClass(), "getName", args, false);

                    retStr = AndroidJNI.CallStringMethod(androidJavaObject2.GetRawObject(), cachedMethodID2, args2);
                    return("L" + retStr + ";");
                }
                else
                {
                    if (typeof(Array).IsAssignableFrom(type))
                    {
                        if (type.GetArrayRank() != 1)
                        {
                            Debug.Warning("JNI: System.Array in n dimensions is not allowed");
                            return(string.Empty);
                        }
                        StringBuilder stringBuilder = new StringBuilder();
                        stringBuilder.Append('[');
                        stringBuilder.Append(_AndroidJNIHelper.GetSignature(type.GetElementType()));
                        return(stringBuilder.ToString());
                    }
                    else
                    {
                        Debug.Warning(string.Concat(new object[]
                        {
                            "JNI: Unknown signature for type '",
                            type,
                            "' (obj = ",
                            obj,
                            ") ",
                            (type != obj) ? "instance" : "equal"
                        }));
                    }
                }
            }
            return(string.Empty);
        }