1

私はAndroidNDKを使用して、アプリケーションで1つのc++ライブラリを使用しています。アプリケーションを実行すると、コードを何度もチェックしたというエラーメッセージが常に表示されましたが、java.lang.UnsatisfiedLinkError: Native method not found.何も見つかりませんでした。さらに、別のエラーメッセージが表示されました。No rule to make target all.

LOCAL_C_INCLUDES += ${NDKROOT}/sources/cxx-stl/stlport/stlport

LOCAL_PATH := $(call my-dir)

LOCAL_ALLOW_UNDEFINED_SYMBOLS = true
include $(CLEAR_VARS)
LOCAL_MODULE := my-module-jni
LOCAL_SRC_FILES := $(wildcard $(LOCAL_PATH)/*/*.cpp)
include $(BUILD_SHARED_LIBRARY)

extern "C" {
JNIEXPORT jstring JNICALL
Java_com_test_ndk_MyClassName_test
(JNIEnv *env, jobject obj)
{
    return env->NewStringUTF("Hello from C++ over JNI!");
}
    }
    public class MyClassName extends Activity{
    public static native String test();
    ......
    }

私のjniフォルダーには、多くのc++クラスとフォルダーがあります。問題は私のandroid.mkファイルだと思います。android.mkファイルで何を変更する必要がありますか?

4

2 に答える 2

0

コメントで、コードは小さなテストアプリケーションでは機能するが、大きなアプリケーションでは機能しないと述べている場合は、次のように、大きなアプリケーションが実際にJavaアクティビティでライブラリをロードしていることを確認してください。

// Load the .so
static {
    System.loadLibrary("libmy-jni-module");
}
于 2012-12-19T14:47:06.700 に答える
0

メソッドの名前が正しくないようです。Javaから呼び出しているメソッドの名前とC/C++のメソッドの名前を教えてください。

編集:これには詳細情報が含まれている可能性があります:http://www.netmite.com/android/mydroid/2.0/development/ndk/docs/ANDROID-MK.TXT仕様では、LOCAL_PATHを最初の行に含める必要があると述べています。また、隠された空白を探します。

于 2012-12-19T05:12:48.127 に答える