我最近使用OpenSSL作为加密后端为 Android构建了 libssh2 ,我还使用 NDK 自己构建了 libcrypto.so 和 libssl.so。在我的构建过程中,我生成了一个与 libssh2.a 链接的最终 libcustom.so。
谷歌表示:“如果您尝试使用自己的 OpenSSL 副本但忘记将其与应用的 APK 捆绑在一起,则该应用可能会在包含 libcrypto.so 的 Android 平台版本上正常运行。但是,该应用可能会在更高版本的 Android 上崩溃不包含此库的(例如,Android 6.0 及更高版本)。” 这就是我将 libcrypto.so、libssl.so 和 libcustom.so 打包到我的 APK 中的原因。
运行加载 libcustom.so 的 Android 应用程序时,我的应用程序崩溃并出现以下错误: 失败:dlopen 失败:无法找到“libcustom.so”引用的符号“EVP_cast5_cbc”... ONLY ON ANDROID 5。它适用于 Android 6 及更高版本。
符号EVP_cast5_cbc未定义,但在 libssh2.a 中被引用,但在 libcrypto.so 中定义良好。
我不明白为什么它可以在 Android 6 及更高版本而不是 Android 5 上正确运行。
我认为在 Android 5 上,使用的 libcrypto.so 不是我嵌入 APK 的那个,而是来自 /system/lib 的那个;所以我尝试重命名 libcrypto.so 并使用重命名的 libcrypto 构建 libssh2.a,但我面临同样的问题。
有人有想法吗?
提前致谢。