jni的使用方法】的更多相关文章

转载请注明本文出处:http://www.cnblogs.com/xl19862005 作者:Xandy 由于工作的需要,最近一直在研究HAL.JNI.Java方法之间互调的问题,并做了如下一些记录和大家一起分享! 工作背景:所调试的是一款叫goc-md-102的车载蓝牙模块,由于这款蓝牙模块无法直接用HCI的方式控制,而它已经有了现成的一套AT命令集进行控制,所以我在HAL中直接通过串口读写的方式进行通信,然后通过JNI和java层建立联系. 考虑到效率的问题,我在HAL中用回调函数的方式通过…
Android中JNI的使用方法 首先看一下Android平台的框架图:(网上盗用) 可以看到Android上层的Application和ApplicationFramework都是使用Java编写, 底层包括系统和使用众多的LIiraries都是C/C++编写的. 所以上层Java要调用底层的C/C++函数库必须通过Java的JNI来实现. 下面将学习Android是如何通过Jni来实现Java对C/C++函数的调用.以HelloWorld程序为例: 第一步: 使用Java编写HelloWor…
经常使用java的同学一定都接触过JNI(Java Native Interface)吧.JNI为我们提供了java<---->C/C++之间的接口,使得我们可以在java中调用C程序,以便实现一些计算复杂度较高的程序(如图像处理.信号处理等).另外,也方便我们使用很多优秀的C库. 使用javah生成本地方法头文件 JNI怎么使用在这里我就不介绍了.今天主要来说一下JNI的本地方法头文件如何生成,以及怎么方便地在eclipse中一键生成.当你使用JNI时,需要在你的java程序中声明一个类,并…
android开发源代码分析--多个activity调用多个jni库的方法 有时候,我们在开发android项目时会遇到须要调用多个native c/jni库文件,下面是本人以前实现过的方法,假设有知道其它方法,还望不吝不吝赐教. 比如,在androidproject里有两个activity,各自是activity1和activity2.(能够进入project文件夹bin/classes路径下查看有哪些).在这两个activity里都有调用jni,过程例如以下: 1.  在activity1和…
在上一篇文章中介绍了JNI.以及java调用JNI.这篇讲一下 JNI调用java方法. 通过使用合适的JNI函数,你能够创建Java对象,get.set 静态(static)和 实例(instance)的域,调用静态(static)和实例(instance)函数. JNI通过ID识别域和方法.一个域或方法的ID是不论什么处理域和方法的函数的必须參数. 下表列出了用以得到静态(static)和实例(instance)的域与方法的JNI函数.每一个函数接受(作为參数)域或方法的类,它们的名称,符号…
Android中JNI的使用方法 首先看一下Android平台的框架图:(网上盗用) 可以看到Android上层的Application和ApplicationFramework都是使用Java编写, 底层包括系统和使用众多的LIiraries都是C/C++编写的. 所以上层Java要调用底层的C/C++函数库必须通过Java的JNI来实现. 下面将学习Android是如何通过Jni来实现Java对C/C++函数的调用.以HelloWorld程序为例: 第一步: 使用Java编写HelloWor…
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css); 准备工作: 1.需要安装JDK,我使用的是JDK 1.7.0: 2.安装NDK,我使用的是android studio 自动下载的版本: 现在开始实现这个调用过程: 1.新建一个工程:MyJNITest activity_main.xml(用于显示测试结果): 2.在…
1首先在java里面定义你需要的native方法 2打开cmd,进入doc窗口,如果是android项目就进入到你当前项目的bin目录下,在doc里面输入cd E:\workspace\Test1 也就是进入你项目的所在地, 3.然后在当前项目的根目录创建一个名为jni的目录,用于存储头文件,so库等等 4.在doc里面输入 javah -classpath bin\classes -d jni com.example.test1.MainActivity 生成头文件 5.在你创建好的jni目录…
我们可以通过jni来调用c/c++程序,C/C++一般会被作为动态库的形式来供java程序调用 环境 操作系统:Centos6.7 java: openjdk7 依赖包:java7-devel(yum install -y java7-devel) java程序 在hava程序中会调用本地方法,而这个本地方法使用C语言实现的. public class HelloWorld{ static { System.loadLibrary("Hello"); } public native v…
1.配置NDK 1.1 下载NDK Android Studio 1.2 配 android-ndk-r10e,不同版本的Studio需要配置不同的ndk,下载完成后,随便解压放至某个文件目录下 1.2 指定NDK目录 1.3 修改build.gradle配置 需要修改的是在<Project>\app\build.gradle 2. 添加native接口 2.1 添加native 2.2 执行build -> Make Project 确定程序无错误,并生成.class文件 2.3 通过…
昨天拿到JNI的Android工程Demo,然后把demo整合到开发的主线工程上,发现调用JNI方法一直抛同一个异常 java.lang.UnsatisfiedLinkError: XXXclass.XXXmethod() 我以为是JNI的so库有问题,但是demo运行时正常的,我无法找到原因的所在.我可以确认的我自己的问题,今天上午问到另外一个写C的同事,向他描述了我的情况.然后他问我是不是包名不一致的原因,我恍然大悟.确实在我移植到主线上的工程时,将定于调用JNI的包名改掉了.而so库在编译…
1. JDK1.6 ,进入到工程的bin目录下classes目录下: 使用命令: javah  packageName.ClassName 会在当前目录下生成头文件,从头文件找到jni协议方法 下面举例演示: (1)进入"02_两个数相加"工程,如下: (2)进入到bin/classes目录下,如下: (3)直接在路径栏输入cmd,然后回车如下: 如下进入工程的bin/classes/目录下,如下所示: (4)使用命令: javah  packageName.ClassName(即可)…
1.JNI是什么 JNI是Java Native Interface的缩写,它提供若干的API实现Java与其他语言之间的通信.而Android Framework由基于Java语言的的Java层与基于C/C++语言的C/C++层组成,每个层中的功能模块都是以有相应的语言编写,并且两层中的大部分模块有着千丝万缕的联系.而在两层之间充当连接桥梁这一角色的就是JNI,它允许Java代码和C/C++编写的应用程序与库之间进行交互:通常在以下几种情况下使用JNI 1.注重处理速度,C/C++的处理速度要…
1首先在java里面定义你需要的native方法 2打开cmd,进入doc窗口,如果是android项目就进入到你当前项目的bin目录下,在doc里面输入cd E:\workspace\Test1 也就是进入你项目的所在地, 3.然后在当前项目的根目录创建一个名为jni的目录,用于存储头文件,so库等等 4.在doc里面输入 javah -classpath bin\classes -d jni com.example.test1.MainActivity 生成头文件 5.在你创建好的jni目录…
相对于NDK来说SDK里面有更多API可以调用,有时候我们在做NDK开发的时候,需要在JNI直接Java中的方法和变量,比如callback,系统信息等.... 如何在JNI中调用Java方法呢?就需要先了解FindClass和GetMethodID了. FindClass和GetMethodID 在JNI中可以通过FindClass可以找到Java类,得到jclass,例如: jclass clz=(*env)->FindClass(env,"com/jjz/JniHandle"…
1.JNI是什么 JNI是Java Native Interface的缩写,它提供若干的API实现Java与其他语言之间的通信.而Android Framework由基于Java语言的的Java层与基于C/C++语言的C/C++层组成,每个层中的功能模块都是以有相应的语言编写,并且两层中的大部分模块有着千丝万缕的联系.而在两层之间充当连接桥梁这一角色的就是JNI,它允许Java代码和C/C++编写的应用程序与库之间进行交互:通常在以下几种情况下使用JNI 1.注重处理速度,C/C++的处理速度要…
1. JDK1.6 ,进入到工程的bin目录下classes目录下: 使用命令: javah  packageName.ClassName 会在当前目录下生成头文件,从头文件找到jni协议方法 下面举例演示: (1)进入"02_两个数相加"工程,如下: (2)进入到bin/classes目录下,如下: (3)直接在路径栏输入cmd,然后回车如下: 如下进入工程的bin/classes/目录下,如下所示: (4)使用命令: javah  packageName.ClassName(即可)…
JNA全称是Java Native Access,是Sun推出的一种调用本地方法技术,比起它的同门师兄JNI,JNA大大简化了调用本地方法的过程,使用也比较方便, JNA是在JNI的基础上完善的,用青出于蓝而胜于蓝来形容一点不为过,下面看一下JNI的调用过程:   使用JNI你得完成上面这些步骤,比较麻烦,而是用JNA就省事多了,基本上不需要脱离Java环境就可以完成.     JNA项目主页是https://jna.dev.java.net/, 目前最新的版本是3.2.4 .下载时记得将自带的…
可以看到Android上层的Application和ApplicationFramework都是使用Java编写,底层包括系统和使用众多的LIiraries都是C/C++编写的. 所以上层Java要调用底层的C/C++函数库必须通过Java的JNI来实现. 1.众所周知,Android的应用层的类都是以Java写的,这些Java类编译为Dex文件之后,必须靠Dalvik虚拟机( Virtual Machine)来执行.假如在执行java程序时,需要载入C&C++函数时,Dalvik虚拟机就会去加…
听周围的人说,看网上的人说eclipse有多么神奇.我不禁好奇万分,于是自己就去eclipse官网下载一个软件.咱也来用用,满怀兴奋的心情,一运行eclipse结果 出现下图的错误提示:“Failed to load the JNI shared library jvm.dll”错误:心情瞬间就一落万丈,又想揍人的冲动.带着闷闷的心情,在网上东找西找,找 大神求助.终于在折腾一个多小时之后,泪流满面的运行起eclipse. 分析问题: 当我们看到如上图图的“Failed to load the…
背景需求 我们需要在JNI的C代码调用Java代码.实现原理:使用JNI提供的反射借口来反射得到Java方法,进行调用. JNI关键方法讲解. 1. 在同一个类中,调用其他方法 JNIEXPORT void JNICALL Java_cn_itcast_ndkcallback_DataProvider_callmethod1 (JNIEnv * env, jobject obj){ //在c代码里面调用java代码里面的方法 // java 反射 //1 . 找到java代码的 class文件…
1.创建xxx.jni包并在该包下实现一些Java的方法,和要调用的本地方法 2.实现MainActivity中的按钮点击事件-即点击按钮调用本地的方法 3.在C文件中的方法中回调Java的方法 3.1:通过env获取字节码对象->jclass   (*FindClass)(JNIEnv*, const char*) 第二个参数为要回调Java方法所在类的全路径如:jclass claz = (*env)->FindClass(env, "com/rocky/jniccallback…
我们知道,使用javah产生c/c++当在头文件,将java定义 native 功能,以产生相应jni层功能,如下面: /* * Class: com_lms_jni_JniTest * Method: getTestString * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_lms_jni_JniTest_getTestString (JNIEnv *, jobject); 我们能够看到方法名是以…
[转]对于JNI方法名,数据类型和方法签名的一些认识   之前一直用jni,但是没有考虑Java重载函数,如何在jni-C++里命名,今天看到一篇文章,讲到了类型签名. 原文链接:http://www.2cto.com/kf/201405/302263.html 我们知道,利用javah生成的c/c++头文件的时候,会对java中定义的 native 函数生成对应的jni层函数,如下: 1 2 3 4 5 6 7 /*  * Class:     com_lms_jni_JniTest  * M…
本文我们来总结一下JNI 提供的功能列表及相关的函数表. 注意:请注意使用术语“必须”来描述对JNI程序员的限制.例如,当您看到某个JNI函数必须接收非NULL对象时,您有责任确保不将NULL传递给该JNI函数.因此,JNI实现不需要在该JNI函数中执行NULL指针检查. 一.接口方法表 可以通过JNIEnv参数以固定偏移量访问每个函数.JNIEnv的类型是一个指向存储所有JNI函数指针的结构.它的定义如下: typedef const struct JNINativeInterface * J…
背景需求 我们需要在JNI的C代码调用Java代码.实现原理:使用JNI提供的反射借口来反射得到Java方法,进行调用. JNI关键方法讲解. 1. 在同一个类中,调用其他方法 JNIEXPORT void JNICALL Java_cn_itcast_ndkcallback_DataProvider_callmethod1 (JNIEnv * env, jobject obj){ //在c代码里面调用java代码里面的方法 // java 反射 //1 . 找到java代码的 class文件…
在上一篇的基础上,添加在C++代码中回调java方法. 代码如下: Demo.java 中添加callback函数, 打印一条log. package com.example.scarecrow.dynamicregisterjni; import android.util.Log; public class Demo { public static final String TAG = "Demo"; static { System.loadLibrary("JniTest…
native方法定义: 简单地讲,一个Native Method就是一个java调用非java代码的接口.一个Native Method是这样一个java的方法:该方法的实现由非java语言实现,比如C.这个特征并非java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern "C"告知C++编译器去调用一个C的函数. VM怎样使Native Method跑起来:    我们知道,当一个类第一次被使用到时,这个类的字节码会被加载到内存,并且只会回载一次.在这个被…
相关文章 Android深入理解JNI系列 前言 上一篇文章介绍了JNI的基本原理和注册,这一篇接着带领大家来学习JNI的数据类型转换.方法签名和JNIEnv. 1.数据类型的转换 首先给出上一篇文章中android_media_MediaRecorder.cpp中的android_media_MediaRecorder_start方法: frameworks/base/media/jni/android_media_MediaRecorder.cpp static void android_m…
错误描述 今天使用第三方的so库时候,调用JNI方法时出现了错误.报错如下所示: 11-01 16:39:20.979 4669-4669/com.netease.xtc.cloudmusic E/art: No implementation found for void com.netease.xtc.cloudmusic.utils.NeteaseMusicUtils.nativeInit(android.content.Context) (tried Java_com_netease_xt…