Android NDK 编译 libcurl支持https

最后在使用NDK中使用libcurl,由于不同的安卓设备,版本不一样;使用so时,会导致报错dlopen时找不到某函数或出错。

最后直接使用libcurl.a后,目前在几款盒子上测试均能正常工作。

libcurl需要支持https得提前编译两个库:

openssl, zlib。

1. 编译openssl

下载openssl-3.3.1 的sourcecode

下载源地址:

openssl github下载地址icon-default.png?t=N7T8https://github.com/openssl/openssl/releases/download/openssl-3.3.1/openssl-3.3.1.tar.gzam

解压后开始编译:

根目录有NOTES-ANDROID.md,里面有编译说明;如下:

export ANDROID_NDK_ROOT=/home/whoever/Android/android-sdk/ndk/20.0.5594570
    PATH=$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin:$ANDROID_NDK_ROOT/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin:$PATH
    ./Configure android-arm64 -D__ANDROID_API__=29
    make

请将其中的目录修改为自己对应的目录。

编译时遇到问题:error: unknown argument: '-gcc-toolchain'.

问题原因,新版本的llvm不支持-gcc-toolchain参数

原编译参数:

-gcc-toolchain $(ANDROID_NDK_ROOT)/toolchains/llvm/prebuilt/linux-x86_64

修改为:

--gcc-toolchain=$(ANDROID_NDK_ROOT)/toolchains/llvm/prebuilt/linux-x86_64

 可以开始编译openssl了。

由于我使用的了libssl.a静态库,编译完成后使用,会出现

relocation R_ARM_REL32 cannot be used against symbol 'OPENSSL_armcap_P

解决方案:

重新使用下面命令config,去掉汇编。

./Configure android-arm -D__ANDROID_API__=18 no-asm no-shared --prefix=/home/deng/H3_Android/android_lib

编译后没有问题。

2. 编译libcurl.a

直接使用cmake:

cmake .. \
  -DCMAKE_TOOLCHAIN_FILE=/home/deng/NDK/android-ndk-r25b/build/cmake/android.toolchain.cmake \
 -DANDROID_NDK=$ANDROID_NDK_HOME \
 -DANDROID_ABI=armeabi-v7a \
  -DCMAKE_BUILD_TYPE=Release \
  -DCMAKE_INSTALL_PREFIX==/home/deng/H3_Android/android_lib \
  -DANDROID_PLATFORM=android-18 \
  -DANDROID_TOOLCHAIN=clang \
  -DCURL_DISABLE_LDAP=ON \
  -DCURL_DISABLE_LDAPS=ON \
  -DCURL_DISABLE_FILE=ON \
  -DCURL_DISABLE_TELNET=ON \
  -DCURL_DISABLE_DICT=ON \
  -DCURL_DISABLE_TFTP=ON \
  -DCURL_DISABLE_POP3=ON \
  -DCURL_DISABLE_SMTP=ON \
  -DCURL_DISABLE_IMAP=ON \
  -DCURL_DISABLE_GOPHER=ON \
  -DENABLE_MANUAL=OFF \
  -DENABLE_UNIX_SOCKETS=OFF \
  -DENABLE_IPV6=OFF \
  -DBUILD_CURL_EXE=OFF \
  -DBUILD_SHARED_LIBS=ON \
  -DBUILD_TESTING=OFF \
  -DHTTP_ONLY=ON \
  -DENABLE_THREAD=OFF \
  -DENABLE_NTLM=OFF \
  -DENABLE_NTLM_WB=OFF \
  -DENABLE_SPNEGO=OFF \
  -DENABLE_KERBEROS=OFF 

CMake会遇到找不到openssl的问题,使用cmakegui将openssl对应的参数设置到刚才编译好后make install的位置。

可以开始编译了,注意如果编译64位需要在cmakegui里设置一下ANDOIRD_ABI为64位。

3. 编译zlib

        下载源代码:

        https://www.zlib.net/zlib-1.3.1.tar.gz

        编译

        直接使用CMake生成Makefile

 cmake    -DCMAKE_TOOLCHAIN_FILE=/home/deng/NDK/android-ndk-r25b/build/cmake/android.toolchain.cmake  -DANDROID_NDK=$ANDROID_NDK_HOME  -DANDROID_ABI=armeabi-v7a   -DCMAKE_BUILD_TYPE=Release   -DCMAKE_INSTALL_PREFIX==/home/deng/H3_Android/android_lib   -DANDROID_PLATFORM=android-18   -DANDROID_TOOLCHAIN=clang

    然后开始编译,基本没会遇到啥问题。

  后面可以生成对应的几个库,libcurl.a libssl.a, libcrypto.a libz.a。

  在应用程序中设置好参数,就可以支持https了。

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值