在原生Android应用中使用libssl.so

时间:2013-03-21 09:47:31

标签: android android-ndk dalvik libssl

我正在使用NDK为Android编写本机库(mylib.so)。 Mylib.so依赖于libssl.so。

Android NDK文档告诉我不应该使用system / lib中的libssl.so,因为它不是稳定API的一部分。相反,我应该自己交叉编译libssl并将其添加到NDK。

但是我看到mylib.so会自动链接到system / lib / libssl.so,因为dalvik vm(加载mylib.so)已经依赖于libssl.so。

$ readelf -d /system/bin/dalvikvm | grep Shared
 0x00000001 (NEEDED)                     Shared library: [libdvm.so]
 0x00000001 (NEEDED)                     Shared library: [libssl.so]
 0x00000001 (NEEDED)                     Shared library: [libz.so]
 0x00000001 (NEEDED)                     Shared library: [libc.so]
 0x00000001 (NEEDED)                     Shared library: [libstdc++.s
 0x00000001 (NEEDED)                     Shared library: [libm.so]

那么处理这个问题的正确方法是什么?还是使用system / lib / libssl.so?

由于

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

听起来问题可能出在你的Android.mk文件中。假设您已经成功地将所需的libssl版本交叉编译为.so文件,您将需要在Android.mk文件中创建一个类似于以下内容的新模块:

include $(CLEAR_VARS)
LOCAL_MODULE := libssl-prebuilt
LOCAL_SRC_FILES := libssl.so
LOCAL_EXPORT_C_INCLUDES := /path/to/the/include/files/for/libssl.so
include $(PREBUILT_SHARED_LIBRARY)

上面的模块将您本地预构建的libssl.so版本添加到您的本机项目中。如果在编译mylib.so时想要链接本地版本的libssl.so,则必须将以下条目添加到mylib模块。

LOCAL_SHARED_LIBRARIES := libssl-prebuilt