本博客下属文章均是为了记录自己的一些学习历程,因此难免有不对的地方,这些还请大家不吝指教。

一、项目背景

早在几个月前,老板便向我交代某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)相关推荐

  1. Google Maps API v2 android版本开发 国内手机不支持google play Service相关问题解决--图文教程

    Google Maps API v2 android版本开发 国内手机不支持google play Service相关问题解决--图文教程 参考文章: (1)Google Maps API v2 an ...

  2. OpenCV android sdk配置OpenCV android NDK开发实例

    OpenCV android sdk配置OpenCV android NDK开发实例 [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/det ...

  3. [网络电话]Android Linphone开发实例

    [网络电话]Android Linphone开发实例 Linphone是一个网络电话或者IP语音电话(VoIP),是一款遵循GPL的开源的网络视频电话系统,其主要如下: 使用Linphone,我们可以 ...

  4. 开发android 输入法,Android输入法开发实例解析 Android开发技术

    Android输入法开发实例解析 Android开发技术 2013 年 4 月 13 日 这里我们建立表1为BiHua,同时构建两个字段,字段1为"input"来存放输入的,字段2 ...

  5. [网络电话]Android CSipSimple开发实例

    [网络电话]Android CSipSimple开发实例 CSipSimple 是一款通用的支持SIP协议的互联网电话软件,可以在andriod的平板,手机上使用.支持语音编码: G.711 aLaw ...

  6. Android NFC 开发实例

    http://blog.csdn.net/pku_android/article/details/7430788 类: Android应用开发系列教程 Android应用开发技巧2012-04-06 ...

  7. Android软件开发实例:用客户端写博客

    标题:在Android上通过客户端写博客软件开发实例 作者:肖凤斌 binsweet@gmail.com 关注Android很久了,年初买了G4,但一直没有机会尝试Android上的软件开发. 自己有 ...

  8. 【Android 内存优化】Bitmap 内存缓存 ( Bitmap 内存复用 | 弱引用 | 引用队列 | 针对不同 Android 版本开发不同的 Bitmap 复用策略 | 工具类代码 )

    文章目录 一.Bitmap 复用池 二.弱引用 Bitmap 内存释放 三.从 Bitmap 复用池中获取对应可以被复用的 Bitmap 对象 1.Android 2.3.3(API 级别 10)及以 ...

  9. Android 蓝牙开发实例--蓝牙聊天程序的设计和实现

    作者在这里介绍的这个实例是Google SDK中提供的一个蓝牙聊天程序,简单但信息量巨大,非常适合初学者学习蓝牙方面的知识. 在学习这个实例前请读者仔细阅读并理解Socket的工作原理和实现机制,作者 ...

最新文章

  1. java spring框架 注解_史上最全的java spring注解
  2. 技嘉z68pds3刷中文bios_技嘉RTX 3080 VISION OC雪鹰显卡评测:内容创作、3A游戏两不误之选...
  3. 导入新的一个android项目抱错
  4. 【算法】一个简单的K近邻(KNN)原理
  5. 算法试题 - 找出字符流中第一个不重复的元素
  6. Android Hello World 实例【TODO】
  7. 简单地使用jquery的validate
  8. c语言字符输出128,如何将128位整数转换为C中的十进制ASCII字符串?
  9. oracle表update在等待,Oracle中如何更新一张大表记录
  10. IT工作十年总结之2个COP对象
  11. java实现一个电子书下载系统
  12. wh计算公式_锂电池计算公式wh 锂电池的mah和wh如何换算?
  13. 桌面软件图标变白怎么解决
  14. [矩阵论]欧氏空间的线性变换是正交变换的充要条件是,它对于标准正交基的矩阵是正交矩阵
  15. 【C#】C#调用Bartender模板打印
  16. 【面试】AI常见的面试问题
  17. EMC的PCB设计技术。(分层、布局、布线)
  18. Qt绘制旋转的轮播图
  19. Dialog 对话框
  20. Java实现简单二维码制作

热门文章

  1. Qt录音+百度语音Linux C++ SDK识别包实现语音识别
  2. springboot实现分页
  3. linux 远程连接工具——MTPuTTY
  4. MySQL 中间件汇总比较
  5. 写System权限的APP
  6. 区块链在版权保护上有什么作用?
  7. 配置NFS服务器和NFS客户端
  8. 计量经济学常见模型经济含义解释
  9. 【腾讯连连IoT开发大赛】基于TencentOS tiny云打印机智能达特甲醛探测系统
  10. netbeans 代码对齐_加快开发速度:NetBeans代码模板,AutoHotKey和Ditto