![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
jni开发
猿诗人
想做个诗人一样的程序猿,将代码写成诗
展开
-
Android JNI开发--基本内容
前些天项目中有JNI开发的需求,突然发现竟然最基本的JNI的开发又忘了,只记得一些大概,还得搜半天。所以抽空再记录一下相关的内容,以及一些开发时候的想法(想法这东西像灵感一样,只有开发的时候才能想起来,时间长了就忘了,不记下来就浪费了),以便以后用到时可以快速的回忆起来。好记性不如烂笔头啊。有JNI需求的项目中,首先,大多数都需要有Java层面的调用需求,也就是从Java层需要调用JNI层的方法...原创 2020-03-13 11:36:50 · 345 阅读 · 0 评论 -
Android JNI开发--集成第三方SO
我们的应用需要调用第三方so中的方法,然后,第三方可以提供相应的SO文件和相应的头文件。SO文件:libFunction.so;头文件:function.h,如下:extern "C" { ...... int getResult(int index);}接下来就是如何使用这个SO和头文件function.h。调用SO内方法比如我们的源码文件为Test.cpp:#incl...原创 2020-03-16 11:54:07 · 562 阅读 · 1 评论 -
Android JNI开发(1)--JavaVM和 JNIEnv 动态注册本地方法
这里说的JNI不是初学Android JNI时的那种,而是使用NDK相应的API进行相应的开发工作。一、JNI中获取JavaVM和 JNIEnvJavaVM是虚拟机在JNI中的表示,一个虚拟机中只有一个JavaVM对象,这个对象是线程共享的。 JNIEnv类型是一个指向全部JNI方法的指针。该指针只在创建它的线程有效,不能跨线程传递。多线程无法共享。 使用JNI_OnLoad方法,原创 2017-09-18 18:03:35 · 1752 阅读 · 0 评论 -
Android JNI开发(2)--native方法调用Java方法
很多时候,我们在JNI代码中获取到了我们想要的值,需要返回到Java层,简单的情况下可以使用return某个值来实现。但是复杂情况下,我们需要不断地获取JNI中返回的值,我们就可以在JNI中主动去找Java中的方法,然后调用,并把JNI中的值作为Java方法的参数传入。如下://native方法将调用Java方法JNIEXPORT void JNICALL nativeCallJava(JNIEn原创 2017-09-19 16:35:45 · 1013 阅读 · 0 评论 -
Android JNI开发(3)--引用类型
NDK开发中的引用类型分为三种:局部引用(Local Reference)、全局引用(Global Reference)、弱全局引用(Weak Global Reference)1、 局部引用通过NewLocalRef和各种JNI接口创建(FindClass、NewObject、GetObjectClass和NewCharArray等)。会阻止GC回收所引用的对象,不能跨函数使用,不能跨线程使用。函原创 2017-09-20 10:41:34 · 414 阅读 · 0 评论 -
Android JNI开发(4)--访问Java的实例变量和静态变量
啥都不说了,上代码:/* * 访问Java实例变量的值 */ JNIEXPORT void accessInstanceField (JNIEnv *env, jclass cls, jobject obj) { jclass clazz; jfieldID fid; jstring j_str; jstring j_newStr;原创 2017-09-20 14:42:49 · 434 阅读 · 0 评论 -
Android JNI开发(5)--数据传递
首先JNI中的数据类型有基本数据类型和引用类型: 基本数据类型为:Java类型 JNI类型 描述boolean jboolean unsigned 8 bitsbyte jbyte signed 8 bitschar jchar unsigned 16 bitssh原创 2017-09-21 08:50:10 · 1351 阅读 · 0 评论 -
Android JNI开发(6)--JNI中使用线程
JNI中线程是基于Linux的线程,包含头文件 #includepthread_mutex_t mutex;//互斥锁pthread_cond_t cond;//条件变量pthread_mutex_init(&mutex, NULL); pthread_mutex_lock(&mutex);pthread_mutex_trylock(&mutex)pthread_mutex_unloc原创 2017-09-21 14:29:28 · 2253 阅读 · 0 评论 -
Android JNI开发(7)--mk文件编写
作为一个Android应用开发者,也经常会遇到编写mk文件的问题,也应该掌握各种类型的mk文件的编写。其实这东西不难,只是我们不了解。 根据例子,由浅入深的了解第一个例子首先,看一个最简单的mk文件,也是hello jni级别的:LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := he原创 2017-09-22 16:37:40 · 773 阅读 · 0 评论 -
Android JNI开发(8)--JNI出坑指南
JNI可以提高应用程序的性能,但是破坏了程序的可移植性,换平台的话,需要重新编译本地代码。 下面说一下JNI本地程序编写中的一些坑,以及避坑的方法;局部引用超限当我们通过FindClass,NewStringUtf等获取jclass或jobject,如果没有调用DeleteLocalRef删除局部引用,可能会出现内存泄漏或局部引用超限(local reference table overflow)原创 2017-12-04 15:54:25 · 905 阅读 · 0 评论 -
Android JNI开发(9)--JNI中防止内存泄漏
文章 https://www.ibm.com/developerworks/cn/java/j-lo-jnileak/index.html转载 2017-12-04 16:37:48 · 425 阅读 · 0 评论 -
Android JNI开发(10)--实例
写那么多不如来点代码实在!!! Java代码:public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); s原创 2017-12-04 16:56:14 · 414 阅读 · 0 评论