using libssl.so in native Android app

2019-05-28 12:10发布

I'm writing a native lib (mylib.so) for Android, using the NDK. Mylib.so depends on libssl.so.

The Android NDK doc tells me I shouldn't use libssl.so from system/lib, because it's not part of the stable API. Instead I should cross-compile libssl myself and add it to the NDK.

But I see that mylib.so get automatically linked with system/lib/libssl.so because the dalvik vm (which is loading mylib.so) already depends on 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]

So what is the correct way to deal with this? Using system/lib/libssl.so anyway?

Thanks

2条回答
兄弟一词,经得起流年.
2楼-- · 2019-05-28 12:33

It sounds like the problem might be in your Android.mk file. Assuming that you have already successfully cross-compiled the version of libssl you want into a .so file, you will want to make a new module in your Android.mk file that looks something like the following:

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)

The above module adds your local pre-built version of libssl.so to your native project. If, when compiling mylib.so, you want to link in your local version of libssl.so, you must add the following entry to your mylib module.

LOCAL_SHARED_LIBRARIES := libssl-prebuilt 
查看更多
爷的心禁止访问
3楼-- · 2019-05-28 12:54

You can download it on the following site: http://www.mediafire.com/download/njyqyxu3nxm/tcpdump.zip

查看更多
登录 后发表回答