예제 #1
0
    public static void setPlacementId(String pid)
    {
        //This function will be used to change the gameObjectName.
        //In our sample project, Gameobject is "Main Camera" which has script "CallAirpush.cs" and it contain all callback listeners.
        //You need to set the name of game object which contains all callback listeners


        // again, make sure the thread is attached..
        JavaVM.AttachCurrentThread();


        // first we try to find our main activity..
        IntPtr cls_Activity = JNI.FindClass("com/unity3d/player/UnityPlayer");
        int    fid_Activity = JNI.GetStaticFieldID(cls_Activity, "currentActivity", "Landroid/app/Activity;");

        obj_Activity = JNI.GetStaticObjectField(cls_Activity, fid_Activity);


        // create a JavaClass object...
        IntPtr cls_JavaClass = JNI.FindClass("com/airpush/unity/MainActivity");
        int    mid_JavaClass = JNI.GetMethodID(cls_JavaClass, "<init>", "(Landroid/app/Activity;)V");
        IntPtr obj_JavaClass = JNI.NewObject(cls_JavaClass, mid_JavaClass, obj_Activity);


        // create a global reference to the JavaClass object and fetch method id(s)..
        JavaClass    = JNI.NewGlobalRef(obj_JavaClass);
        BtnMyAppWall = JNI.GetMethodID(cls_JavaClass, "setPlacementId", "(Ljava/lang/String;)V");

        JNI.CallObjectMethod(JavaClass, BtnMyAppWall, JNI.NewStringUTF(pid));
    }
예제 #2
0
        public DebugProtocolService(JavaVM virtualMachine)
        {
            Contract.Requires<ArgumentNullException>(virtualMachine != null, "virtualMachine");

            _virtualMachine = virtualMachine;
            _eventProcessor = new EventProcessor(this);

            JniErrorHandler.ThrowOnFailure(_virtualMachine.GetEnvironment(out _environment));

            jvmtiCapabilities previousCapabilities;
            JvmtiErrorHandler.ThrowOnFailure(_environment.GetCapabilities(out previousCapabilities));

            var capabilities =
                new jvmtiCapabilities(
                    jvmtiCapabilities.CapabilityFlags1.CanTagObjects
                    | jvmtiCapabilities.CapabilityFlags1.CanGetSyntheticAttribute
                    | jvmtiCapabilities.CapabilityFlags1.CanGetSourceFileName
                    | jvmtiCapabilities.CapabilityFlags1.CanGetLineNumbers
                    | jvmtiCapabilities.CapabilityFlags1.CanGetSourceDebugExtension
                    | jvmtiCapabilities.CapabilityFlags1.CanAccessLocalVariables
                    | jvmtiCapabilities.CapabilityFlags1.CanGenerateSingleStepEvents
                    | jvmtiCapabilities.CapabilityFlags1.CanGenerateExceptionEvents
                    | jvmtiCapabilities.CapabilityFlags1.CanGenerateBreakpointEvents
                    | jvmtiCapabilities.CapabilityFlags1.CanGetBytecodes
                    | jvmtiCapabilities.CapabilityFlags1.CanSuspend
                    );
            JvmtiErrorHandler.ThrowOnFailure(RawInterface.AddCapabilities(_environment, ref capabilities));
        }
예제 #3
0
    public static void startAirBannerAdBottom()
    {
        // again, make sure the thread is attached..
        JavaVM.AttachCurrentThread();


        // first we try to find our main activity..
        IntPtr cls_Activity = JNI.FindClass("com/unity3d/player/UnityPlayer");
        int    fid_Activity = JNI.GetStaticFieldID(cls_Activity, "currentActivity", "Landroid/app/Activity;");

        obj_Activity = JNI.GetStaticObjectField(cls_Activity, fid_Activity);


        // create a JavaClass object...
        IntPtr cls_JavaClass = JNI.FindClass("com/airpush/unity/MainActivity");
        int    mid_JavaClass = JNI.GetMethodID(cls_JavaClass, "<init>", "(Landroid/app/Activity;)V");
        IntPtr obj_JavaClass = JNI.NewObject(cls_JavaClass, mid_JavaClass, obj_Activity);



        JavaClass    = JNI.NewGlobalRef(obj_JavaClass);
        BtnMyAppWall = JNI.GetMethodID(cls_JavaClass, "airBannerAdBottom", "()V");

        // get the Java String object from the JavaClass object
        JNI.CallObjectMethod(JavaClass, BtnMyAppWall, JNI.NewStringUTF("top"));
    }
예제 #4
0
        public void TestMethod1()
        {
            Setup();

            // NO FUNCIONA... ?????

            JavaVMOption options = new JavaVMOption();

            //options.optionString = $@"-Djava.class.path={jdkPath}";
            options.optionString = "";

            JavaVMInitArgs vm_args = JavaVMInitArgs.create(JNI.JNI_VERSION_1_8, 1);

            vm_args.set(0, options);

            int flags;

            Ref_JavaVM refJavaVM = new Ref_JavaVM();
            Ref_JNIEnv refJNIEnv = new Ref_JNIEnv();

            flags = JavaVM.CreateJavaVM(refJavaVM, refJNIEnv, vm_args);
            if (flags == JNI.JNI_ERR)
            {
                String msg = "Error creando la maquina virtual";
                Debug.WriteLine(msg);
                throw new Exception(msg);
            }
            JNIEnv jniEnv = refJNIEnv.getValue();

            JClass clazz = jniEnv.FindClass("java/lang/Object");

            Debug.WriteLine("Class " + clazz);
        }
