Пример #1
0
        public static Dictionary<string, string> RetrieveAll(JniEnvironment environment)
        {
            Dictionary<string, string> properties = new Dictionary<string,string>();

            JniLocalFrame frame = environment.CreateLocalFrame(1);
            try
            {
                JniClass systemClazz = JniClass.FindClass(environment, "java/lang/System");
                string[] keyNames = GetJavaPropertyNames(environment, systemClazz);
                JniMethod getPropMid = systemClazz.GetStaticMethodId(environment, "getProperty", "(Ljava/lang/String;)Ljava/lang/String;");

                foreach (string keyName in keyNames)
                {
                    JValue[] paramArray = new JValue[1];
                    paramArray[0].AssignStringValue(environment, keyName);
                    try
                    {
                        string val = getPropMid.CallStaticStringMethod(environment, paramArray);
                        properties.Add(keyName, val);
                    }
                    finally
                    {
                        paramArray[0].Free(environment);
                    }
                }
            }
            finally
            {
                frame.SafePop();
            }

            return properties;
        }
Пример #2
0
        internal static void Init(JniEnvironment environment)
        {
            if (JavaVM.IsLogTypeEnabled(JavaVMLogTypes.RedirectStdOut | JavaVMLogTypes.RedirectStdErr))
            {
                JniLocalFrame frame = environment.CreateLocalFrame(1);
                try
                {
                    JniClass peer = JavaNativeMethodRegistrar.RegisterCounterpartAndReturnPeer(environment,
                        typeof(JavaStdStreamRedirector));

                    if (JavaVM.IsLogTypeEnabled(JavaVMLogTypes.RedirectStdOut))
                    {
                        HookStream(environment, peer, JavaVMLogTypes.RedirectStdOut, "redirectStdOut");
                    }

                    if (JavaVM.IsLogTypeEnabled(JavaVMLogTypes.RedirectStdErr))
                    {
                        HookStream(environment, peer, JavaVMLogTypes.RedirectStdErr, "redirectStdErr");
                    }
                }
                finally
                {
                    frame.SafePop();
                }
            }
        }
Пример #3
0
 internal static void RegisterCounterpart(JniEnvironment environment, Type counterpartType)
 {
     JniLocalFrame frame = environment.CreateLocalFrame(1);
     try
     {
         JniClass peer = GetJavaPeer(environment, counterpartType);
         RegisterCounterpart(environment, peer, counterpartType);
     }
     finally
     {
         frame.SafePop();
     }
 }
Пример #4
0
 internal static JniClass GetJavaPeer(JniEnvironment environment, Type counterpartType)
 {
     string peerClassName = FindJavaPeerClassName(counterpartType);
     JniLocalFrame frame = environment.CreateLocalFrame(1);
     try
     {
         JniClass peer = JniClass.FindClass(environment, JniClass.ToJniClassName(peerClassName));
         return frame.Pop(peer) as JniClass;
     }
     finally
     {
         frame.SafePop();
     }
 }
Пример #5
0
 public static string[] ExtractStringArray(JniEnvironment environment, JniObjectArray objectArray)
 {
     VerifyEnvironment(environment);
     VerifyInputJniObject(objectArray);
     int length = objectArray.GetArrayLength(environment);
     string[] output = new string[length];
     JniLocalFrame frame = environment.CreateLocalFrame(length);
     try
     {
         for (int i = 0; i < length; i++)
         {
             JniObject o = objectArray.GetObjectArrayElement(environment, i);
             output[i] = (o == null) ? null : o.ExtractStringValue(environment);
         }
     }
     finally
     {
         frame.SafePop();
     }
     return output;
 }
Пример #6
0
 internal static JniClass RegisterCounterpartAndReturnPeer(JniEnvironment environment, Type counterpartType)
 {
     JniLocalFrame frame = environment.CreateLocalFrame(1);
     try
     {
         JniClass peer = GetJavaPeer(environment, counterpartType);
         RegisterCounterpart(environment, peer, counterpartType);
         return frame.Pop(peer) as JniClass;
     }
     finally
     {
         frame.SafePop();
     }
 }
