タグ

ブックマーク / blog.malrone.info (2)

  • 【Android NDK】JNIEnv*の問題 - ニャッキ格闘列伝

    現在テストしているプログラムを実行していると たまに落ちることがありました。 よく調べていくとJNIEnv*の位置が変わっていました。 現在の手順としては、起動時にJNIをたたき、引数で渡されたJNIEnv*をグローバルに 保存して使いまわすという方向でやっていました。 危険だとはわかっていましたがやはりガベコレの関係か場所が変わってしまうっぽいです。 JNIEnv*がないとCからJavaを呼び出すことができないのでどうにかすれば 取得できるだろうと思いいろいろと探してみました。 通常のJNIでは、JNI_GetCreatedJavaVMs関数を使用しJavaVM*を取得し、 これのメソッドのGetEnv関数を使用するとできるらしい。 Link:JNI JavaVMメモ(Hishidama's Java native interface JVM Memo) 試してみたところ、リンク時にエラ

    【Android NDK】JNIEnv*の問題 - ニャッキ格闘列伝
  • 【Android NDK】C側からJavaのプログラムを呼び出す - ニャッキ格闘列伝

    /** * c側からjavaを呼び出すテスト * JnitestActivity.callJniを呼び出す */ jvoid Java_test_jni_JnitestActivity_callbackJNI( JNIEnv* env, jobject thiz ) { //クラス取得 jclass jcls = (*env)->GetObjectClass( env, thiz ); //メソッド取得 jmethodID mj = (*env)->GetMethodID( env, jcls, "callJni", "()V"); //メソッド呼び出し (*env)->CallObjectMethod( env, thiz, mj ); } 1. クラス情報を取得する まずは対象となるjclassを取得する必要がある。 対象オブジェクトがあるときはGetObjectClass、 名前で指

    【Android NDK】C側からJavaのプログラムを呼び出す - ニャッキ格闘列伝
  • 1