【发布时间】:2013-10-01 17:39:45
【问题描述】:
在 Monodroid 项目中,我需要能够调用类的私有方法。从 an answer on a related question 看来,这在 Java 中似乎可以通过反射实现:
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import android.os.ParcelFileDescriptor;
...
ParcelFileDescriptor pipe[] = null;
try {
Method createPipeMethod = ParcelFileDescriptor.class.getDeclaredMethod("createPipe");
pipe = (ParcelFileDescriptor[]) createPipeMethod.invoke(null);
} catch (NoSuchMethodException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
} catch (InvocationTargetException e) {
throw new RuntimeException(e);
}
我需要使用来自 Monodroid 的这段代码。不幸的是,java.lang.reflect is not available in Monodroid。但是,有人建议我可以使用 Monodroid 项目中的 JNI 运行此代码。 Xamarin documentation states that inline JNI is possible,无需绑定整个 JAR。不幸的是,further documentation 没有就这个主题发表更多意见。此外,documentation on JNIEnv 是空白的。
看起来我需要JNIEnv.CallVoidMethod(),但我不知道该怎么做。我找不到示例或更多文档。
如何在我的 Monodroid 项目中使用 java.lang.reflect,或者以其他方式调用 ParcelFileDescriptor 上的私有方法 .createPipe?
【问题讨论】:
标签: c# java java-native-interface xamarin.android jnienv