关于掌纹识别的android版本开发(实例调用JNI)
本博客下属文章均是为了记录自己的一些学习历程,因此难免有不对的地方,这些还请大家不吝指教。
一、项目背景
早在几个月前,老板便向我交代某app已在ios store上线,而该版本的撰写便是由师兄完成,而今师兄已经毕业,留下了android版本的任务,这一部分工作便由我来完成。当时,只是随便地看了一下师兄的代码,而自己对于ios和android全然不知的状态下竟然欣然接受了这份差事。师兄负责app的核心算法部分,这一部分代码全部是用C语言完成(最开始还以为是C++的,后来逐渐发现C与C++的细微差别,准确来说,应该是C语言的限制)。上网查了查,Java中的JNI技术便是针对这种调用C/C++接口的技术,下面对于自己的开发作一下记录。
二、开发流程
1.完成相关环境的配置,此部分不赘述,网上文章有很多。
2.为需要调用的C++接口函数创建一个java类,这些C++接口函数需要冠以“native”关键字,这样在android中调用时系统才能得知这些方法是用C/C++方式实现的。
3.为该java类生成对应的C/C++头文件。
(1)首先利用cmd进入项目的bin\classes目录下,可以看到该目录下的com\example\camera中有之前封装的C\C++接口的java类 *.class;
(2)在bin\classes下执行"javah"命令,对于这个命令,有一个地方需要注意,那就是,如果为C/C++接口封装的java类中调用了其他的包,那么在javah命令的参数"-classpath"中需要作相应设置,例如:
该接口类中引入了android的包import android.graphics.Bitmap;这是因为我想利用android中的Bitmap作为参数传递给C/C++,此时,如果你直接执行'javah com.example.camera.PalmRecog'将会出现''android.graphics.Bitmap not found"等提示错误,这个时候很重要的就是引入'-classpath'参数,它的作用可以理解为引入相关包的路径,
现在,我想将opencv中的Mat类型作为参数传递给C/C++程序,classpath该如何设置呢?答案如下:D:\code\OpenCV-android-sdk\sdk\java\bin\classes
(4)生成了相关的头文件后,接下来便是创建cpp文件来实现这些接口函数了,这一部分完全是和C++相关的。
(5)接下来需要配置C/C++编译环境了。properties->c/c++ build->paths and symbols 这一部分内容可以参考这篇文章的后半部分,比较详细http://www.tuicool.com/articles/qUJjyu
(6)利用ndk-build生成.so文件即可。
GNU C:
D:\code\OpenCV-android-sdk\sdk\native\jni\include
D:\android-ndk-r10b\sources\cxx-stl\gnu-libstdc++\4.6\libs\armeabi-v7a\include\bits
D:\android-ndk-r10b\sources\cxx-stl\gnu-libstdc++\4.6\include
D:\android-ndk-r10b\platforms\android-9\arch-arm\usr\include
GNU C++:
D:\android-ndk-r10b\platforms\android-9\arch-arm\usr\include
D:\android-ndk-r10b\sources\cxx-stl\gnu-libstdc++\4.6\include
D:\code\OpenCV-android-sdk\sdk\native\jni\include
D:\android-ndk-r10b\sources\cxx-stl\gnu-libstdc++\4.6\libs\armeabi-v7a\include
D:\code\OpenCV-android-sdk\sdk\native\libs\armeabi-v7a
三、项目总结
关于掌纹识别的android版本开发(实例调用JNI)相关推荐
- Google Maps API v2 android版本开发 国内手机不支持google play Service相关问题解决--图文教程
Google Maps API v2 android版本开发 国内手机不支持google play Service相关问题解决--图文教程 参考文章: (1)Google Maps API v2 an ...
- OpenCV android sdk配置OpenCV android NDK开发实例
OpenCV android sdk配置OpenCV android NDK开发实例 [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/det ...
- [网络电话]Android Linphone开发实例
[网络电话]Android Linphone开发实例 Linphone是一个网络电话或者IP语音电话(VoIP),是一款遵循GPL的开源的网络视频电话系统,其主要如下: 使用Linphone,我们可以 ...
- 开发android 输入法,Android输入法开发实例解析 Android开发技术
Android输入法开发实例解析 Android开发技术 2013 年 4 月 13 日 这里我们建立表1为BiHua,同时构建两个字段,字段1为"input"来存放输入的,字段2 ...
- [网络电话]Android CSipSimple开发实例
[网络电话]Android CSipSimple开发实例 CSipSimple 是一款通用的支持SIP协议的互联网电话软件,可以在andriod的平板,手机上使用.支持语音编码: G.711 aLaw ...
- Android NFC 开发实例
http://blog.csdn.net/pku_android/article/details/7430788 类: Android应用开发系列教程 Android应用开发技巧2012-04-06 ...
- Android软件开发实例:用客户端写博客
标题:在Android上通过客户端写博客软件开发实例 作者:肖凤斌 binsweet@gmail.com 关注Android很久了,年初买了G4,但一直没有机会尝试Android上的软件开发. 自己有 ...
- 【Android 内存优化】Bitmap 内存缓存 ( Bitmap 内存复用 | 弱引用 | 引用队列 | 针对不同 Android 版本开发不同的 Bitmap 复用策略 | 工具类代码 )
文章目录 一.Bitmap 复用池 二.弱引用 Bitmap 内存释放 三.从 Bitmap 复用池中获取对应可以被复用的 Bitmap 对象 1.Android 2.3.3(API 级别 10)及以 ...
- Android 蓝牙开发实例--蓝牙聊天程序的设计和实现
作者在这里介绍的这个实例是Google SDK中提供的一个蓝牙聊天程序,简单但信息量巨大,非常适合初学者学习蓝牙方面的知识. 在学习这个实例前请读者仔细阅读并理解Socket的工作原理和实现机制,作者 ...
最新文章
- java spring框架 注解_史上最全的java spring注解
- 技嘉z68pds3刷中文bios_技嘉RTX 3080 VISION OC雪鹰显卡评测:内容创作、3A游戏两不误之选...
- 导入新的一个android项目抱错
- 【算法】一个简单的K近邻(KNN)原理
- 算法试题 - 找出字符流中第一个不重复的元素
- Android Hello World 实例【TODO】
- 简单地使用jquery的validate
- c语言字符输出128,如何将128位整数转换为C中的十进制ASCII字符串?
- oracle表update在等待,Oracle中如何更新一张大表记录
- IT工作十年总结之2个COP对象
- java实现一个电子书下载系统
- wh计算公式_锂电池计算公式wh 锂电池的mah和wh如何换算?
- 桌面软件图标变白怎么解决
- [矩阵论]欧氏空间的线性变换是正交变换的充要条件是,它对于标准正交基的矩阵是正交矩阵
- 【C#】C#调用Bartender模板打印
- 【面试】AI常见的面试问题
- EMC的PCB设计技术。(分层、布局、布线)
- Qt绘制旋转的轮播图
- Dialog 对话框
- Java实现简单二维码制作