我有一個用C++編寫的類。我想寫一個方法來返回一個字符串,所以我可以從我的Java類讀取它。我試着這樣做:JNI從C++輸出字符串到java
readstring.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 */
Readstring.java:
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();
}
}
和堆棧:
package com.testjni;
public class ReadString {
static {
System.loadLibrary("lept");
}
public String getText(){
return getString();
}
private static native String getString();
}
從活動中讀取字符串跟蹤是:
10-16 12:35:09.974:ERROR/AndroidRuntime(12303):致命例外:main java.lang.UnsatisfiedLinkError:getString at com.testjni.ReadString.getString(Native Method) at com.testjni.ReadString。 get.Text(ReadString.java:10) at com.testjni.TestJNI.onCreate(TestJNI.java:13) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093) at android.app.ActivityThread.performLaunchActivity( Activity.Thread.java:1780) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1837) at android.app.ActivityThread.access $ 1500(ActivityThread.java:132) at android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1033) at android.os .Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:143) at android.app.ActivityThread.main(ActivityThread.java:4196) at java.lang.reflect .Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:507) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:839) at (本地方法)
我在做什麼錯?
的jni文件夾中運行了android-ndk命令,我認爲軟件包名稱是錯誤的。 –
你是對的。謝謝 –
ok @gabi。歡迎。 –