11

我正在尝试使用 Android NDK 将 openssl 库嵌入到我的 Android 应用程序中,但我不知道如何准确使用该库,所以请任何人告诉我如何使用它,请发送源代码供我参考... ……

有关的 :

如何在 Android/Linux 上构建 OpenSSL?

4

2 回答 2

6

你试过这个吗,它是 Android 中包含的 openssl 的独立版本: https ://github.com/fries/android-external-openssl/blob/master/README.android

于 2011-02-09T04:50:21.713 回答
3

关于在 Android 中使用 OpenSSL 有几个技巧:

  1. 必须使用 NDK 工具构建 OpenSSL 库,否则它们将与 NDK 不兼容。为 Android 编译最新的 OpenSSL

    CC=~/android-ndk-r9/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gcc
    ./Configure android-armv7
    export ANDROID_DEV=~/android-ndk-r9//platforms/android-8/arch-arm/usr
    make build_libs
    

    假设这些命令是在 OpenSSL 的源目录中执行的。

  2. 为了将这些库(ssl 和 crypto)与您自己的 NDK 库一起使用,您需要在 jni 文件夹中创建额外的 *.mk 文件。例如:

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

    并将它们包含在主 Android.mk 中:

    include $(LOCAL_PATH)/openssl-ssl/Android.mk
    

    并且可能添加

    include $(CLEAR_VARS) 
    

    之后避免错误。库将放置在libs/armabi.apk中。

  3. 如果您遇到could not load library ... needed by ...错误,则可能意味着您的库具有带有版本号的 soname。AFAIK NDK 目前无法使用此类库。有一个解决方法(Dalvik 正在寻找扩展名为 '.0' 的 .so 文件 - 为什么?):

    rpl -R -e library.so.1.1 "library.so\x00\x00\x00\x00" libs obj
    

    rpllinux字符串替换工具在哪里。在构建之后和运行应用程序之前运行此脚本,它将从项目文件中删除版本号。点击链接了解更多信息。

    如果您使用 C++ 编译器,您的 C 函数中可能会出现“未定义的引用”错误。用于extern "C" {}避免这种情况(有关更多信息,请参阅“C++ 名称修改”)。

  4. 最后确保清单中有网络权限。

于 2014-09-08T08:36:12.427 回答