openssl作为Android Native Code中的共享库

时间:2013-06-07 14:52:28

标签: android android-ndk

我刚刚编译了OpenSSL for Android。我有libcrypto.so和libssl.so共享库。我创建了一个名为TrialApp的示例Android应用程序。我们的想法是使用一些调用libssl和libcrypto共享库的本机函数。因此,在我的jni目录下,我有一个TrialApp.cpp,其中包含一个简单的SHA1示例。这是我在Eclipse上的NDK应用程序目录的树结构:

TrialApp
|
|-->Activity.java
|
|-->TrialApp.java(which includes System.LoadLibrary calls)
|
|-->jni
    |-->TrialApp.cpp
    |
    |-->Android.mk
    |
    |-->includes
    |   |
    |   |-->openssl (dir containing *.h files)
    |
    |-->precompiled
       |-->libssl.so
       |-->libcrypto.so

这是Android.mk文件

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := TrialApp
LOCAL_SRC_FILES := TrialApp.cpp
LOCAL_EXPORT_C_INCLUDE_DIRS  := $(LOCAL_PATH)/includes/openssl
LOCAL_LDLIBS := -llog
LOCAL_LDLIBS += $(LOCAL_PATH)/precompiled/libssl.so
LOCAL_LDLIBS += $(LOCAL_PATH)/precompiled/libcrypto.so
LOCAL_STATIC_LIBRARIES := sslx cryptox

include $(BUILD_SHARED_LIBRARY)

但是然后编译器找不到TrialApp中的openssl头文件.cpp。

我得到的错误: 致命错误:openssl / evp.h:没有这样的文件或目录

有人可以告诉我如何解决它吗? 感谢。

1 个答案:

答案 0 :(得分:2)

包含dirs在编译器标志中设置-I:所以,设置LOCAL_CFLAGS变量,其中包含适当的密钥和标头位置:LOCAL_CFLAGS += $(cf_includes)其中cf_includes定义为{{1} +} + cf_includes:= includes/openssl
换句话说,你必须像这样玷污LOCAL_CFLAGS:
cf_includes := $(addprefix -Ijni/,$(cf_includes))

尝试用

替换你的android.mk
LOCAL_CFLAGS += -Ijni/includes/openssl

希望有所帮助