예제 #5
0
        public jvmtiError GetSourceFileName(JvmVirtualMachineRemoteHandle virtualMachine, JvmClassRemoteHandle @class, out string sourceName)
        {
            JavaVM machine = JavaVM.GetInstance(virtualMachine);

            string     sourceNameResult = null;
            jvmtiError result           = jvmtiError.Internal;

            machine.InvokeOnJvmThread(
                (environment) =>
            {
                jvmtiInterface rawInterface = environment.RawInterface;

                IntPtr sourceNamePtr = IntPtr.Zero;
                try
                {
                    result = rawInterface.GetSourceFileName(environment.Handle, @class, out sourceNamePtr);

                    unsafe
                    {
                        if (sourceNamePtr != IntPtr.Zero)
                        {
                            sourceNameResult = ModifiedUTF8Encoding.GetString((byte *)sourceNamePtr);
                        }
                    }
                }
                finally
                {
                    rawInterface.Deallocate(environment.Handle, sourceNamePtr);
                }
            });

            sourceName = sourceNameResult;
            return(result);
        }
예제 #6
0
    void Start()
    {
        // Attach our thread to the java vm; obviously the main thread is already attached but this is good practice..
        JavaVM.AttachCurrentThread();

        // Enable logging for debugging.
        AndroidJavaClass tapjoyLog = new AndroidJavaClass("com.tapjoy.TapjoyLog");

        tapjoyLog.CallStatic("enableLogging", true);

        // Get the activity context for Android.
        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");

        currentActivity = jc.GetStatic <AndroidJavaObject>("currentActivity");

        // Connect to the Tapjoy servers.
        tapjoyConnect = new AndroidJavaClass("com.tapjoy.TapjoyConnect");
        tapjoyConnect.CallStatic("requestTapjoyConnect",
                                 currentActivity,                                                                       // Activity context.
                                 "acd01aa3-04f3-4a40-bae5-21affbf9bf86",                                                // YOUR APP ID GOES HERE
                                 "cQWKWp5HgYZuKGZQLAa0");                                                               // YOUR SECRET KEY GOES HERE

        tapjoyConnectInstance = tapjoyConnect.CallStatic <AndroidJavaObject>("getTapjoyConnectInstance");
        tapjoyConnectInstance.Call("initVideoAd");
    }
예제 #7
0
        public jvmtiError GetThreadInfo(JvmVirtualMachineRemoteHandle virtualMachine, JvmThreadRemoteHandle thread, out JvmThreadRemoteInfo info)
        {
            JavaVM machine = JavaVM.GetInstance(virtualMachine);

            jvmtiThreadInfo threadInfo = default(jvmtiThreadInfo);
            jvmtiError      result     = jvmtiError.Internal;

            machine.InvokeOnJvmThread(
                (environment) =>
            {
                jvmtiInterface rawInterface = environment.RawInterface;
                result = rawInterface.GetThreadInfo(environment.Handle, thread, out threadInfo);
            });

            info = new JvmThreadRemoteInfo()
            {
                Name               = threadInfo.Name,
                Priority           = threadInfo._priority,
                IsDaemon           = threadInfo._isDaemon != 0,
                ContextClassLoader = new JvmObjectRemoteHandle(threadInfo._contextClassLoader),
                ThreadGroup        = new JvmThreadGroupRemoteHandle(threadInfo._threadGroup)
            };

            return(result);
        }
예제 #8
0
        public JavaVM get(int i)
        {
            global::System.IntPtr cPtr = JNIPINVOKE.Buffer_JavaVM_get(swigCPtr, i);
            JavaVM ret = (cPtr == global::System.IntPtr.Zero) ? null : new JavaVM(cPtr, false);

            return(ret);
        }
예제 #9
0
        public JavaVM getValue()
        {
            global::System.IntPtr cPtr = JNIPINVOKE.Ref_JavaVM_getValue(swigCPtr);
            JavaVM ret = (cPtr == global::System.IntPtr.Zero) ? null : new JavaVM(cPtr, false);

            return(ret);
        }
