如何在ANDROID应用程序中使用openSSL库

时间:2010-06-15 15:22:58

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

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

相关:

How to build OpenSSL on Android/Linux ?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

有几个关于在Android上使用OpenSSL的提示:

  1. 有必要使用NDK工具构建OpenSSL库,否则它们将与NDK不兼容。 Compiling the latest OpenSSL for Android

    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 is looking for .so file with '.0' extension - why?):

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

    其中rpl是一个linux字符串替换工具。在构建之后和运行应用程序之前运行此脚本,它将从项目文件中删除版本号。请点击链接获取更多信息。

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

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