私はc ++で書かれたクラスを持っています。Java クラスから読み取ることができるように、文字列を返すメソッドを作成したいと考えています。私は次のようなことをしようとしました:
読み取り文字列.cpp:
#include "common.h"
#include <string.h>
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/************
* ReadString *
************/
jstring Java_com_googlecode_leptonica_android_ReadFile__getString(JNIEnv *env, jclass clazz)
{
jstring result = env->NewStringUTF("My String");
return result;
}
#ifdef __cplusplus
}
#endif /* __cplusplus */
読み取り文字列.java:
package com.testjni;
public class ReadString {
static {
System.loadLibrary("lept");
}
public String getText(){
return getString();
}
private static native String getString();
}
アクティビティからの文字列の読み取り:
public class TestJNI extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ReadString readString = new ReadString();
Toast.makeText(this, readString.getText(), Toast.LENGTH_SHORT).show();
}
}
スタックトレースは次のとおりです。
10-16 12:35:09.974: エラー/AndroidRuntime(12303): 致命的な例外: メイン java.lang.UnsatisfiedLinkError: com.testjni.ReadString.getString(ネイティブ メソッド) の getString com.testjni.ReadString.getText(ReadString. java:10) で com.testjni.TestJNI.onCreate(TestJNI.java:13) で android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093) で android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1780) でandroid.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1837) で android.app.ActivityThread.access$1500(ActivityThread.java:132) で android.app.ActivityThread$H.handleMessage(ActivityThread.java:1033) で android. os.Handler.dispatchMessage(Handler.java:99) で android.os.Looper.loop(Looper.java:143) で android.app.com.android.internal.os. ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) at dalvik.system.NativeStart.main(ネイティブ メソッド)
私は何を間違っていますか?