目录
在移植gsoap库到android时有用到openssl的库,因此写了篇记录,openssl移植的案例网上数不胜数,非常成熟,因此也没碰到声明问题
一、下载&编译静态库
1.下载源码和脚本
下载解压,修改脚本名称为小写
mkdir openssl
cd openssl/
wget https://www.openssl.org/source/openssl-1.1.1f.tar.gz
tar -zxvf openssl-1.1.0f.tar.gz
cd openssl-1.1.1f/
wget https://wiki.openssl.org/images/7/70/Setenv-android.sh
mv Setenv-android.sh setenv-android.sh
2.修改脚本配置
setenv-android.sh:修改为自己的环境配置
- _ANDROID_NDK="android-ndk-r11c"
- _ANDROID_EABI="arm-linux-androideabi-4.9"
- _ANDROID_API="android-18"
3.修改环境变量
配置NDK编译目录ANDROID_NDK_ROOT
export ANDROID_NDK_ROOT=/home/felix/wd500g/android-sdk/android-ndk-r11c
source ./setenv-android.sh
4.编译输出
配置输出目录
脚本含义:
- no-shared:不编译动态库(.so), 我用的.a静态库
./config no-shared no-ssl2 no-ssl3 no-comp no-hw no-engine \ --openssldir=/home/felix/wd500g/openssl/out/$ANDROID_API --prefix=/home/felix/wd500g/openssl/out/$ANDROID_API
make depend
make all -8
5.结果:
- include包含我们需要的头文件
- lib包含编译出来的.a静态库:libcrypto.a libssl.a
drwxrwxr-x 2 felix felix 4096 11月 19 15:22 bin
drwxrwxr-x 2 felix felix 4096 11月 19 15:22 certs
drwxrwxr-x 3 felix felix 4096 11月 19 15:22 include//头文件
drwxrwxr-x 4 felix felix 4096 11月 19 15:22 lib //生成我们需要的库
drwxrwxr-x 2 felix felix 4096 11月 19 15:22 misc
-rw-r--r-- 1 felix felix 10771 11月 19 15:22 openssl.cnf
-rw-r--r-- 1 felix felix 10771 11月 19 15:22 openssl.cnf.dist
drwxrwxr-x 2 felix felix 4096 11月 19 15:22 private
drwxrwxr-x 4 felix felix 4096 11月 19 15:22 share
二、JNI调用
- 在项目中导入include文件,并再Android.mk中声明
LOCAL_C_INCLUDES := \
$(LOCAL_PATH) \
$(LOCAL_PATH)/openssl/include \
- Android.mk
# libssl library
include $(CLEAR_VARS)
LOCAL_MODULE := libssl
LOCAL_SRC_FILES := plugin/openssl/libssl.a
include $(PREBUILT_STATIC_LIBRARY)
# libssl library
include $(CLEAR_VARS)
LOCAL_MODULE := libcrypto
LOCAL_SRC_FILES := plugin/openssl/libcrypto.a
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_STATIC_LIBRARIES :=libssl libcrypto# libcutils libc libstdc++