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文件夹,于是我添加了如下的文件夹:

然后在各个文件夹中,都把我的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]]

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏SDNLAB

SDNLAB技术分享(十四):ONOS项目介绍(下)

第二部分,创新项目及ONOS特性增强项目介绍 NFV相关 随着云计算、SDN、虚拟化等理念和技术的不断成熟,以通用替代专有将原本传统专业的网元设备上的网络功能提...

4329
来自专栏Debian社区

Vinux 5.1 发布 基于 Ubuntu 的 Linux 发行版

Vinux 5.1 发布了。Vinux 是演化自 Ubuntu 的发行,面向盲人及弱视用户的需求作了优化。Vinux 缺省提供两份屏幕阅读器,以及对布莱叶文的显...

591
来自专栏沃趣科技

容器化 RDS:借助 CSI 扩展 Kubernetes 存储能力

RDS 并不是新生事物,新鲜的是通过容器技术和容器编排技术构建 RDS。对金融客户而言,他们有强烈拥抱 Docker 和 Kubernetes 的愿望,但可用性...

2813
来自专栏Debian社区

Linux Kernel 4.14 正式发布,驱动和性能改进

Linus Torvalds 宣布推出最新的 Linux Kernel 4.14 稳定版,并开始接受 4.15 合并请求。

1311
来自专栏FreeBuf

“优雅”的Linux漏洞:用罕见方式绕过ASLR和DEP保护机制

最近国外研究人员公布的一段exp代码能够在打完补丁的Fedora等Linux系统上进行drive-by攻击,从而安装键盘记录器、后门和其他恶意软件。 这次的ex...

2547
来自专栏工科狗和生物喵

干货:论如何扩大你的Wifi范围

开篇语 出于某种不可告人的目的,在回家的前一天我来研究了一下如何增大无线网的范围的技术。大概折腾了两个小时之后,终于成功的完成了一个无线桥接的工作。暂时还没有...

92311
来自专栏SDNLAB

OpenStack而生的SDN控制器——OVN

一、为什么OVN会出现? OpenvSwitch (OVS) 以其丰富的功能和相对优秀的性能,成为OpenStack中广泛使用的虚拟交换机。下图是2年前的一个调...

5095
来自专栏FreeBuf

低成本玩转硬件安全(一) | BadUSB on Arduino

引言 鉴于硬件安全对于大多数新人是较少接触的,而这方面又非常吸引我,但是部分专业安全研究设备较高的价格使人望而却步。在该系列中,笔者希望对此感兴趣的读者在花费较...

3598
来自专栏施炯的IoT开发专栏

Application Architecture Guide 2.0 - CH 19 - Mobile Applications(4)

本文翻译"Porting"、"Power"、"Synchronization"、"User Interface"和"Performance Considerat...

1915
来自专栏腾讯开源的专栏

你所不知的TARS,却帮阅文集团完成技术架构变革!

TARS开启阅文集团技术架构变革之门 本文作者:欧樑 后端研发架构师,现任职于阅文集团技术部基础服务研发组,一直致力于Java应用架构设计以及业务架构演进研发,...

5116

扫码关注云+社区

领取腾讯云代金券