返回> 网站首页
编译android下支持https的curl
yoours2018-04-24 13:22:54
【android】
简介一边听听音乐,一边写写文章。
编译系统:
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
)
文章评论
19016人参与,0条评论