【发布时间】:2016-06-24 06:20:01
【问题描述】:
我是 JNI 和 Android 的新手。我想从本机代码返回一个字符串值,但它在执行时返回一些随机数。我无法理解我做错了什么。
我的“ndk.c”文件:
int Java_com_example_mayankvijh_test_1app_MainActivity_main(){
return 3;
}
jstring JNICALL Java_com_example_mayankvijh_test_1app_MainActivity_getMessage(JNIEnv *env, jobject thiz) {
return (*env)->NewStringUTF(env,"HELLO");
}
我的 MainActivity.java
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try{
System.loadLibrary("wrapper");
}catch(Exception e)
{
e.printStackTrace();
}
System.out.println("main return =" + main());
System.out.println("Hi " + getMessage());
}
public native int main();
public native int getMessage();
我已成功加载库(“.so”),我能够返回类型 jint 并显示在应用程序中,但不知何故 jstring 返回随机数。
我的原生 main 函数正在返回 int 并且正在工作,但是对于我的 getMessage() 函数,字符串没有返回
getMessage() 的输出:
Hi -429916127
我的应用程序.mk
APP_ABI := armeabi-v7a
APP_PLATFORM := android-9
我的 Android.mk
LOCAL_PATH:=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := wrapper
LOCAL_C_INCLUDES := $(LOCAL_PATH)
LOCAL_SRC_FILES := ndk.c
LOCAL_LDLIBS := -landroid
#--llog -lz
include $(BUILD_SHARED_LIBRARY)
感谢您的帮助。
【问题讨论】:
-
使用
jobject thiz而不是jclass cls参考这个developer.android.com/ndk/samples/sample_hellojni.html -
我都试过了,它返回的是随机负数。目前它返回'Hi -253755359'
-
JNIEXPORT删除这个关键字。 -
现在它返回正数 'Hi 97517601' 但不是字符串
标签: java android c java-native-interface