`
wb284551926
  • 浏览: 551611 次
文章分类
社区版块
存档分类
最新评论

JNI笔记

    博客分类:
  • JNI
JNI 
阅读更多

/* 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包路径,类的包路径要和生成头文件类包路径一致

分享到:
评论

相关推荐

    JNI笔记(GCC4.4.0编译器)

    本笔记主要围绕使用GCC 4.4.0编译器来实现JNI开发进行详细阐述。 首先,我们需要理解JNI的基本结构。JNI接口定义了一套函数,这些函数由Java虚拟机(JVM)提供,使得本地代码(如C/C++)能够与Java代码进行通信。当...

    JNI笔记的相关内容

    ### JNI技术概述与应用 #### 一、为什么学习JNI? JNI(Java Native Interface)技术能够增强Java虚拟机的功能,使得Java程序能够直接调用本地语言(如C或C++)编写的函数。这对于提高程序性能、实现特定硬件访问...

    jni相关文档以及代码

    1. "JNI笔记.md" - 这可能是一个Markdown格式的文档,详细记录了关于JNI的学习笔记,包括基本概念、使用方法、示例代码等。 2. 图片文件(如2016-12-16_22-43-53.png等) - 可能是图形化的步骤说明,代码截图,或者...

    JNI学习笔记.doc

    ### JNI学习笔记详解 #### 一、JNI简介 JNI(Java Native Interface)是Java平台提供的一种强大机制,它允许Java程序直接调用本地代码(通常是C或C++编写)。这为Java应用程序带来了额外的灵活性,使得开发者能够...

    黑马程序员JNI学习笔记

    针对所有初学JNI的人员的一个最全面的笔记,对于有过基础的朋友来说又是一个更好的助手. 省去了你自己去总结的时间,有更多的时间去敲代码. ------------黑马程序员学员-------------------

    android JNI 学习笔记.doc

    ### Android JNI 学习笔记详解 #### 一、JNI简介 JNI(Java Native Interface)即Java本地接口,是Java平台标准的一部分,它允许Java代码和其他语言(如C、C++等)编写的本地代码进行交互。在Android开发中,通过...

    java与c++交互(JNI学习笔记)

    ### Java与C++交互(JNI学习笔记) #### 一、Java类型与C/C++类型对应关系 在Java Native Interface (JNI) 中,Java 和 C/C++ 的数据类型有着明确的对应关系。理解这些对应关系是实现Java与C++交互的基础。 - **...

    Android JNI 学习笔记

    做为Android JNI还未入门的同志们,我这个总结的文档对你们真的很有用处,几乎大部分常规的Java访问C/C++以及C/C++访问Java的内容都包含在内。

    关于JNI详解及笔记

    JNI,全称Java Native Interface,是Java平台标准的一部分,它为Java程序员提供了一种方法,可以在Java代码中调用本地(非Java)代码,反之亦然。JNI在Android开发中尤其重要,因为许多系统级功能和性能优化都依赖于...

    Android学习笔记含JNI、USB和ftdi通信方式详解

    ### Android学习笔记含JNI、USB和ftdi通信方式详解 #### 项目四:多线程文件下载 在Android开发中,文件下载是一个常见的需求。利用多线程技术可以提高文件下载的速度,尤其在网络条件较差的情况下更为明显。多...

    JNI CHM 文档查询 编程规范

    "biji.txt"可能是笔记、日志或其他辅助资料,它可能包含了一些开发者在学习和使用JNI过程中记录的信息。 总的来说,这个压缩包提供了一个全面的学习资源,涵盖了JNI的基础知识、调用流程、编程规范和实例,适合...

    一个简单的Jni工程包括个人学习笔记

    这个压缩包“一个简单的Jni工程包括个人学习笔记”显然是一份关于JNI开发的学习资料,对于想要深入理解或初次接触JNI的开发者来说非常有价值。 JNI的核心在于提供了一种方式,使得Java代码能够调用本地(native)...

    开发笔记Jni,使用gradle-experimental

    标签中的“android studio”表明这是在Android Studio开发环境下的操作,而“jni”是主要的关注点,意味着这篇开发笔记专注于Android原生接口的使用。 至于压缩包文件“MyJni”,它很可能包含了作者在博客中提到的...

    JNI资料,笔记 (个人资料)

    本人从网上收集的一些关于JNI学习的资源,呵呵

    JNI与Java方法的相互调用

    本笔记主要探讨如何通过JNI实现Java方法与本地(Native)方法的相互调用。 首先,理解JNI的基本结构是至关重要的。JNI接口定义了一组函数,Java代码可以通过这些函数调用本地方法,反之,本地方法也可以通过这些...

Global site tag (gtag.js) - Google Analytics