3

我正在为我的应用程序使用 CSipSimple 代码。但不幸的是,Google Playstore 已发出警告: 您使用的是易受攻击的 OpenSSL 版本

我想从现有代码更新 OpenSSL 版本。

这是我遵循的一些参考。CSipSimple-OpenSSL 但我被困在第 5 步没有这样的命令

m:找不到命令

我是否遵循不正确的步骤?如果有人已经这样做了,请帮助我或提供一些步骤/链接。

任何帮助将非常感激

4

2 回答 2

3

如果有人遇到在其中一个本地库中使用易受攻击版本的 OpenSSL 的问题,我会为 @Nonos 解决方案添加更多详细信息和说明。本教程适用于 CSipSimple,但构建 OpenSSL 静态库是一种更通用的解决方案。

我推荐第二种解决方案,因为添加静态 OpenSSL 库是更简单的解决方案。

前提条件:需要先配置Android NDK。

  1. 首先,下载OpenSSL兼容版本(> 1.0.2f/1.0.1r)。
  2. 从此链接下载两个脚本。如果有人想知道他们在做什么:他们为每个 android 构建(armeabi、x86、mips 等)构建 OpenSSL 库
  3. 修改setenv-android-mod.sh->18与ndk版本一致
  4. 修改setenv-android-mod.sh->40与 Android API 版本一致
  5. build-all-arch.sh使用 OpenSSL 库的文件夹名称修改-> 第 7 行(在我的情况下是openssl-1.0.1t
  6. 成功构建后,文件夹内dist将显示库
  7. 把那些文件夹放进去csipsimple/CSipSimple-trunk/CSipSimple/jni/openssl/lib
  8. 将头文件从openssl-1.0.1{version}/includecsipsimple/CSipSimple-trunk/CSipSimple/jni/openssl/include. 请注意,某些头文件是指向其他文件的符号链接。
  9. 编译 CSipSimple。请注意,OpenSSL必须CSipSimple使用相同的 Android API 版本进行编译。

制作步骤后应该可以成功构建。

于 2016-08-26T14:14:40.263 回答
3

mm 用于 make 模块,这在 Android 源项目构建中可用,因此您需要设置一个构建环境,在提供的模块中是Android 平台上的 OpenSSL(从中获取您引用的自述文件) . 建立一个构建环境至少需要一两天的时间,所以我不推荐它,除非你出于不同的原因已经拥有它。此外,Android 在其最新版本中放弃了对 OpenSSL 的支持,并且正在使用 BoringSSL。据我所知,在这里实现您想要的最佳方式是按照 open ssl wiki上的指南从源代码交叉编译和构建 OpenSSL ,创建 .a 文件并在您的应用程序中静态引用它们。这也是推荐的方式以避免在 N 和更高版本上引用系统库。

编辑:要将库作为预构建的静态库添加到我的项目中,我在我的 jni 目录下创建了一个 openssl 文件夹,其中包含 lib/(其中包含我支持的架构的 .a 文件),include/ 具有必要的包含(您可以在你下载的openssl版本下找到)和Android.mk,其中包含以下内容:

include $(CLEAR_VARS) 
LOCAL_MODULE := libssl
LOCAL_SRC_FILES := lib/$(TARGET_ARCH_ABI)/libssl.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := libcrypto
LOCAL_SRC_FILES := lib/$(TARGET_ARCH_ABI)/libcrypto.a
include $(PREBUILT_STATIC_LIBRARY)

然后,为了在另一个 jni 模块中使用该库,我将以下内容添加到其 Android.mk 文件中:

LOCAL_C_INCLUDES := $(LOCAL_PATH)/../openssl/include
LOCAL_STATIC_LIBRARIES := libssl libcrypto

这也与此处所做的类似,只是不建议使用非openssl 源提供的.a 文件。

于 2016-04-19T16:44:02.587 回答