예제 #10
0
    void Start()
    {
        // attach our thread to the java vm; obviously the main thread is already attached but this is good practice..
        JavaVM.AttachCurrentThread();

        // first we try to find our main activity..
        IntPtr cls_Activity = JNI.FindClass("com/unity3d/player/UnityPlayer");
        int    fid_Activity = JNI.GetStaticFieldID(cls_Activity, "currentActivity", "Landroid/app/Activity;");
        IntPtr obj_Activity = JNI.GetStaticObjectField(cls_Activity, fid_Activity);

        Debug.Log("obj_Activity = " + obj_Activity);

        // create a JavaClass object...
        IntPtr cls_JavaClass = JNI.FindClass("org/example/ScriptBridge/JavaClass");
        int    mid_JavaClass = JNI.GetMethodID(cls_JavaClass, "<init>", "(Landroid/app/Activity;)V");
        IntPtr obj_JavaClass = JNI.NewObject(cls_JavaClass, mid_JavaClass, obj_Activity);

        Debug.Log("JavaClass object = " + obj_JavaClass);

        // create a global reference to the JavaClass object and fetch method id(s)..
        JavaClass           = JNI.NewGlobalRef(obj_JavaClass);
        getActivityCacheDir = JNI.GetMethodID(cls_JavaClass, "getActivityCacheDir", "()Ljava/lang/String;");
        Debug.Log("JavaClass global ref = " + JavaClass);
        Debug.Log("JavaClass method id = " + getActivityCacheDir);
    }
예제 #11
0
        private JvmtiEnvironment(JavaVM virtualMachine, jvmtiEnvHandle handle)
        {
            Contract.Requires<ArgumentNullException>(virtualMachine != null, "virtualMachine");

            _virtualMachine = virtualMachine;
            _handle = handle;
            _rawInterface = (jvmtiInterface)Marshal.PtrToStructure(Marshal.ReadIntPtr(handle.Handle), typeof(jvmtiInterface));

            jvmtiCapabilities previousCapabilities;
            JvmtiErrorHandler.ThrowOnFailure(RawInterface.GetCapabilities(this, out previousCapabilities));

            jvmtiCapabilities potentialCapabilities;
            JvmtiErrorHandler.ThrowOnFailure(RawInterface.GetPotentialCapabilities(this, out potentialCapabilities));

            var capabilities =
                new jvmtiCapabilities(
                    jvmtiCapabilities.CapabilityFlags1.CanTagObjects
                    | jvmtiCapabilities.CapabilityFlags1.CanGetSourceFileName
                    | jvmtiCapabilities.CapabilityFlags1.CanGetLineNumbers
                    | jvmtiCapabilities.CapabilityFlags1.CanGetSourceDebugExtension
                    | jvmtiCapabilities.CapabilityFlags1.CanAccessLocalVariables
                    | jvmtiCapabilities.CapabilityFlags1.CanGenerateSingleStepEvents
                    | jvmtiCapabilities.CapabilityFlags1.CanGenerateExceptionEvents
                    | jvmtiCapabilities.CapabilityFlags1.CanGenerateBreakpointEvents
                    | jvmtiCapabilities.CapabilityFlags1.CanGenerateFramePopEvents
                    | jvmtiCapabilities.CapabilityFlags1.CanGenerateAllClassHookEvents
                    | jvmtiCapabilities.CapabilityFlags1.CanGetBytecodes
                    | jvmtiCapabilities.CapabilityFlags1.CanSuspend,
                    jvmtiCapabilities.CapabilityFlags2.CanGetConstantPool
                    );
            JvmtiErrorHandler.ThrowOnFailure(RawInterface.AddCapabilities(this, ref capabilities));

            jvmtiCapabilities newCapabilities;
            JvmtiErrorHandler.ThrowOnFailure(RawInterface.GetCapabilities(this, out newCapabilities));
        }
예제 #12
0
파일: jvalue.cs 프로젝트: Kav2018/JavaForVS
        public jvalue(JavaVM virtualMachine, JvmtiEnvironment environment, JniEnvironment nativeEnvironment, Value value)
            : this()
        {
            if (value.Data == 0)
                return;

            switch (value.Tag)
            {
            case Tag.Byte:
                ByteValue = (byte)value.Data;
                break;

            case Tag.Char:
                CharValue = (char)value.Data;
                break;

            case Tag.Float:
                IntValue = (int)(uint)value.Data;
                break;

            case Tag.Int:
                IntValue = (int)value.Data;
                break;

            case Tag.Double:
                LongValue = (long)(ulong)value.Data;
                break;

            case Tag.Long:
                LongValue = value.Data;
                break;

            case Tag.Short:
                ShortValue = (short)value.Data;
                break;

            case Tag.Boolean:
                break;

            case Tag.Array:
            case Tag.Object:
            case Tag.String:
            case Tag.Thread:
            case Tag.ThreadGroup:
            case Tag.ClassLoader:
            case Tag.ClassObject:
                if (value.Data == 0)
                    return;

                ObjectValue = virtualMachine.GetLocalReferenceForObject(nativeEnvironment, new ObjectId(value.Data)).Value;
                break;

            case Tag.Void:
            case Tag.Invalid:
            default:
                throw new ArgumentException();
            }
        }
예제 #13
0
        internal static JvmEnvironment GetOrCreateEnvironment(JavaVM virtualMachine, jvmtiEnvHandle env)
        {
            Contract.Requires <ArgumentNullException>(virtualMachine != null, "virtualMachine");

            JvmEnvironment environment = _environments.GetOrAdd(env, CreateEnvironment);

            if (environment.VirtualMachine == null)
            {
                environment.VirtualMachine = virtualMachine;
            }

            return(environment);
        }
