using libssl.so in native Android app

2019-05-28 12:09发布

问题:

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

回答1:

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



回答2:

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