0

Monodroid プロジェクトでは、クラスでプライベート メソッドを呼び出せるようにする必要があります。関連する質問 の回答から、これはリフレクションを介して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モノドロイドでは利用できません。ただし、Monodroid プロジェクトから JNI を使用してこのコードを実行できることが提案されています。Xamarinのドキュメントには、JAR 全体をバインドしなくてもインライン JNI が可能であると記載されています。残念ながら、これ以上のドキュメントでは、この件についてこれ以上何も述べていません。さらに、JNIEnv に関するドキュメントは空白です。

が必要なようですがJNIEnv.CallVoidMethod()、やり方がわかりません。例や詳細なドキュメントが見つかりません。

Monodroid プロジェクトで使用java.lang.reflectしたり、他の方法でプライベート メソッド.createPipeを呼び出したりするにはどうすればよいParcelFileDescriptorですか?

4

2 に答える 2

0

で C# リフレクションを使用しようとしましたAndroid.OS.ParcelFileDescriptorか?

http://docs.mono-android.net/index.aspx?link=T%3AAndroid.OS.ParcelFileDescriptor

私はまだ試していませんが、Mono for Android が Java クラスのプライベート メンバーをラップするだけであれば、C# リフレクションを使用するだけで十分かもしれません。

これが失敗した場合は、JNI の試行を続行できます。

于 2012-09-27T09:03:01.433 に答える