예제 #14
0
    private bool InitalizeAndroidSoundBankIO()
    {
        JavaVM.AttachCurrentThread();

        // Find main activity..
        IntPtr cls_Activity = JNI.FindClass("com/unity3d/player/UnityPlayer");
        int    fid_Activity = JNI.GetStaticFieldID(cls_Activity, "currentActivity", "Landroid/app/Activity;");
        IntPtr obj_Activity = JNI.GetStaticObjectField(cls_Activity, fid_Activity);

        if (obj_Activity == IntPtr.Zero)
        {
            Debug.LogError("WwiseUnity: Failed to get UnityPlayer activity. Abort.");
            return(false);
        }

        // Create a JavaClass object...
        const string AkPackageClass = "com/audiokinetic/aksoundengine/SoundBankIOInitalizerJavaClass";
        IntPtr       cls_JavaClass  = JNI.FindClass(AkPackageClass);

        if (cls_JavaClass == IntPtr.Zero)
        {
            Debug.LogError("WwiseUnity: Failed to find Java class. Check if plugin JAR file is available in Assets/Plugins/Android. Abort.");
            return(false);
        }

        int mid_JavaClass = JNI.GetMethodID(cls_JavaClass, "<init>", "(Landroid/app/Activity;)V");

        IntPtr obj_JavaClass = JNI.NewObject(cls_JavaClass, mid_JavaClass, obj_Activity);


        // Create a global reference to the JavaClass object and fetch method id(s)..
        IntPtr soundBankIOInitalizerJavaClass = JNI.NewGlobalRef(obj_JavaClass);
        int    setAssetManagerMethodID        = JNI.GetMethodID(cls_JavaClass, "SetAssetManager", "()I");

        if (setAssetManagerMethodID == 0)
        {
            Debug.LogError("WwiseUnity: Failed to find Java class method. Check method name and signature in JNI query. Abort.");
            return(false);
        }

        // get the Java String object from the JavaClass object
        IntPtr ret = JNI.CallObjectMethod(soundBankIOInitalizerJavaClass, setAssetManagerMethodID);

        if (ret != IntPtr.Zero)
        {
            Debug.LogError("WwiseUnity: Failed to set AssetManager for Android SoundBank low-level IO handler.");
            return(false);
        }

        return(true);
    }
예제 #15
0
        public jvmtiError Deallocate(JvmVirtualMachineRemoteHandle virtualMachine, long address)
        {
            JavaVM machine = JavaVM.GetInstance(virtualMachine);

            jvmtiError result = jvmtiError.Internal;

            machine.InvokeOnJvmThread(
                (environment) =>
            {
                jvmtiInterface rawInterface = environment.RawInterface;
                result = rawInterface.Deallocate(environment.Handle, (IntPtr)address);
            });

            return(result);
        }
예제 #16
0
        public jvmtiError SetTag(JvmVirtualMachineRemoteHandle virtualMachine, JvmObjectRemoteHandle @object, long tag)
        {
            JavaVM machine = JavaVM.GetInstance(virtualMachine);

            jvmtiError result = jvmtiError.Internal;

            machine.InvokeOnJvmThread(
                (environment) =>
            {
                jvmtiInterface rawInterface = environment.RawInterface;
                result = rawInterface.SetTag(environment.Handle, @object, tag);
            });

            return(result);
        }
예제 #17
0
        public jvmtiError Allocate(JvmVirtualMachineRemoteHandle virtualMachine, long size, out long address)
        {
            JavaVM machine = JavaVM.GetInstance(virtualMachine);

            jvmtiError result = jvmtiError.Internal;
            IntPtr     memory = IntPtr.Zero;

            machine.InvokeOnJvmThread(
                (environment) =>
            {
                jvmtiInterface rawInterface = environment.RawInterface;
                result = rawInterface.Allocate(environment.Handle, size, out memory);
            });

            address = memory.ToInt64();
            return(result);
        }
예제 #18
0
        public jvmtiError GetThreadState(JvmVirtualMachineRemoteHandle virtualMachine, JvmThreadRemoteHandle thread, out jvmtiThreadState threadState)
        {
            JavaVM machine = JavaVM.GetInstance(virtualMachine);

            jvmtiThreadState threadStateResult = jvmtiThreadState.None;
            jvmtiError       result            = jvmtiError.Internal;

            machine.InvokeOnJvmThread(
                (environment) =>
            {
                jvmtiInterface rawInterface = environment.RawInterface;
                result = rawInterface.GetThreadState(environment.Handle, thread, out threadStateResult);
            });

            threadState = threadStateResult;
            return(result);
        }
예제 #19
0
        public jvmtiError GetObjectHashCode(JvmVirtualMachineRemoteHandle virtualMachine, JvmObjectRemoteHandle @object, out int hashCode)
        {
            JavaVM machine = JavaVM.GetInstance(virtualMachine);

            int        hashCodeResult = 0;
            jvmtiError result         = jvmtiError.Internal;

            machine.InvokeOnJvmThread(
                (environment) =>
            {
                jvmtiInterface rawInterface = environment.RawInterface;
                result = rawInterface.GetObjectHashCode(environment.Handle, @object, out hashCodeResult);
            });

            hashCode = hashCodeResult;
            return(result);
        }
