我想在我的 android ndk 项目中使用 openssl。
但是当我构建它时,我得到了这些错误:
错误:(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"
我正在使用 C++ 中的 openssl,并使用 dropbox/djinni 生成 jni 包装器。我也在使用 Android Studio 1.3 stable 和 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 中不支持这个“包括东西的第三方共享库”。所以我将不得不等待它。(我也可以尝试使用makefile,但默认它们被AS跳过)