Я хочу использовать openssl для моего проекта Android ndk.
Но когда я его построил, я получил эти ошибки:
Ошибка: (38) неопределенная ссылка на
SSL_library_init'
SSL_load_error_strings’
Error:(39) undefined reference to
Ошибка: (40) неопределенная ссылка наOPENSSL_add_all_algorithms_noconf'
CRYPTO_num_locks’
Error:(42) undefined reference to
Ошибка: (45) неопределенная ссылка наCRYPTO_set_locking_callback'
CRYPTO_set_id_callback»
Error:(46) undefined reference to
так далее..
Я включил два файла в 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)
Я не верю, что у вас могут быть общие библиотеки как таковые в вашем приложении, вы можете только загрузить объект so из Java с помощью System.loadLibrary ()
Вам необходимо статически скомпилировать OpenSSL в оставшуюся часть кода C ++ (как в ссылке на библиотеки .a crypto и SSL)
Вот пример
это делает проект curl Android iOS, стоит взглянуть https://github.com/gcesarmza/curl-android-ios