【发布时间】:2016-08-31 20:20:46
【问题描述】:
我正在尝试使用 compileSdkVersion 21 buildToolsVersion "21.1.2" 将已经存在的旧 libpjsipjni.so 文件复制到我的 jniLibs android studio 代码,并在复制和编译时显示 libraryjava.lang.UnsatisfiedLinkError:dlopenfailed:cannot locate symbol"...
如何使其兼容,尤其是在 android M (6.0) 中,请帮助我解决这个问题。
【问题讨论】:
-
so 文件应该在 armeabi 或其他目录下。哪个符号无法定位?您是否为 NDK 构建指定 app_platform?
-
是的 .so 文件位于 armeabi/armeabi v-7a 目录下,我没有使用 .so 文件库构建本机代码 java.lang.UnsatisfiedLinkError:dlopenfailed:cannot locate symbol "BN_nist_mod_521" 引用"/data/app/com.myapp/lib/arm/libpjsinjni.so
-
这个符号属于 openssl 库。如果您的库使用动态链接到预装的 openssl,它可能无法在 M 或更高版本上运行:ssl 的内置实现在 Android 中已更改。此外,新的构建系统禁止链接系统 SO 文件(与 NDK 捆绑的“官方”文件除外)。但是您可以自己构建 openssl 并将其与您的应用程序捆绑在一起。请注意,Play 商店会验证 openssl 的捆绑实现(针对过时版本的 openssl 的漏洞利用过多)。
标签: android-studio java-native-interface shared-libraries native pjsip