JNI 从0到1
文章平均质量分 61
飞鸟_
积极、主动、正能量!!!
展开
-
JNI编程(AndroidStudio)
先发一个链接:http://zhangleipku.blogspot.com/2016/03/test-ndk-jni-from.html 本文基本是基于上面的文章,在MAC下开发(Windows可能配置略有不同,请自行谷歌),接下来就写一下自己的过程,留个笔记。0.AndroidStudio->Project Structure->SDK Location->Android NDK原创 2016-06-27 17:29:19 · 1470 阅读 · 0 评论 -
JNI从0到1源码
JNIDemo原创 2016-09-29 18:56:01 · 1329 阅读 · 0 评论 -
JNI异常处理
本地代码中如何缓存和抛出异常根据一个例子来介绍: 1.新建一个CatchThrow.javapublic class CatchThrow { public native void doit() throws IllegalArgumentException; private void callback() throws NullPointerException{ t原创 2016-09-29 18:37:28 · 2376 阅读 · 0 评论 -
引用的释放管理
释放引用每一个JNI引用被建立时,除了它所指向的JVM中的对象外,引用本身也会消耗掉一定数量的内存。释放局部引用大部分情况下,实现本地方法时不必担心局部引用的释放问题,因为本地方法被调用完成后,JVM会自动回收这些局部引用。 尽管如此,以下几种情况,为了避免内存溢出,应该手动释放局部引用: 1.在实现一个本地方法调用时,你需要创建大量的局部引用。这种情况啃根会导致JNI局部引用表的溢出,所以最好原创 2016-09-29 15:48:00 · 3457 阅读 · 0 评论 -
全局引用和本地引用
JNI引用类型JNI提供了一些实例和数组类型(jobject、jclass、jstring、jarray等)作为不透明的引用供本地代码使用。本地代码永远不会直接操作引用指向的VM内部的数据内容。要进行这些操作,必须通过使用JNI操作一个不透明的引用来间接操作数据内容。 - JNI支持三种引用:局部引用、全局引用、弱全局引用。 - 局部应用和全局引用有不同的生命周期。当本地方法返回时,局部引用会被原创 2016-09-29 14:40:29 · 2882 阅读 · 0 评论 -
JNI操作JAVA中操作字段和方法的效率
native/java 比起 java/native 和 java/java 来的话,效率如何 呢? 这取决于 VM 的实现。java/native 调用比 java/java 要慢,主要有以下几个原因: 1. java/native 比起 JVM 内部的 java/java 来说有一个调用转换过程,在把控 制权和入口切换给 地方法之前,VM 必须做一些额外的操作来创建参数和栈 帧。 2.原创 2016-09-29 13:26:35 · 1592 阅读 · 0 评论 -
缓存字段和方法ID
获取字段或方法ID时,需要用字段、方法的名字和描述进行一个检索。检索过程比较耗时,可以通过缓存技术来减少这个过程带来的消耗。 缓存字段ID和方法ID的方法主要有两种。 1.使用时缓存 2.定义字段和方法的类静态初始化时缓存使用时缓存字段或方法ID在字段的值被访问或者方法被回调的时候缓存起来。1.先定义两个native方法 //缓存字段(使用时) public native voi原创 2016-09-29 13:15:26 · 2325 阅读 · 0 评论 -
JNI对数组赋值排序,创建数组并返回给Java
创建两个native方法 //传递数组,操作后,返回 public native void passArrayMethod(int[] arr); //创建指定长度数组 public native int[] createArrayMethod(int len);生成对应的c函数JNIEXPORT void JNICALL Java_com_test_git_jnidem原创 2016-09-26 17:04:38 · 11184 阅读 · 0 评论 -
native和static native区别
本文基于Hello JNI 如有疑惑,请看之前几篇文章。native 与 static nativejava中 public native String helloJni(); public native static String helloJniStatic();JNI中JNIEXPORT jstring JNICALL Java_com_test_git_jnidemo_Jni原创 2016-09-26 16:41:48 · 13364 阅读 · 0 评论 -
JNI调用Java构造方法,父类方法
本文基于此项目Hello JNI本文用到的函数:Call< Type>Method, CallNonvirtual< Type>MethodJNIDemo.java创建两个native方法 //访问构造方法 public native void accessConstructMethod(); //访问父类方法 public native void accessParen原创 2016-09-26 16:00:57 · 3209 阅读 · 0 评论 -
JNI获取并修改Java中类的变量和静态变量的值
对于JNI的基本使用请移步:Hello JNI本文主要介绍以下几个函数的使用:GetObjectClassGetFieldID,GetStaticFieldIDGet< Type>Field,GetStatic< Type>FieldSet< Type>Field,SetStatic< Type>Field案例介绍:通过JNI获取并修改Java中类的变量值本文也是基于上面的代码继续添加:JniDem原创 2016-09-24 12:56:43 · 6412 阅读 · 0 评论 -
JNI调用Java中的静态非静态方法
本文基于上文JNI获取并修改Java中类的变量和静态变量的值本文用到的方法:Call< Type>Method, CallStatic< Type>Method案例:JniDemo.java添加一个静态一个非静态方法 //执行方法 public native void accessMethod(); //执行静态方法 public native void accessS原创 2016-09-24 15:09:07 · 4635 阅读 · 1 评论 -
JNI 类型
JNI 定义了一系列的C/C++类型,来对应Java的基本类型和引用类型。C/C++要想使用这些类型,需要在头文件引用jni.h。基本类型下表介绍了Java的基本类型对应的JNI类型。就像Java语言那样,所有JNI的基本类型也都明确定义了其所占的字节数。 Java Language Type Native Type Description boolean jboolean u翻译 2016-09-19 12:50:01 · 2201 阅读 · 0 评论 -
JNI 方法
JNI方法根据定义和用途分为4类。虚拟机安装启用一系列原生方法。这些方法是调用接口的一部分。这些方法可以用来完成一些任务(比如在原生应用中创建虚拟机实例)。JavaVM接口代表一个虚拟机实例。JavaVM接口提供了一些方法(比如允许本地线程添加到虚拟机)。继承了原生方法的的原生library可能会输出一些特殊的工具方法(这些方法将会被调用,当虚拟机加载或者卸载原生library的时候)翻译 2016-09-20 18:03:14 · 2641 阅读 · 0 评论 -
Hello JNI
根据上一篇,这里写一个简单demo工程目录结构JniDemopackage com.test.git.jnidemo.JniUtil;/** * Created by lk on 16/9/18. */public class JniDemo { //路径:/JNIDemo/app/build/intermediates/classes/debug/com/test/git/jnide原创 2016-09-18 18:49:12 · 1642 阅读 · 0 评论 -
java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "__aeabi_memcpy"
java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol “__aeabi_memcpy”在6.0手机上会出现原因: AndroidStudio生成so时,由于compileSdkVersion、targetSdkVersion版本过高,与ndk版本不匹配。 ndk生成的so是向上兼容的,而不是向下兼容。所以目前只能降原创 2017-08-02 12:21:29 · 12226 阅读 · 0 评论