关于JNI的解析
来源:互联网 发布:昆明职称网络申报系统 编辑:程序博客网 时间:2024/06/05 12:05
很多程序员都是比较有好奇心的,比如android开发中java还可以调c/c++,这个已经不是新知识了,很多人已经很熟悉了,但是也有一些刚刚想入门的朋友,今天就说一下JNI是什么东东。
首先,JNI是java代码访问c/c++的中间层,所以你得先有c/c++库,才能用JNI,而这个库就是.so文件了,首先看一个项目的目录,这是一个android播放器项目,这里的播放器的播放,编码解码和显示都是在c++层实现的,java层只是调用这些接口就可以了。先看图
比如这些库是在跳入一个界面的时候使用,那先像上图那样把库加载进来,加载完这个app就可以用这些库了。
因为这些函数都是本地函数(实现是在c++层),所以前面加一个native,表示这是本地函数。
现在库也加载了,native函数也有了,然后就直接调用就可以了,这个时候java层的函数是怎么找到c++层的对应的函数的呢?
这里有两种方法可以让java层函数找到对应c++层函数,一个叫静态注册,一个叫动态注册,因为android很多库都是用动态注册的今天就主要讲动态注册,静态注册是需要用javah工具生成头文件,再实现这些头文件,自己去查吧,那现在需要到c++层代码里面找这个所谓的动态注册。
先看gMethods数组,有没有发现左边的就是java层的函数,中间的是参数(这个自己百度或谷歌),而右边的就是c++层的函数了,下面有个register_player函数,gMethods作为一个参数传过去的,那register_player是什么时候调用的呢,先说一个知识点,当java层调用system.loadLibrary()的时候这个库会先调用JNI_OnLoad()方法。
这两个方法是一个工具类里面的方法,因为有extern关键字所以是在上面的类里面实现的,
这是工具类的JNI_OnLoad方法,在这里面调用register_player方法。
这只是关于JNI的部分,有人想知道怎么打.so库,怎么用c++开发android,这些问题以后再写博客了,大家一起学习一起进步。
- 关于JNI的解析
- 关于java的JNI
- 关于Java的JNI
- 关于JNI的本地引用
- 关于JNI的一点整理
- 关于jni的一点简介
- 关于JNI的使用总结
- 关于JNI的一些笔记
- 关于JNI的简单调制
- JNI之二:JNI demo手把手 && JNINativeMethod的参数解析
- 关于JNI的代码格式以及JNI的数据类型
- Android--JNI简单的实例解析
- Java中JNI的应用解析
- 关于JNI
- 关于JNI
- 关于JNI
- 关于JNI
- 关于JNI
- ISOData(迭代自组织分析算法)
- js字符串的截取,替换
- HDU 4912 LCA+策略
- ActiveMQ
- SDUTACM成绩评估
- 关于JNI的解析
- Python 文件操作
- 《页面架构》课堂交流区问题汇总
- array,vertor,arraylist,hashable,hashmap等几个易混淆概念的区别
- 什么时候用Vector, 什么时候改用ArrayList?
- RocketMQ(三)如何解决消息的顺序&重复两大硬伤?
- 拉手网_前端知识_偏前
- 229. Majority Element II (重要!)
- C++ 避免隐藏继承而来的名称