9

Linux および Android NDK 用の Android SDK バンドルをダウンロードしました。ADTをインストールしたので、CDTをインストールしました。

Android プロジェクトを作成し、ネイティブ サポート (jni) を追加しました。次に、C++ コードでエクスポートするネイティブ関数を Java コードで記述しました。C++ コードで、この関数を定義しました。

Java コード:

static {
    System.loadLibrary("test");
}

private native String get_text_from_cpp();

C++ コード (h):

extern "C"{
   JNIEXPORT jstring JNICALL Java_com_example_test_MainActivity_get_1text_1from_1cpp(JNIEnv *, jobject);
}

C++ コード (cpp):

JNIEXPORT jstring JNICALL Java_com_example_test_MainActivity_get_1text_1from_1cpp(JNIEnv * env, jobject){
    return env->NewStringUTF( "hello from C++" );
}

コードはエラーなしで機能します。しかし、C++ コードでブレークポイントを設定すると、ヒットしません。

build-nkd NDK_DEBUG = 1 - 含まれています

この指示に従いましたhttp://tools.android.com/recent/usingthendkplugin

jni/ の Android.mk には LOCAL_CFLAGS があります := -g

非常に多くの情報を読みましたが、Eclipse をカスタマイズできませんでした。誰か助けてください。

PS: 私の英語が母国語でなくてすみません。私は書くのが苦手です。

追加: コンソールでのデバッグ中にも次のように表示されます。 search-path" または "set sysroot"? 警告: 動的リンカー ブレークポイント関数が見つかりません。GDB は最終的に再試行します。一方、GDB は共有ライブラリ初期化子をデバッグできないか、dlopen() の後に保留中のブレークポイントを解決できない可能性があります。

4

6 に答える 6

0

私はこの問題を抱えていました、そして私のために働いた唯一のことは置くことでした

Thread.sleep(2000);

JNI ライブラリがロードされる前。System.loadLibraryこれにより、呼び出しによってアプリがクラッシュする前に、デバッガーがアタッチするのに十分な時間が与えられました。問題の C++ コードを見つけるのに役立ちました。

于 2015-06-24T20:51:50.290 に答える