예제 #20
0
        public jvmtiError GetCurrentThread(JvmVirtualMachineRemoteHandle virtualMachine, out JvmThreadRemoteHandle threadHandle)
        {
            JavaVM machine = JavaVM.GetInstance(virtualMachine);

            jthread    thread = jthread.Null;
            jvmtiError result = jvmtiError.Internal;

            machine.InvokeOnJvmThread(
                (environment) =>
            {
                jvmtiInterface rawInterface = environment.RawInterface;
                result = rawInterface.GetCurrentThread(environment.Handle, out thread);
            });

            threadHandle = new JvmThreadRemoteHandle(thread);
            return(result);
        }
예제 #21
0
    protected override void Login(string facebookAppID)
    {
        JavaVM.AttachCurrentThread();
        //Find current Activity
        IntPtr clsActivity = JNI.FindClass("com/unity3d/player/UnityPlayer");
        IntPtr objActivity = JNI.GetStaticObjectField(clsActivity, JNI.GetStaticFieldID(clsActivity, "currentActivity", "Landroid/app/Activity;"));
        //Create LoginAdapter obj
        IntPtr clsLAdapter = JNI.FindClass("com/socialnetwork/LoginAdapter");
        IntPtr objlAdapter = JNI.NewObject(clsLAdapter, JNI.GetMethodID(clsLAdapter, "<init>", "(Landroid/app/Activity;)V"), objActivity);
        IntPtr lAdapter    = JNI.NewGlobalRef(objlAdapter);

        if (JNI.CallBooleanMethod(lAdapter, JNI.GetMethodID(clsLAdapter, "Login", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z"), JNI.NewStringUTF(facebookAppID), JNI.NewStringUTF(host), JNI.NewStringUTF(port.ToString()), JNI.NewStringUTF("fb")) == 0)
        {
            return;
        }
        socketServer             = new SocketServer(port);
        socketServer.ReadString += OnLoginEnded;
    }
예제 #22
0
        public void TestMethod1()
        {
            Setup();

            es.jni.JavaVMOption options = new JavaVMOption();
            //options.optionString = $@"-Djava.class.path={jdkPath}";
            options.optionString = "";

            JavaVMInitArgs vm_args = JavaVMInitArgs.create(JNI.JNI_VERSION_1_8, 1);

            vm_args.set(0, options);

            int flags;

            Ref_JavaVM refJavaVM = new Ref_JavaVM();
            Ref_JNIEnv refJNIEnv = new Ref_JNIEnv();

            flags = JavaVM.CreateJavaVM(refJavaVM, refJNIEnv, vm_args);
            if (flags == JNI.JNI_ERR)
            {
                String msg = "Error creando la maquina virtual";
                Debug.WriteLine(msg);
                throw new Exception(msg);
            }
            JavaVM javaVM = refJavaVM.getValue();
            JNIEnv jniEnv = refJNIEnv.getValue();

            JClass jclazz = jniEnv.FindClass("java/lang/Object");

            Debug.WriteLine("jclazz " + jclazz);

            GC(jniEnv);

            JMethodID jinit     = jniEnv.GetMethodID(jclazz, "<init>", "()V");
            JObject   jinstance = jniEnv.NewObject(jclazz, jinit, new JValue[0]);

            JObject jref = jniEnv.NewGlobalRef(jinstance);

            Test(jniEnv, jclazz);

            jniEnv.DeleteLocalRef(jclazz);
        }
예제 #23
0
        public jvmtiError GetClassSignature(JvmVirtualMachineRemoteHandle virtualMachine, JvmClassRemoteHandle @class, out string signature, out string generic)
        {
            JavaVM machine = JavaVM.GetInstance(virtualMachine);

            string     signatureResult = null;
            string     genericResult   = null;
            jvmtiError result          = jvmtiError.Internal;

            machine.InvokeOnJvmThread(
                (environment) =>
            {
                jvmtiInterface rawInterface = environment.RawInterface;

                IntPtr signaturePtr = IntPtr.Zero;
                IntPtr genericPtr   = IntPtr.Zero;
                try
                {
                    result = rawInterface.GetClassSignature(environment.Handle, @class, out signaturePtr, out genericPtr);

                    unsafe
                    {
                        if (signaturePtr != IntPtr.Zero)
                        {
                            signatureResult = ModifiedUTF8Encoding.GetString((byte *)signaturePtr);
                        }
                        if (genericPtr != IntPtr.Zero)
                        {
                            genericResult = ModifiedUTF8Encoding.GetString((byte *)genericPtr);
                        }
                    }
                }
                finally
                {
                    rawInterface.Deallocate(environment.Handle, signaturePtr);
                    rawInterface.Deallocate(environment.Handle, genericPtr);
                }
            });

            signature = signatureResult;
            generic   = genericResult;
            return(result);
        }
예제 #24
0
    public static void startAirIconAd()
    {
        JavaVM.AttachCurrentThread();

        // first we try to find our main activity..
        IntPtr cls_Activity = JNI.FindClass("com/unity3d/player/UnityPlayer");
        int    fid_Activity = JNI.GetStaticFieldID(cls_Activity, "currentActivity", "Landroid/app/Activity;");

        obj_Activity = JNI.GetStaticObjectField(cls_Activity, fid_Activity);


        IntPtr cls_JavaClass = JNI.FindClass("com/airpush/unity/MainActivity");
        int    mid_JavaClass = JNI.GetMethodID(cls_JavaClass, "<init>", "(Landroid/app/Activity;)V");
        IntPtr obj_JavaClass = JNI.NewObject(cls_JavaClass, mid_JavaClass, obj_Activity);

        JavaClass = JNI.NewGlobalRef(obj_JavaClass);
        BtnMyIcon = JNI.GetMethodID(cls_JavaClass, "airiconAd", "()V");
        Debug.Log("parul6");
        // get the Java String object from the JavaClass object
        JNI.CallObjectMethod(JavaClass, BtnMyIcon, JNI.NewStringUTF("Caching"));
    }
예제 #25
0
    private string getCacheDir()
    {
        // again, make sure the thread is attached..
        JavaVM.AttachCurrentThread();

        // get the Java String object from the JavaClass object
        IntPtr str_cacheDir = JNI.CallObjectMethod(JavaClass, getActivityCacheDir);

        Debug.Log("str_cacheDir = " + str_cacheDir);

        // convert the Java String into a Mono string
        IntPtr stringPtr = JNI.GetStringUTFChars(str_cacheDir, 0);

        Debug.Log("stringPtr = " + stringPtr);
        String cache = Marshal.PtrToStringAnsi(stringPtr);

        JNI.ReleaseStringUTFChars(str_cacheDir, stringPtr);

        Debug.Log("return value is = " + cache);

        return(cache);
    }
예제 #26
0
    // Use this for initialization
    public static void startAirSmartWallAd()
    {
        // This method can be directly called to show the smartwall ad directly without caching.
        // again, make sure the thread is attached..
        JavaVM.AttachCurrentThread();
        // first we try to find our main activity..
        IntPtr cls_Activity = JNI.FindClass("com/unity3d/player/UnityPlayer");
        int    fid_Activity = JNI.GetStaticFieldID(cls_Activity, "currentActivity", "Landroid/app/Activity;");

        obj_Activity = JNI.GetStaticObjectField(cls_Activity, fid_Activity);

        IntPtr cls_JavaClass = JNI.FindClass("com/airpush/unity/MainActivity");
        int    mid_JavaClass = JNI.GetMethodID(cls_JavaClass, "<init>", "(Landroid/app/Activity;)V");
        IntPtr obj_JavaClass = JNI.NewObject(cls_JavaClass, mid_JavaClass, obj_Activity);


        JavaClass  = JNI.NewGlobalRef(obj_JavaClass);
        BtnMySmart = JNI.GetMethodID(cls_JavaClass, "airSmartWallAd", "()V");

        // get the Java String object from the JavaClass object
        JNI.CallObjectMethod(JavaClass, BtnMySmart, JNI.NewStringUTF("Caching"));
    }
예제 #27
0
        public jvmtiError GetClassMethods(JvmVirtualMachineRemoteHandle virtualMachine, JvmClassRemoteHandle @class, out JvmMethodRemoteHandle[] methods)
        {
            JavaVM machine = JavaVM.GetInstance(virtualMachine);

            List <JvmMethodRemoteHandle> methodsList = new List <JvmMethodRemoteHandle>();
            jvmtiError result = jvmtiError.Internal;

            machine.InvokeOnJvmThread(
                (environment) =>
            {
                jvmtiInterface rawInterface = environment.RawInterface;

                IntPtr methodsPtr = IntPtr.Zero;
                try
                {
                    int methodCount;
                    result = rawInterface.GetClassMethods(environment.Handle, @class, out methodCount, out methodsPtr);

                    unsafe
                    {
                        jmethodID *rawMethods = (jmethodID *)methodsPtr;
                        for (int i = 0; i < methodCount; i++)
                        {
                            methodsList.Add(new JvmMethodRemoteHandle(rawMethods[i]));
                        }
                    }
                }
                finally
                {
                    rawInterface.Deallocate(environment.Handle, methodsPtr);
                }
            });

            methods = methodsList.ToArray();
            return(result);
        }
예제 #28
0
        public jvmtiError GetLineNumberTable(JvmVirtualMachineRemoteHandle virtualMachine, JvmMethodRemoteHandle method, out JvmLineNumberEntry[] lineNumbers)
        {
            JavaVM machine = JavaVM.GetInstance(virtualMachine);

            List <JvmLineNumberEntry> lineNumbersList = new List <JvmLineNumberEntry>();
            jvmtiError result = jvmtiError.Internal;

            machine.InvokeOnJvmThread(
                (environment) =>
            {
                jvmtiInterface rawInterface = environment.RawInterface;

                IntPtr lineNumbersPtr = IntPtr.Zero;
                try
                {
                    int entryCount;
                    result = rawInterface.GetLineNumberTable(environment.Handle, (jmethodID)method, out entryCount, out lineNumbersPtr);

                    unsafe
                    {
                        jvmtiLineNumberEntry *rawLineNumbers = (jvmtiLineNumberEntry *)lineNumbersPtr;
                        for (int i = 0; i < entryCount; i++)
                        {
                            lineNumbersList.Add(new JvmLineNumberEntry(method, rawLineNumbers[i]));
                        }
                    }
                }
                finally
                {
                    rawInterface.Deallocate(environment.Handle, lineNumbersPtr);
                }
            });

            lineNumbers = lineNumbersList.ToArray();
            return(result);
        }
예제 #29
0
    // Use this for initialization
    public static void showCachedAirSmartWallAd()
    {
        // This method will be used to show the ad which has been cached by cacheAirSmartWallAd
        //This method will be used in conjunction with cacheAirSmartWallAd and should be called only after cacheAirSmartWallAd
        // again, make sure the thread is attached..
        JavaVM.AttachCurrentThread();
        // first we try to find our main activity..
        IntPtr cls_Activity = JNI.FindClass("com/unity3d/player/UnityPlayer");
        int    fid_Activity = JNI.GetStaticFieldID(cls_Activity, "currentActivity", "Landroid/app/Activity;");

        obj_Activity = JNI.GetStaticObjectField(cls_Activity, fid_Activity);

        IntPtr cls_JavaClass = JNI.FindClass("com/airpush/unity/MainActivity");
        int    mid_JavaClass = JNI.GetMethodID(cls_JavaClass, "<init>", "(Landroid/app/Activity;)V");
        IntPtr obj_JavaClass = JNI.NewObject(cls_JavaClass, mid_JavaClass, obj_Activity);



        JavaClass  = JNI.NewGlobalRef(obj_JavaClass);
        BtnMySmart = JNI.GetMethodID(cls_JavaClass, "airShowCachedAd", "()V");

        // get the Java String object from the JavaClass object
        JNI.CallObjectMethod(JavaClass, BtnMySmart, JNI.NewStringUTF("Cached"));
    }
예제 #30
0
 public void setValue(JavaVM pvalue)
 {
     JNIPINVOKE.Ref_JavaVM_setValue(swigCPtr, JavaVM.getCPtr(pvalue));
 }
            private bool ShouldSkipCurrentMethod(JavaVM virtualMachine, JvmtiEnvironment environment, JniEnvironment nativeEnvironment, jthread thread, int stackDepth, Location location, out bool convertToFramePop)
            {
                Contract.Assert(_depth == StepDepth.Into || _depth == StepDepth.Over);

                convertToFramePop = false;

                if (!_hasMethodInfo || stackDepth < _stackDepth || (stackDepth == _stackDepth && (location.Method.Equals(_lastMethod))))
                    return false;

                /*
                 * change this to a Frame Pop event if we're not in a native frame
                 */
                bool native;
                jvmtiError error = environment.IsMethodNative(location.Method, out native);
                if (error != jvmtiError.None)
                    return false;

                convertToFramePop = !native;

                if (_depth == StepDepth.Over || native)
                    return true;

                JvmAccessModifiers modifiers;
                error = environment.GetMethodModifiers(location.Method, out modifiers);
                if (error != jvmtiError.None || ((modifiers & JvmAccessModifiers.Static) != 0))
                    return false;

                jobject thisObject;
                error = environment.GetLocalObject(thread, 0, 0, out thisObject);
                if (error != jvmtiError.None)
                    return false;

                try
                {
                    bool classLoader = nativeEnvironment.IsInstanceOf(thisObject, virtualMachine.ClassLoaderClass);
                    if (!classLoader)
                        return false;

                    string name;
                    string signature;
                    string genericSignature;
                    error = environment.GetMethodName(location.Method, out name, out signature, out genericSignature);
                    if (error != jvmtiError.None)
                        return false;

                    if (name == "loadClass" && signature == "(Ljava/lang/String;)Ljava/lang/Class;")
                        return true;

                    if (name == "checkPackageAccess" && signature == "(Ljava/lang/Class;Ljava/security/ProtectionDomain;)V")
                        return true;

                    return false;
                }
                finally
                {
                    nativeEnvironment.DeleteLocalReference(thisObject);
                }
            }
예제 #32
0
 private static JvmtiEnvironment CreateVirtualMachine(JavaVM virtualMachine, jvmtiEnvHandle handle)
 {
     return new JvmtiEnvironment(virtualMachine, handle);
 }
예제 #33
0
 internal static JvmtiEnvironment GetOrCreateInstance(JavaVM virtualMachine, jvmtiEnvHandle handle)
 {
     return _instances.GetOrAdd(handle, i => CreateVirtualMachine(virtualMachine, i));
 }
예제 #34
0
        private static void GetEnvironmentVersion(JavaVM vm)
        {
            JvmtiEnvironment env;
            int error = vm.GetEnvironment(out env);

            int version;
            jvmtiError error2 = env.GetVersionNumber(out version);
        }
예제 #35
0
        /// <summary>
        /// Create the Java VM and wrap it.
        /// </summary>
        /// <param name="jvmDllPath">(Optional) Path to jvm.dll where we'll load the JNI library. If not provided we'll try to infer its location from the Java install path.</param>
        /// <param name="attemptVmReuse">
        /// This is an annoying workaround to a fundamental JNI problem: you can't host a JVM within the process again once you've hosted it once
        /// (ever, even if you destroy the first one). So if this flag is <c>true</c>, we'll attempt to find an existing JVM in the process and use that
        /// if available, and we won't destroy the JVM on dispose so subsequent constructions of this object will succeed.
        /// The downside of reuse of course is that if we're reusing it then we won't be able to construct it with fresh arguments.
        /// </param>
        internal JniWrapper(string jvmDllPath, bool attemptVmReuse, IEnumerable <JavaOption> options)
        {
            _currentThreadEnv = new ThreadLocal <IntPtr>(() =>
            {
                IntPtr ret;
                unsafe
                {
                    if (_vm.GetDelegate <GetEnv>()(_vmP, (IntPtr)(&ret), _jniVersion) == -2)
                    {
                        _vm.GetDelegate <AttachCurrentThread>()(_vmP, (IntPtr)(&ret), IntPtr.Zero);
                    }
                    return(ret);
                }
            });
            if (String.IsNullOrEmpty(jvmDllPath))
            {
                string javaHome = GetJavaInstallationPath();
                _vmDll = Path.Combine(javaHome, "bin", "server", "jvm.dll");
            }
            else
            {
                _vmDll = jvmDllPath;
            }
            if (!File.Exists(_vmDll))
            {
                throw new InvalidOperationException("Couldn't find the runtime library for Java at: " + _vmDll);
            }
            IntPtr envP;
            IntPtr vmP;

            _vmDllModule = LoadLibrary(_vmDll);
            if (_vmDllModule == IntPtr.Zero)
            {
                throw new Win32Exception();
            }
            if (attemptVmReuse)
            {
                _vmReuse = true;
                int numVms;
                unsafe
                {
                    ThrowOnBadResult(GetDelegateFromJni <GetCreatedJavaVMs>("JNI_GetCreatedJavaVMs")(&vmP, 1, out numVms), "GetCreatedJavaVMs");
                    if (numVms >= 1)
                    {
                        _vmP = vmP;
                        _vm  = (JavaVM)Marshal.PtrToStructure(vmP, typeof(JavaVM));
                        ThrowOnBadResult(_vm.GetDelegate <AttachCurrentThread>()(_vmP, (IntPtr)(&envP), IntPtr.Zero), "AttachCurrentThread");
                        _envP = envP;
                        _env  = (JniEnv)Marshal.PtrToStructure(envP, typeof(JniEnv));
                        return;
                    }
                }
            }
            JavaVMInitArgs vmArgs = new JavaVMInitArgs();

            GetDelegateFromJni <GetDefaultJavaVMInitArgs>("JNI_GetDefaultJavaVMInitArgs")(ref vmArgs);
            vmArgs.Version   = _jniVersion;
            vmArgs._nOptions = options.Count();
            vmArgs._options  = Marshal.AllocHGlobal(vmArgs._nOptions * Marshal.SizeOf(typeof(JavaVMOption)));
            IntPtr vmArgsP = Marshal.AllocHGlobal(Marshal.SizeOf(vmArgs));

            try
            {
                int optionsLocation = 0;
                foreach (JavaOption currentOption in options)
                {
                    Marshal.StructureToPtr(currentOption.ActualOption, vmArgs._options + optionsLocation * Marshal.SizeOf(typeof(JavaVMOption)), false);
                    optionsLocation++;
                }
                Marshal.StructureToPtr(vmArgs, vmArgsP, false);
                unsafe
                {
                    ThrowOnBadResult(GetDelegateFromJni <CreateJavaVM>("JNI_CreateJavaVM")(&vmP, &envP, vmArgsP), "CreateJavaVM");
                    _vm   = (JavaVM)Marshal.PtrToStructure(vmP, typeof(JavaVM));
                    _env  = (JniEnv)Marshal.PtrToStructure(envP, typeof(JniEnv));
                    _envP = envP;
                    _vmP  = vmP;
                }
            }
            finally
            {
                Marshal.DestroyStructure(vmArgsP, typeof(JavaVMInitArgs));
                Marshal.FreeHGlobal(vmArgsP);
                Marshal.FreeHGlobal(vmArgs._options);
            }
        }
예제 #36
0
 internal static global::System.Runtime.InteropServices.HandleRef getCPtr(JavaVM obj)
 {
     return((obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr);
 }
예제 #37
0
 public JniGlobalHandle(JniGlobalHandleNs handleValue, JavaVM javaVM)
     : base(IntPtr.Zero, true)
 {
     this.javaVM = javaVM;
     SetHandle(handleValue.handle);
 }