Android的NDK开发中的UnsatisfiedLinkError

发布时间:2019-06-27 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Android的NDK开发中的UnsatisfiedLinkError脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

首先UnsatisfiedLinkError的种类很多,我这里遇到的是

java.lang.UnsatisfiedLinkError:
nativeLibraryDirectories=[*****/lib/arm64, *****/lib/arm64-v8a, /vendor/lib64, /System/lib64]]] couldn't find "libmytool.so"

可以看到我这里主要是因为在这几个文件夹中都没有找到我的so库导致的。
仔细一看,我的jniLibs中确实只有一个armeabi-v7文件夹,于是我添加了如下的文件夹:

clipboard.png

然后在各个文件夹中,都把我的so文件放了一份。
但是直接跑,发现它提示我的so文件是一个32bIT的:

 java.lang.UnsatisfiedLinkError: dloPEn failed: "****/lib/arm64/libmytool.so" is 32-bit instead of 64-bit

经过下面两篇文章的指导:

http://stackoverflow.COM/questions/27186243/use-32-bit-jni-libraries-on-64-bit-andROId
https://corBT.com/posts/2015/09/18/mixing-32-and-64bit-dependencies-in-android.htML

我在build.gradle中添加了下面的部分:

android {
compileSdkVersion 24
buildToolsVersion "24.0.0"

defaultconfig {
    ……
    ndk {
        abifilters "armeabi-v7a", "x86"(后面还可以加其他的,但是我这里只加了x86就可以跑了)
    }
}
buildTypes {
    ……
}
sourceSets.main {
    jni.srcDirs = ['src/main/jni','src/main/jniLibs']
    //这个地方也是一个容易出错的地方,虽然默认的jni目录是'src/main/jni',但是so文件直接放进去经常会出错,一般会在jni中放c文件,然后在同级目录下创建一个jniLibs文件夹用于放so库
}

}
可以看到,在我加了

 ndk {
        abiFilters "armeabi-v7a", "x86"(后面还可以加其他的,但是我这里只加了x86就可以跑了)
    }

之后,等于对原来的jni中的文件夹做了一个筛选,只选入了这里标识的"armeabi-v7a"和"x86",所以不会再导入arm64中的文件,因此也不会出错了(arm64中的自然都应该是64位的库,而"armeabi-v7a"和"x86"则可以是32位的)

不过我还是很疑惑,为什么这个破手机提示我在下面的文件夹中没有找到so库,然而我加的文件夹是x86啊,跟这些文件夹也搭不上关系…不知道为啥就能跑起来了。我感觉,嗯,很奇葩。

*****/lib/arm64, *****/lib/arm64-v8a, /vendor/lib64, /system/lib64]]

注:笔者当时用的是某菊花场的手机进行的测试…算了不提了…

脚本宝典总结

以上是脚本宝典为你收集整理的Android的NDK开发中的UnsatisfiedLinkError全部内容,希望文章能够帮你解决Android的NDK开发中的UnsatisfiedLinkError所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。