Пример #7
0
        internal static string ExtractStackTrace(JniEnvironment environment, JniThrowable throwableObj)
        {
            JniLocalFrame frame = environment.CreateLocalFrame(10);
            try
            {
                // construct ByteArrayOutputStream
                JniClass baosClazz = JniClass.FindClass(environment, "java/io/ByteArrayOutputStream");
                JniConstructor baosCtorMid = baosClazz.GetConstructorId(environment, "()V");
                JniMethod baosFlushMid = baosClazz.GetMethodId(environment, "flush", "()V");
                JniMethod baosToStringMid = baosClazz.GetMethodId(environment, "toString", "()Ljava/lang/String;");
                JniObject baosObj = baosCtorMid.NewObject(environment, null);

                // construct PrintStream
                JniClass psClazz = JniClass.FindClass(environment, "java/io/PrintStream");
                JniConstructor psCtorMid = psClazz.GetConstructorId(environment, "(Ljava/io/OutputStream;)V");
                JValue[] ps_paramArray = new JValue[1];
                ps_paramArray[0].AssignObjectValue(baosObj);
                JniObject psObj = psCtorMid.NewObject(environment, ps_paramArray);

                // call printStackTrace
                JniClass throwableClazz = throwableObj.GetObjectClass(environment);
                JniMethod throwablePSTMid = throwableClazz.GetMethodId(environment, "printStackTrace", "(Ljava/io/PrintStream;)V");
                JValue[] t_paramArray = new JValue[1];
                t_paramArray[0].AssignObjectValue(psObj);
                throwablePSTMid.CallVoidMethod(environment, throwableObj, t_paramArray);

                // flush ByteArrayOutputStream & get string
                baosFlushMid.CallVoidMethod(environment, baosObj, null);
                string stackTrace = baosToStringMid.CallStringMethod(environment, baosObj, null);

                return stackTrace;
            }
            finally
            {
                frame.SafePop();
            }
        }
Пример #8
0
 private static string[] GetJavaPropertyNames(JniEnvironment environment, JniClass systemClazz)
 {
     JniLocalFrame frame = environment.CreateLocalFrame(6);
     try
     {
         JniMethod getPropsMid = systemClazz.GetStaticMethodId(environment, "getProperties", "()Ljava/util/Properties;");
         JniObject propsHandle = getPropsMid.CallStaticObjectMethod(environment, null);
         JniClass propsClazz = propsHandle.GetObjectClass(environment);
         JniMethod keySetId = propsClazz.GetMethodId(environment, "keySet", "()Ljava/util/Set;");
         JniObject setHandle = keySetId.CallObjectMethod(environment, propsHandle, null);
         JniClass setClazz = setHandle.GetObjectClass(environment);
         JniMethod toArrayId = setClazz.GetMethodId(environment, "toArray", "()[Ljava/lang/Object;");
         JniObjectArray arrayHandle = (JniObjectArray)toArrayId.CallObjectMethod(environment, setHandle, null);
         string[] keyNames = JniString.ExtractStringArray(environment, arrayHandle);
         return keyNames;
     }
     finally
     {
         frame.SafePop();
     }
 }
Пример #9
0
 public static JniObjectArray PackStringArray(JniEnvironment environment, string[] input)
 {
     VerifyEnvironment(environment);
     VerifyInputObject(input); // OK if array is empty
     FaultStatics(environment);
     JniObjectArray array = JniObjectArray.NewObjectArray(environment, input.Length, mStringClass, null);
     for (int i = 0; i < input.Length; i++)
     {
         JniLocalFrame frame = environment.CreateLocalFrame(2);
         try
         {
             string theString = input[i];
             JniString sh = (theString == null) ? null : JniString.NewString(environment, theString);
             array.SetObjectArrayElement(environment, i, sh);
         }
         finally
         {
             frame.SafePop();
         }
     }
     return array;
 }