Android studio(Windows操作系统) 使用CMake进行NDK开发之引入第三方so文件

CMake进行NDK开发之引入第三方so文件

本人所用的操作环境为Windows 7,开发工具为Android studio2.2。
Android studio更新到2.2版本后,有了CMake和传统的JNI两种开发NDK的方法,本文主要基于CMake进行开发(应该是未来的主推方式):

  • 新建支持C++的项目
  • 引入第三方so文件
  • 遇到的问题

新建支持C++的项目

参考博客:
http://blog.csdn.net/aspirin_94/article/details/53945884
http://blog.csdn.net/andrexpert/article/details/72904462
在参考这篇博客之前,本人是在旧项目上修改,利用传统JNI方式开发NDK,出现太多问题,且最终也未能编译成功。之后参考了这篇博客,新建了一个支持C++的项目基本没有问题。

若是在原先已有项目上进行开发,建议还是新建一个支持C++的项目,然后将项目进行迁移,可以避免很多麻烦。(经验之谈 ಥ﹏ಥ)

引入第三方so文件

1、首先需要明确自己的第三方so文件对应的架构
(本人在这儿被坑了很久,主要第三方so文件是别人提供的,想当然的以为是armeabi架构)
参考博客:https://www.jianshu.com/p/cb05698a1968
Android系统上目前支持的CPU架构有:ARMv5,ARMv7 (从2010年起),x86 (从2011年起),MIPS (从2012年起),ARMv8,MIPS64和x86_64 (从2014年起),每一种都关联着一个相应的ABI(Application Binary Interface,应用程序二进制接口),其对应的ABI为:armeabi,armeabi-v7a,x86,mips,arm64- v8a,mips64,x86_64。
提供第三方so文件的官网不一定提供对应所有的CPU架构的so文件,基本仅提供其中的几种或一种,像我使用的第三方so文件只提供了i686和x86_64版本,所以在Android系统中对应的ABI分别为x86,x86_64。

2、将so文件拷贝到对应文件夹下
参考博客:http://blog.csdn.net/hzxyliugang/article/details/69438144
本人是在main目录下创建jniLibs目录,然后将so文件拷贝到名为x86和x86_64子目录下。

3、在项目app目录下的build.gradle中指定ABI,再点击”Sync now”即可:
Android studio(Windows操作系统) 使用CMake进行NDK开发之引入第三方so文件

注意:有些第三方so文件提供了多个同名so文件,后面仅有不同数字的区别。如下图所示:
Android studio(Windows操作系统) 使用CMake进行NDK开发之引入第三方so文件
可以发现,前两个so文件大小均是0KB且文件logo左下角有一个跳转的箭头,其效果类似于Windows下的快捷方式。保险起见,将他们全都拷贝到对应的ABI文件夹下即可。

遇到的问题

1、incompatible target:不兼容目标的问题
解决方案:检查自己的第三方so文件对应的CPU架构,是否和自己建立的文件夹名称对应,进行修正即可解决。
若是在Linux环境下遇到这个问题,可以参考这篇博客:
http://blog.csdn.net/jiangxuchen/article/details/22883575
2、其他遇到的问题是参考下面这篇博客解决的
(我就不班门弄斧了 o( ̄︶ ̄)o):
http://blog.csdn.net/qqchenjian318/article/details/72780874