由于targetSdkVersion(armeabi-v7a和libcryptopp.so)找不到库

时间:2016-01-20 17:22:14

标签: java android android-ndk java-native-interface crypto++

我创建了一个示例项目,它使用Crypto ++的本机C ++库和NDK来生成一些ECDH密钥对。您可以找到项目here

这个项目在大多数Android设备上运行得非常好(在少数4.4和5.0设备上运行)。但是我最近在运行Android 6.0.1的Nexus 5和Nexus 7上运行了该应用程序,该应用程序因以下错误而崩溃。

java.lang.UnsatisfiedLinkError: dlopen failed: library "./obj/local/armeabi-v7a/libcryptopp.so" not found

我不确定这里发生了什么,因为该项目显然有这些文件,它们应该没问题。这似乎可能是某种与NDK相关的问题,但我不太确定。

我尝试删除armeabi-v7a文件夹,这迫使该应用程序使用Nexus设备上的armeabi文件,但它也找不到这些文件。

我打开了apk,所有正确的.so文件都在那里,并带有相应的文件夹。

不确定这是Android Marshmallow问题,Nexus架构问题还是某些.so文件编译问题。我是使用NDK的新手,所以我希望能找到解决这个问题的想法。

编辑 :仔细研究一下,看起来这是一个Android Marshmallow问题。提到了一个相关问题here。将 targetSdkVersion 更改为 22 "修复"碰撞。但显然这不是一个非常友好的解决方案。

显然在Android Marshmallow上,他们从OpenSSL切换到BoringSSL。这可能是根本问题,因为我认为Crypto ++使用OpenSSL的功能并链接它?

仍在寻找可以让我 targetSdkVersion 23 的实际修复方法。可能会试试这个article中列出的一些解决方案,看看会发生什么。

编辑2 : Crypto ++没有与OpenSSL链接,因此有理论。这里的帮助仍然受到赞赏。

0 个答案:

没有答案