Android通过JNI-org_conscrypt_NativeCrypto.cpp打开SSL:不构建

时间:2017-11-08 07:32:28

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

您好我正在尝试为Android构建openssl并通过生成.SO文件通过JNI使用它。

我从https://android.googlesource.com/platform/external/conscrypt/+/brillo-m9-dev获得了参考。 并使用“org_conscrypt_NativeCrypto.cpp”作为JNI文件。 NativeCrypto.cpp中定义的成员函数将从java。

调用

org_conscrypt_NativeCrypto.cpp:https://android.googlesource.com/platform/external/conscrypt/+/brillo-m9-dev/src/main/native/org_conscrypt_NativeCrypto.cpp

此处分享Android.mk以供参考。

Android.mk:`

LOCAL_PATH := $(call my-dir)

C_INCLUDES := $(LOCAL_PATH)/openssl-1.1.0/include

SRC := $(LOCAL_PATH)/src/main/native/org_conscrypt_NativeCrypto.cpp

include $(CLEAR_VARS)

LOCAL_C_INCLUDES := $(C_INCLUDES)

LOCAL_MODULE    := NativeFipsCrypto

LOCAL_SRC_FILES := $(SRC)

LOCAL_LDLIBS := -llog

include $(BUILD_SHARED_LIBRARY) 

尝试执行ndk-build命令时,会出现以下错误。所以我无法生成.SO文件。

  

构建错误:   `jni / src / main / native / org_conscrypt_NativeCrypto.cpp:1051:21:错误:   成员访问不完整类型'X509'(又名'x509_st')   CRYPTO_add(& x509-> references,1,CRYPTO_LOCK_X509);

     

jni / src / main / native / org_conscrypt_NativeCrypto.cpp:1051:38:错误:使用   未声明的标识符'CRYPTO_LOCK_X509'   CRYPTO_add(& x509-> references,1,CRYPTO_LOCK_X509);

     

jni / src / main / native / org_conscrypt_NativeCrypto.cpp:1253:6:错误:   成员访问不完整类型'BIO'(又名'bio_st')       b-> init = 1;

     

jni / src / main / native / org_conscrypt_NativeCrypto.cpp:1255:6:错误:   成员访问不完整类型'BIO'(又名'bio_st')       b-> ptr = NULL;       `

还有一些其他错误“错误:成员访问不完整类型'BIO'”。

如何解决?我错过了什么?如果任何带有JNI调用的android openSSL也有用。

1 个答案:

答案 0 :(得分:1)

最新版本的AOSP使用BoringSSL而不是OpenSSL。我不确定org_conscrypt_NativeCrypto.cpp是否仍然可以针对股票OpenSSL进行编译(它确实假装这不是不可能的),但是要试一试,你必须至少定义示例后面的所有标志AOSP Android.mk

可能更容易拉出AOSP版本的BoringSSL。