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; }
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(); } } }
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(); } }
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(); } }
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; }
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(); } }
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(); } }
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(); } }
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; }