概述
最近负责一个android项目需要使用到之前公司师兄编写的c++算法库,一开始并不知道c++项目可以移植给android项目使用,竟然天真的打算将c++算法库用java进行重写。。。
通过查询大量资料得知可以通过项目移植的方法将c++项目编译成so库后在android项目上进行调用。网上的资料纷繁复杂,大部分回答提出的一种解决方案是通过在android studio上新建一个c++ native项目,通过在cpp目录下创建cpp文件并实现相应函数后通过在native.cpp文件中实现jni接口将相应需要使用到的c++函数在jni接口中暴露出去给相应的android项目使用,文件结构如下图所示。
笔者不推荐这种方法,这种方法实现的前提是c++项目就是由本人所编写,对于其中的内容与结构已经了然于心,否则在将c++项目直接复制到cpp目录下进行编译打包成so库会出现许多头疼的问题,对于初学者非常不友好。
本文介绍的是一种通过visual studio上的跨平台android进行c++项目的移植打包成so库并给android studio调用的方法。
预先准备
1:c++项目的预处理
请注意,对于你要进行移植的c++项目你要先了解此项目是基于Windows还是linux下进行编写的。由于android是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的操作系统,如果你的c++项目是基于windows下进行编写那么你可能需要对c++源码进行一定量的修改,例如在windows下引入的库需要替换成linux下的库进行使用,否则android ndk编译器将找不到相应的库。
如上图所示,可以通过ifdef宏定义进行条件判断此时项目所运行在的操作系统从而进行不同的处理操作。
如果你的c++项目非常大,建议不要将整个项目进行移植,移植的项目内容越多,出现问题的概率也就越大,后期积重难返。最好是你的android项目需要调用到哪些算法函数就将相应的cpp文件移植进行使用。
2:环境的搭建
本次移植时在visual studio 2019上安装android ndk-16b进行操作。
在visual studio2019上先打开VS installer
选中C++移动开发
如果VS没有下载NDK和SDK的,需要在VS里面配置
3:创建安卓项目
创建好后如下所示:
重定向到你的NDK版本:
配置项目属性:
4:导入项目
具体导入项目方法可以参考这篇文章:导入项目方法,导入后的项目目录如下图所示: