Android 如何在CSipSimple中更新OpenSSL版本?

Android 如何在CSipSimple中更新OpenSSL版本?,android,openssl,google-play,csip-simple,Android,Openssl,Google Play,Csip Simple,我正在为我的应用程序使用CSipSimple代码。但不幸的是,谷歌Playstore提出了一个警告: 您正在使用易受攻击的OpenSSL版本 我想从现有代码更新OpenSSL版本 以下是我遵循的一些参考资料。 但是我被困在第5步没有这样的命令 m:找不到命令 我是否遵循了错误的步骤?如果有人已经这样做了,那么请帮助我或提供一些步骤/链接 任何帮助都将不胜感激mm是针对make模块的,这在Android源代码项目构建中可用,因此您需要在提供的模块中设置一个,即(您引用的自述文件取自该模块)。建立一

我正在为我的应用程序使用CSipSimple代码。但不幸的是,谷歌Playstore提出了一个警告: 您正在使用易受攻击的OpenSSL版本

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

以下是我遵循的一些参考资料。 但是我被困在第5步没有这样的命令

m:找不到命令

我是否遵循了错误的步骤?如果有人已经这样做了,那么请帮助我或提供一些步骤/链接


任何帮助都将不胜感激

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

编辑:为了将库作为预构建静态库添加到我的项目中,我在我的jni目录下创建了一个openssl文件夹,其中包含lib/(包含我支持的体系结构的.a文件)、include/,其中包含必要的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文件。

如果有人遇到在其中一个本机库中使用易受攻击版本的openssl的问题,我将为@Nonos解决方案添加更多细节和说明。本教程针对CSipSimple,但构建OpenSSL静态库是一个更通用的解决方案

我建议使用第二种解决方案,因为添加静态OpenSSL库是更简单的解决方案

先决条件:首先需要配置Android NDK

  • 首先,下载OpenSSL兼容版本(>1.0.2f/1.0.1r)
  • 从下载两个脚本。如果有人想知道他们在做什么:他们为每个android版本(armeabi、x86、mips等)构建OpenSSL库
  • 使用ndk版本修改setenv android mod.sh->line
    18
  • 使用android API版本修改setenv android mod.sh->line
    40
  • 用OpenSSL库的文件夹名修改
    buildall arch.sh
    ->第7行(在我的例子中是
    OpenSSL-1.0.1t
  • 成功构建后,将在文件夹
    dist
    中显示库
  • 将这些文件夹放入
    csipsimple/csipsimple trunk/csipsimple/jni/openssl/lib
  • 将头文件从
    openssl-1.0.1{version}/include
    放入
    csipsimple/csipsimple trunk/csipsimple/jni/openssl/include
    。请注意,某些头文件是指向其他文件的符号链接
  • 编译CSipSimple。请注意,
    OpenSSL
    CSipSimple
    必须使用相同的Android API版本进行编译

  • 应在完成步骤后成功构建。

    看起来步骤5的
    m
    应该是步骤6中的
    mm
    。或者,使用full命令,我相信它是
    make
    。我已经尝试了这两个命令,因为mm它不适合生成命令,而make命令目标没有make文件,所以这也不是诀窍。还有其他想法或参考资料吗?感谢@Nonos为您提供宝贵的时间和答案。在阅读了你方的所有建议之后。我已经尝试过,但在应用程序中使用OpenSSL的步骤让我感到困惑,我如何才能生成动态.so文件和链接.a文件,以便在我的项目中工作?@AsfakSaiyed,我已经编辑了我的答案来回答你的问题。我已经用JNI最新版本的openssl替换了openssl目录,解决了我的问题,并再次更新了我的项目。我会很快将我的应用程序更新到play store。如果Google play接受该版本,那么它就可以工作。如果不接受,我将尝试你编辑的答案作为最终解决方案。顺便说一下,谢谢你的编辑。