【问题标题】:How to install openssl.so and libssl.so in an android project?如何在 android 项目中安装 openssl.so 和 libssl.so?
【发布时间】:2013-08-17 09:17:34
【问题描述】:

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

我首先使用 ndk-build the Guardianproject 构建了 libssl.solibcrypto.so 共享库。

作为第二步,我按照topic 中的说明执行以下操作,将库与我的 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 文件中的某些内容?

【问题讨论】:

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


    【解决方案1】:

    您需要做的是使用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了解更多详情。

    【讨论】:

    • 谢谢,我也设法找到了这个解决方案,并且我使用了一个 .cpp 文件(因为 eclipse...:))。
    猜你喜欢
    • 2014-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-14
    • 2016-02-09
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多