Android NDK связывает OpenSSL

Я хочу использовать openssl для моего проекта Android ndk.

Но когда я его построил, я получил эти ошибки:

Ошибка: (38) неопределенная ссылка на SSL_library_init'
Error:(39) undefined reference to
SSL_load_error_strings’
Ошибка: (40) неопределенная ссылка на OPENSSL_add_all_algorithms_noconf'
Error:(42) undefined reference to
CRYPTO_num_locks’
Ошибка: (45) неопределенная ссылка на CRYPTO_set_locking_callback'
Error:(46) undefined reference to
CRYPTO_set_id_callback»
так далее..

Я включил два файла в Android.mk (один для ssl, один для крипто):

//libcrypto.mk
include $(CLEAR_VARS)

LOCAL_MODULE    := ssl-crypto
LOCAL_SRC_FILES := ../libs/system/$(TARGET_ARCH_ABI)/libcrypto.so

include $(PREBUILT_SHARED_LIBRARY)
//libssl.mk
include $(CLEAR_VARS)

LOCAL_MODULE    := ssl-ssl
LOCAL_SRC_FILES := ../libs/system/$(TARGET_ARCH_ABI)/libssl.so

include $(PREBUILT_SHARED_LIBRARY)

И я добавил это в app / build.gradle:

    stl = "gnustl_static"
cppFlags  += "-I${file("../../../../support-lib/jni")}".toString()
cppFlags  += "-I${file("../../../generated-src/cpp")}".toString()
cppFlags  += "-I${file("../../../taps-api")}".toString()
cppFlags  += "-I${file("../../../include")}".toString()

cppFlags  += "-std=c++11"cppFlags  += "-DASIO_STANDALONE"
cppFlags  += "-lssl"cppFlags  += "-lcrypto"

Я использую openssl из C ++ и создаю jni-оболочки с помощью dropbox / djinni.
Также я использую Android Studio 1.3 стабильный и Gradle 2.5

РЕДАКТИРОВАТЬ:
Я изменил свой build.gradle в приложении:

abiFilters += "armeabi"abiFilters += "armeabi-v7a"abiFilters += "x86"abiFilters += "mips"ldLibs += ['ssl', 'crypto']

android.sources {
main {
jniLibs {
source {
srcDirs 'jni/libs'
}
}
}

Это сработало, но приложение упало (потому что оно ищет библиотеки в неправильном каталоге в apk …).
Также я обнаружил, что в новой экспериментальной версии Gradle недавно не поддерживается эта «сторонняя общая библиотека, в том числе вещь». Так что я буду ждать этого.
(Также я могу попробовать что-то с make-файлами, но по умолчанию они пропускаются AS)

1

Решение

Я не верю, что у вас могут быть общие библиотеки как таковые в вашем приложении, вы можете только загрузить объект so из Java с помощью System.loadLibrary ()

Вам необходимо статически скомпилировать OpenSSL в оставшуюся часть кода C ++ (как в ссылке на библиотеки .a crypto и SSL)

Вот пример

https://github.com/gcesarmza/curl-android-ios/blob/master/test-android-project/app/src/main/jni/Android.mk

это делает проект curl Android iOS, стоит взглянуть https://github.com/gcesarmza/curl-android-ios

0

Другие решения


По вопросам рекламы [email protected]