eclipse使用jni时出现出现了几个问题,如下, 1、ANDROID_LOG_DEBUG也遇到过,要是添加过头文件,在eclipse的Problems中直接删除错误就可以了。 2、如果你的库文件由c代码生成的,则在c++代码中链接库中的函数时,也会碰到undefined reference的问题。下面举例说明。 原因就是main.cpp为c++代码,调用了c语言库的函数,因此链接的时候找不到,解决方法:即在main.cpp中,把与c语言库test.a相关的头文件包含添加一个extern "C"的声明即可。或者c++调用c语音的代码,在c++ 中include c的头文件是,对头文件加上 extern "C"{ #include "c_include.h" }。 3、java 和 c之间数据的传递可以通过byte[] 到jbyteArray 再到jbyte*( 强制转化为char*)的过程完成。process是java给jni数据,getdata是java给jni一个buffer,填满buffer后返回java。 { jbyte *jbPcm = (jbyte*)env->GetByteArrayElements(pcmBuffer, 0); LOGD("ASR:process."); return process((char*)jbPcm, bufsize, ns_switch); } JNIEXPORT void Java_com_samsung_strdemo_Jnivad_getdata(JNIEnv * env, jobject thiz, jbyteArray data) { LOGD("ASR:getdata."); jbyte *jbdata = (jbyte*)env->GetByteArrayElements(data,0); LOGD("ASR:getdata 1."); getdata((char*)jbdata); LOGD("ASR:getdata 2."); env->ReleaseByteArrayElements(data, jbdata, 0); LOGD("ASR:getdata over."); } 4、编译v7a的so文件,可以通过,新建Application.mk文件,写下APP_ABI := armeabi-v7a 。 # The ARMv7 is significanly faster due to the use of the hardware FP APP_ABI := armeabi-v7a #APP_STL := gnustl_static #APP_ABI := armeabi x86 #APP_ABI := armeabi armeabi-v7a 5、注意AndroidManifest.xml的权限配置 和 project.properties写到android api的高低。 |
|
来自: 520jefferson > 《java/android》