我现在只想在手机上能够用jni显示helloworld就可以了,我按网上的步骤完成后,在手机上显示时总是死机。
我首先得是一个helloNDK
package com.example.ndktest;
public class helloNDK {
/**
* @param args
*/
static{
System.loadLibrary("NDKtest");
}
public native String sayHello();
}
然后就是生成类文件还有.h文件。然后编写C文件
#include "com_example_ndktest_helloNDK.h"
JNIEXPORT jstring JNICALL Java_com_example_ndktest_helloNDK_sayHello
(JNIEnv *env, jobject thiz){
return (*env)->NewStringUTF(env,"Hello,Welcome to NDK");
}
然后就是生成.so文件,在过程中没有报错。生成的是“libNDKtest.so”动态库。
然后是test代码:
package com.example.ndktest;
import android.app.Activity;
import android.os.Bundle;
public class test extends Activity {
/**
* @param args
*/
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
helloNDK obj = new helloNDK();
String str = obj.sayHello();
setTitle("[" + str + "]");
}
}
但最后在手机上显示不了,自动关机。求问为什么???
我的java太差,几乎为0,是不是java代码的错啊,但我几乎是照着例子打的。
我重新建了其他几个工程,其结果还是一样的。
------解决方案--------------------
mk文件里面的LOCAL_MODULE项是你编译出来so库的名字
看代码好像没啥问题
看你下你的so库放在你的工程哪个目录下的.
------解决方案--------------------
其所加载的是helloNDK,例子的出的动态库文件时libhelloNDK.so,而我用make APP=NDKtest -B命令得出却是libNDKtest.so文件,所以在上面的加载我改成了NDKtest
static{
System.loadLibrary("helloNDK");
}
根据上面2句你提供的信息,你的.mk文件中
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/helloNDK
LOCAL_MODULE := helloNDK
LOCAL_SRC_FILES := \
helloNDK/helloNDK.cpp
LOCAL_LDLIBS := -llog
include $(BUILD_SHARED_LIBRARY)
至少应该这样。。
------解决方案--------------------
我试了一下可以哦
Hellondk.java
package com.example.hellondk;
public class Hellondk {
static{
System.loadLibrary("helloNDK");