在开发APP时,不可避免的要使用JNI来兼容Java和C/C++语言。但是第一次使用NDK进行JNI开发时,可能会出现很多意想不到的问题。最主要的问题是APP在调用封装好的C二进制应用程序接口时,找不到它,导致程序崩溃。
问题具体情况是:当APP调用操作时,APP立即崩溃,对话框显示以下红色信息
nativeLibraryDirectories=[/vendor/lib64, /system/lib64]]] couldn't find "lib***.so"
该情况是找不到打包出来的.so文件。so库是系统上使用的共享库,对应7个ABI(-v7a、-v8a、mips、x86等)。不同的CPU架构对应不同的ABI,也就是每个CPU所需的so文件都不一样。所以选择自己CPU对应的ABI很重要。具体可以参考这几篇博客:
这样设置之后,重新运行ndk-可能还是会崩溃,找到原因,信息还是一样,如果排除了ABI的问题,很明显是AS在生成APK的时候没有找到正确的.so文件目录,解决这个问题的方法是把ndk-生成的.so文件放到src/main/目录下,如下图:生成的.so文件在黄色框里,把这几个文件夹复制到src/main/目录下,也就是红色框里,然后就可以了。