目的:windows平台下的c++算法,需要移植到安卓系统上。平时用惯了Visual Studio,再在其他软件上重新写算法,调试算法,实在头疼。所以我用VS的c++移动开发功能创建动态共享库,将算法内容放入,并实现JNI和JAVA接口部分;最后用Android Studio调用成功。
吐槽微软的仿真器以及VS自带的google emulator for android,搞了很久,还是有问题,不能直接用(本着放在一起调试方便,竟然没搞出来。如果有朋友在这一块调试好了,记得发文章,还是很期待的),索性重点不在这里,干脆放弃,使用Android Studio做测试。(本来算法功能测试已经在windows平台测试的差不多了)
吐槽开始。。。
三周了,从未接触java,android,对于一个C++死忠粉各种没信心,只能各种查资料,找度娘,找论坛,都以为没戏了,终于给我搞成功了!!
在此特别感谢优快云的Mr_L_Y,他对我的帮助无以言谢。这位大神贡献的资料可以查看:
VS2019 C++的跨平台开发——Android .so开发
https://blog.youkuaiyun.com/luoyu510183/article/details/94590497
VS2019 OpenCV的Windows工程到安卓的移植
https://blog.youkuaiyun.com/luoyu510183/article/details/102710080
其实有这两篇文章足以移植VS中创建的C++移动开发的SO库,但是想想这么久的辛苦,还是记录一下自己的成果。
(这里插一句,如果是整个大项目的移植,比如团队项目,直接参考Mr_L_Y的移植方法;如果是自己写的,源码结构比较简单的直接参考我这里的方法会更方便一点。)
本文使用的软件版本如下:
- VisualStudio 2019 (创建c++移动开发的动态库)
- AndroidStudio 3.5 (调用VS创建的动态库,并在模拟器中显示结果)
- NDK-r16B
- Android SDK 21
- Opencv 4.1.1(android)
第一部分:创建c++算法的so库,供安卓调用
1. 软件准备:安装Visual Studio中的“使用C++的移动开发”,不需要在可选项中选择模拟器
2. 打开VS,新建项目,选择”动态共享库(Android)“,命名为SharedObject
3. 配置opencv
由于算法中使用了opencv,具体配置可以参考文章
Visual Studio + android + opencv 跨平台生成动态库文件https://blog.youkuaiyun.com/Merria28/article/details/102517646
在这里特别讲一下配置的问题,java不需要区分debug和release,所以在附加依赖项或者库依赖项中的所有配置是一样的。需要注意的是,opencv的第三方依赖库x86_64和x86中比arm64和arm的库文件少一个libtegra_hal.a,配置的时候不要添加就可以了。
附加库目录需