我正在开发一个使用 AES 加密来加密和解密文件的 Android 项目。但是Java内置的Cipher真的很慢。在做了一些研究之后,我决定使用 NDK 在 OpenSSL 库中为 aes 构建一个包装器。所以我创建了一个 Android 项目:
Android 项目结构:
src
res
jni
openssl-1.0.1e (openssl source code folder)
Android.mk
wrapper-folder
aes_wrapper.c
Android.mk
Application.mk
首先我的 aes_wrapper.c 有一个非常简单的函数并且 ndk-build 成功。但是,当我尝试编写加密函数时,我将“../openssl-1.0.1e/crypto/aes/aes.h”包含到 aes_wrapper.c 中,出现以下错误:
openssl/opensslconf.h no such file or directory
头文件opensslconf.h位于../openssl-1.0.1e/include/openssl
谁能告诉我如何解决这个问题?非常感谢,抱歉我的英语不好。
编辑:这是Android.mk
在文件夹 openssl-1.0.1e/crypto/aes 中
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := libaes LOCAL_SRC_FILES := aes_cbc.c aes_cfb.c aes_core.c aes_ctr.c aes_ebc.c aes_ige.c aes_misc.c aes_ofb.c aes_wrap.c aes_x86core.c include $(BUILD_STATIC_LIBRARY)
在文件夹包装器中
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := aes_wrapper LOCAL_SRC_FILES := aes_wrapper.c LOCAL_LDLIBS := -lz -ljnigraphics LOCAL_STATIC_LIBRARIES += libaes LOCAL_IS_SUPPORT_LOG := true ifeq ($(LOCAL_IS_SUPPORT_LOG),true) LOCAL_LDLIBS += -llog endif include $(BUILD_SHARED_LIBRARY)
最佳答案
您应该在 Android.mk 中的相应模块下包含头文件,如下所示:
LOCAL_C_INCLUDES := /path/to/openssl-1.0.1e
在这种情况下,我认为 jni/openssl-1.0.1e 应该足够了。模块的最终外观应如下所示:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := aes_wrapper
LOCAL_SRC_FILES := aes_wrapper.c
LOCAL_LDLIBS := -lz -ljnigraphics
LOCAL_C_INCLUDES := jni/openssl-1.0.1e
LOCAL_STATIC_LIBRARIES += libaes
LOCAL_IS_SUPPORT_LOG := true
ifeq ($(LOCAL_IS_SUPPORT_LOG),true)
LOCAL_LDLIBS += -llog endif
include $(BUILD_SHARED_LIBRARY)
关于android - 在 ndk 中构建 openssl 时出错没有这样的文件或目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20771227/