Как использовать библиотеку openSSL в приложении ANDROID - PullRequest
7 голосов
/ 15 июня 2010

Я пытаюсь встроить библиотеку openssl в мое приложение для Android с помощью Android NDK, но я не знаю, как именно использовать эту библиотеку, и поэтому, пожалуйста, любой может подсказать мне, как это использовать, отправьте исходный код для моей справки .......

Похожие:

Как собрать OpenSSL на Android / Linux?

Ответы [ 2 ]

3 голосов
/ 09 февраля 2011

Вы пробовали это, это отдельная сборка openssl, которая включена в Android: https://github.com/fries/android-external-openssl/blob/master/README.android

2 голосов
/ 08 сентября 2014

Существует несколько советов по использованию OpenSSL с Android:

  1. Необходимо создавать библиотеки OpenSSL с использованием инструментов NDK, иначе они будут несовместимы с NDK. Компиляция последней версии OpenSSL для 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, вам нужно создать дополнительные файлы * .mk в папке jni.Например:

    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 ищет файл .so с расширением '.0' - почему? ):

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

    где rpl - инструмент для замены строк в Linux.Запустите этот скрипт после сборки и перед запуском приложения, и он удалит номер версии из файлов проекта.Перейдите по ссылке для получения дополнительной информации.

    Если вы используете компилятор C ++, вы можете получить ошибку «неопределенные ссылки» в ваших функциях C.Используйте extern "C" {}, чтобы избежать этого (для получения дополнительной информации обратитесь к разделу «Изменение имени в C ++»).

  4. Наконец убедитесь, что в манифесте есть сетевое разрешение.

...