/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
#include "com_noitom_util_libKneeBrace.h"
#include <stdlib.h>
#include "KneeBraceAPI.h"
/* Header for class libKneeBrace */
/*
* Class: libKneeBrace
* Method: KBInit
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_noitom_util_libKneeBrace_KBInit
(JNIEnv *, jclass)
{
KBInit();
}
/*
* Class: libKneeBrace
* Method: KBRelease
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_noitom_util_libKneeBrace_KBRelease
(JNIEnv *, jclass)
{
KBRelease();
}
/*
* Class: libKneeBrace
* Method: KBResetStatus
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_noitom_util_libKneeBrace_KBResetStatus
(JNIEnv *, jclass)
{
KBResetStatus();
}
/*
* Class: libKneeBrace
* Method: KBSetHeight
* Signature: (F)V
*/
JNIEXPORT void JNICALL Java_com_noitom_util_libKneeBrace_KBSetHeight
(JNIEnv *, jclass, jfloat height)
{
KBSetHeight(height);
}
/*
* Class: libKneeBrace
* Method: KBPushDailyActivityFrameDataStream
* Signature: ([BI)LActivityResult;
*/
JNIEXPORT jobject JNICALL Java_com_noitom_util_libKneeBrace_KBPushDailyActivityFrameDataStream
(JNIEnv * env, jclass objClass, jbyteArray charArray, jint length)
{
// 获取Java中的实例类
objClass = (env)->FindClass("com/noitom/model/ActivityResult");
// 获取构造方法Methodid
jmethodID m_obj = env->GetMethodID(objClass,"<init>","()V");
// 创建一个新的ActivityResult对象
jobject newobj = env->NewObject(objClass,m_obj);
// 获取ActivityResult类中每一个变量的定义
jfieldID abnormal_index = (env)->GetFieldID(objClass, "abnormal_index", "F");
jfieldID symmetry_index = (env)->GetFieldID(objClass, "symmetry_index", "F");
jfieldID walking_distance = (env)->GetFieldID(objClass, "walking_distance", "F");
jfieldID step_total = (env)->GetFieldID(objClass, "step_total", "I");
jfieldID time_total = (env)->GetFieldID(objClass, "time_total", "I");
jfieldID standing_time = (env)->GetFieldID(objClass, "standing_time", "I");
jfieldID walking_time = (env)->GetFieldID(objClass, "walking_time", "I");
jfieldID effective_time = (env)->GetFieldID(objClass, "effective_time", "I");
jfieldID stairs_storey = (env)->GetFieldID(objClass, "stairs_storey", "I");
jfieldID cycling_time = (env)->GetFieldID(objClass, "cycling_time", "I");
jfieldID cycling_distance = (env)->GetFieldID(objClass, "cycling_distance", "F");
// 复制数组元素到array内存空间
jbyte* data = env->GetByteArrayElements(charArray, NULL);
KBActivityResult result;
if(data != NULL) {
// 调用计算函数
result = KBPushDailyActivityFrameDataStream(data, length);
// 释放资源
env->ReleaseByteArrayElements(charArray, data, JNI_ABORT);
}
// 给ActivityResult对象赋值
(env)->SetFloatField(newobj, abnormal_index, result.abnormal_index);
(env)->SetFloatField(newobj, symmetry_index, result.symmetry_index);
(env)->SetFloatField(newobj, walking_distance, result.walking_distance);
(env)->SetIntField(newobj, step_total, result.step_total);
(env)->SetIntField(newobj, time_total, result.time_total);
(env)->SetIntField(newobj, standing_time, result.standing_time);
(env)->SetIntField(newobj, walking_time, result.walking_time);
(env)->SetIntField(newobj, effective_time, result.effective_time);
(env)->SetIntField(newobj, stairs_storey, result.stairs_storey);
(env)->SetIntField(newobj, cycling_time, result.cycling_time);
(env)->SetFloatField(newobj, cycling_distance, result.cycling_distance);
return newobj;
}
常见错误:
1. java.lang.UnsatisfiedLinkError: no HelloWorld in java.library.path
2. Exception in thread "main" java.lang.UnsatisfiedLinkError: xxx.xxx.HelloWorld.myprint()V
网上总结很多。错误1,主要是没有办法path路径中加载。错误2主要是没有myprint方法,类库加载没有问题。
排除dll本身问题(网上不少人遇到),dll没有问题,加载路径也没有问题,不能连接到方法。这个在命令行的时候不容易发现问题,移到生产环境中容易出现,可能你已经猜到了,HelloWorld.java包路径,类的包路径要和生成头文件类包路径一致。