返回> 网站首页 

编译android下支持https的curl

yoours2018-04-24 13:22:54 android 阅读 18383

简介一边听听音乐,一边写写文章。

编译系统:
Ubuntu16.04.4 64位

相关文件
android-ndk-r15c-linux-x86_64.zip
curl-7.53.1.tar.gz
openssl-1.1.0g.tar.gz
Setenv-android.sh

一、ubuntu
使用root登录

二、创建工具链
/root/NDK/android-ndk-r15c/build/tools/make_standalone_toolchain.py --arch arm --api 15 --install-dir /root/NDK/android-ndk-r15c/android-r15c-toolchain --deprecated-headers

三、创建环境变量
export ANDROID_HOME=/root/NDK/android-ndk-r15c
export TOOLCHAIN=$ANDROID_HOME/android-r15c-toolchain
export PKG_CONFIG_LIBDIR=$TOOLCHAIN/lib/pkgconfig
export CROSS_SYSROOT=$TOOLCHAIN/sysroot
export PATH=$TOOLCHAIN/bin:$ANDROID_HOME:$PATH
export TOOL=arm-linux-androideabi
export CC=$TOOLCHAIN/bin/${TOOL}-gcc
export MAKEDEPPROG=$TOOLCHAIN/bin/${TOOL}-gcc
export CXX=$TOOLCHAIN/bin/${TOOL}-g++
export CPP=$TOOLCHAIN/bin/${TOOL}-cpp
export LINK=${CXX}
export LD=$TOOLCHAIN/bin/${TOOL}-ld
export AR=$TOOLCHAIN/bin/${TOOL}-ar
export RANLIB=$TOOLCHAIN/bin/${TOOL}-ranlib
export STRIP=$TOOLCHAIN/bin/${TOOL}-strip
export ARCH_FLAGS="-mthumb"
export ARCH_LINK=
export CFLAGS="${ARCH_FLAGS} -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64 -march=armv7-a"
export CXXFLAGS="${CFLAGS} -frtti -fexceptions"
export LDFLAGS="${ARCH_LINK}"

四、OpenSSL编译
1. 首先去除Setenv-android.sh文件中的windows换行,改为linux换行:
在vim中打开文件,输入set ff=unix

2. 修改Setenv-android.sh文件

3. 设置执行权限
chmod a+x Setenv-android.sh

4. 执行
./Setenv-android.sh

5. 创建共享库
./config no-asm zlib no-ssl2 no-ssl3 no-comp no-hw no-engine --openssldir=/root/NDK/openssl-1.1.0g/build --prefix=/root/NDK/openssl-1.1.0g/build

6. 修改Makefile文件
打开Makefile文件删除两处-m64

7. 编译和安装
make -j4  #-j4表示并行4核来编译加快速度
make install   #安装

五、curl编译
1. 配置
./configure --host=arm-linux-androideabi --with-ssl=/root/NDK/openssl-1.1.0g/build --prefix=/root/NDK/curl-7.53.1/build --with-zlib
配置支持ssl,支持使用系统zlib

2. 修改lib文件夹下的curl_config.h
对比修改如下定义:
configure找不到openssl,所以所生成的配置文件是不使用openssl的。要想使用ssl,需要手动修改 lib/curl_config.h,打开宏定义HAVE_LIBSSL、 HAVE_OPENSSL_CRYPTO_H、HAVE_OPENSSL_ERR_H、HAVE_OPENSSL_PEM_H、 HAVE_OPENSSL_PKCS12_H、HAVE_OPENSSL_RSA_H、HAVE_OPENSSL_SSL_H、 HAVE_OPENSSL_X509_H、USE_OPENSSL、USE_SSLEAY(但是注意android没有编译openssl中的 engine,因此不要打开宏定义HAVE_OPENSSL_ENGINE_H),同时注释掉宏定义HAVE_MALLOC_H和HAVE_IOCTL, 这两个宏定义在Android_config.h中有定义,不注释的话在编译过程中会有很多警告(但是能正确编译通过)

3. 编译和安装
make -j4
make install

六、使用
在Android Studio环境下使用,修改CMakeLists.txt文件
add_library(curl STATIC IMPORTED)
set_target_properties(curl
  PROPERTIES IMPORTED_LOCATION
  ${CMAKE_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}/lib/libcurl.a)

add_library(crypto STATIC IMPORTED)
set_target_properties(crypto
  PROPERTIES IMPORTED_LOCATION
  ${CMAKE_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}/lib/libcrypto.a)

add_library(ssl STATIC IMPORTED)
set_target_properties(ssl
  PROPERTIES IMPORTED_LOCATION
  ${CMAKE_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}/lib/libssl.a)

target_link_libraries( # Specifies the target library.
                       native-lib

                       # Links the target library to the log library
                       # included in the NDK.
                       ${log-lib}
                       curl
                       ssl
                       crypto
                       )

微信小程序扫码登陆

文章评论

18383人参与,0条评论