【问题标题】:Build OpenSSL for Android为 Android 构建 OpenSSL
【发布时间】:2014-02-23 20:13:48
【问题描述】:

我尝试按照this answer 中的描述为arm Android 构建OpenSSL。但是当我使用“共享”标志构建 OpenSSL 时,它会生成 4 个文件:libcrypto.so.1.0.0、libssl.so.1.0.0 和 2 个符号链接:libcrypto.so 和 libssl.so

在 Android.mk 文件中,我将这些库链接到项目:

include $(CLEAR_VARS)
LOCAL_MODULE    := openssl-ssl
LOCAL_SRC_FILES := libs/libssl.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE    := openssl-crypto
LOCAL_SRC_FILES := libs/libcrypto.so
include $(PREBUILT_SHARED_LIBRARY)

但是当我尝试运行我的应用程序时 java.lang.UnsatisfiedLinkError 出现消息“无法加载库 libssl.so.1.0.0...”

我尝试删除链接并将 libssl.so.1.0.0 和 libcrypto.so.1.0.0 分别重命名为 libssl.so 和 libcrypto.so,但没有帮助。

如何在我的项目中使用 OpenSSL?

【问题讨论】:

  • 为什么?已经支持 SSL。
  • 是的,Android 部分支持 OpenSSL,但开发人员无法访问 /system/lib 下的库。
  • 成千上万的开发人员使用 NDK 中未包含的 /system/lib 库。很少遇到问题。 OTOH,/system/lib/libssl.so 不是最新版本,可能缺少一些功能。
  • 如何使用 NDK 中的这些库?

标签: android android-ndk java-native-interface openssl


【解决方案1】:

对我有用的是: 编辑 openssl Makefile.shared 并替换

-soname=$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX

-soname=$$SHLIB

这样库内部名称会更改为 libcrypto.so 和 libssl.so 而不是 libcrypto.so.1.0.0

清理并重新编译 openssl 和您的应用程序。

【讨论】:

    【解决方案2】:

    为了安全起见,请使用 openssl 的静态构建。否则,您可能会发现加载了系统而不是您的自定义系统(System.loadLibrary() 首先在 /system/lib 中查找)。或者进入 openssl make 文件并将其 soname 更改为独特的。

    【讨论】:

    • 我需要使用自定义引擎构建“自己的”OpenSSl 版本,因此我无法使用 /system/lib/libssl.so。但是你的建议很有帮助。谢谢!
    【解决方案3】:

    您无需删除链接并重命名文件。只需将它们保存在 Android.mk 文件中引用的同一文件夹中即可。(在您的情况下,这四个文件应该都在 lib 文件夹中)

    【讨论】:

      【解决方案4】:

      您需要构建库的静态版本。 libcrypto.a 和 libssl.a 无法加载自定义的 libcrypto.so 和 libssl.so,因为 Android Zygote 进程已经加载了自己版本的这些共享库。

      我目前在 Android 上使用的 OpenSSL-1.0.2k 配置:

      ARM:./Configure android no-shared no-hw no-dso no-krb5 no-zlib --openssldir=/home/jeff/openssl/$ANDROID_API

      ARM-v7a:./Configure android-armv7 no-shared no-hw no-dso no-krb5 no-zlib --openssldir=/home/jeff/openssl/$ANDROID_API

      x86:./Configure android-x86 no-shared no-hw no-dso no-krb5 no-zlib --openssldir=/home/jeff/openssl/$ANDROID_API

      【讨论】:

        猜你喜欢
        • 2014-09-01
        • 2012-01-12
        • 2016-12-29
        • 2011-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-11
        • 2011-08-09
        相关资源
        最近更新 更多