如何在android项目中安装openssl.so和libssl.so?

时间:2013-08-15 07:49:26

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

我目前正面临openssl的构建问题。

我首先使用ndk构建了libssl.solibcrypto.so共享库,并构建了监护项目。

作为第二步,我按照本topic中的说明,通过执行以下操作将libs与我的android项目集成:

1)创建一个jni文件夹

2)在这个新文件夹中,我创建了一个包含文件夹并复制粘贴了包含头文件的openssl文件夹(来自openssl包)

3)创建一个预编译文件夹,我复制了libssl.so和libcrypto.so文件

4)创建一个Android.mk文件:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

c_includes := $(LOCAL_PATH)
cf_includes := include/openssl

cf_includes := $(addprefix -Ijni/,$(cf_includes))

export_c_includes := $(c_includes)

LOCAL_MODULE := security
LOCAL_SRC_FILES := security.c
LOCAL_CFLAGS += $(cf_includes)
LOCAL_EXPORT_C_INCLUDES := $(export_c_includes)
LOCAL_LDLIBS := -llog
LOCAL_LDLIBS += $(LOCAL_PATH)/precompiled/libssl.so
LOCAL_LDLIBS += $(LOCAL_PATH)/precompiled/libcrypto.so

include $(BUILD_SHARED_LIBRARY)

5)然后我编写了一个名为security.c的源文件,其中包含一个初始化openssl

的函数
/* OpenSSL headers */

#include "openssl/bio.h"
#include "openssl/ssl.h"
#include "openssl/err.h"

/* Initializing OpenSSL */

void init_openssl(void){
    SSL_load_error_strings();
    ERR_load_BIO_strings();
    OpenSSL_add_all_algorithms();
}

5)用ndk-build构建整个东西以获取libsecurity.so文件

但是在这一步,似乎编译器找不到头文件,我得到了这个错误:

fatal error: openssl/bio.h: No such file or directory

我是否错过了mk文件中的内容?

1 个答案:

答案 0 :(得分:3)

您需要做的是使用PREBUILT_SHARED_LIBRARY指令。

在Android.mk中,添加以下部分:

# Prebuilt libssl
include $(CLEAR_VARS)
LOCAL_MODULE := ssl
LOCAL_SRC_FILES := precompiled/libssl.so
include $(PREBUILT_SHARED_LIBRARY)

# Prebuilt libcrypto
include $(CLEAR_VARS)
LOCAL_MODULE := crypto
LOCAL_SRC_FILES := precompiled/libcrypto.so
include $(PREBUILT_SHARED_LIBRARY)

作为LOCAL_MODULE := security部分的一部分,添加以下内容:

LOCAL_MODULE := security
...
LOCAL_SHARED_LIBRARIES= ssl crypto

LOCAL_SHARED_LIBRARIES行将替换以下行:

LOCAL_LDLIBS += $(LOCAL_PATH)/precompiled/libssl.so
LOCAL_LDLIBS += $(LOCAL_PATH)/precompiled/libcrypto.so

请详细了解问题Calling inner Android.mk file to build prebuilt libraries not working