最近接手同事的一份android代码,但是Jni部分的.c文件中包含#include <linux/videodev2.h>等linux环境下的.h文件。
我想吐槽,移植linux环境中的代码还是要完全移植为好,或者留下交接文档,为了编译so折腾了很久,我根本想到是这个原因导致的,最后是上司尝试此种方式编译才发现的,我之前一直以为是NDK版本或者本机环境缺少文件导致的。
使用android studio无法直接编译,需要在linux环境下才能进行编译生成so文件。由于本机不具备linux环境,需借助MinGW来编译。
MinGW环境配置可自行查询。
进入MinGW。点击MinGW\msys\1.0中的msys.bat。
这个类似window中的cmd模式。
确保jni文件在你的工程目录下(如CameraServer\jni)。
在MinGW环境中进入你的工程目录(如我这里是C:\CameraServer,方便调试随便放的)。
进入工程目录后,在此目录下运行ndk-build(前提是要配置好ndk啊)。
然后工程的lib目录下就会生成armeabi-v7a的so文件。
参考记录:
Android NDK学习(4)使用cygwin生成.so库文件
https://blog.csdn.net/hcb1230/article/details/19401029
使用NDK-r8与Cygwin编译生成so库
https://blog.csdn.net/QWZHJ/article/details/52088230
cygwin 生成.so
https://blog.csdn.net/hyjecjtu/article/details/9033447