Android平台下openssl动态库编译

  1. 下载Linux平台下的NDK软件包

NDK 下载 | Android NDK | Android Developers

下载完成后执行解压命令

bash 复制代码
# unzip android-ndk-r27d-linux.zip
  1. 下载openssl-1.1.1w源码包,并解压
bash 复制代码
# tar -xzvf openssl-1.1.1w.tar.gz 
  1. 进入解压后的openssl-1.1.1w目录

执行以下操作:

3.1 修改下面的Android配置文件

#vi Configurations/15-android.conf

bash 复制代码
my %targets = (
    "android" => {
        inherit_from     => [ "linux-generic32" ],
        template         => 1,
        ################################################################
        # Special note about -pie. The underlying reason is that
        # Lollipop refuses to run non-PIE. But what about older systems
        # and NDKs? -fPIC was never problem, so the only concern is -pie.
        # Older toolchains, e.g. r4, appear to handle it and binaries
        # turn out mostly functional. "Mostly" means that oldest
        # Androids, such as Froyo, fail to handle executable, but newer
        # systems are perfectly capable of executing binaries targeting
        # Froyo. Keep in mind that in the nutshell Android builds are
        # about JNI, i.e. shared libraries, not applications.
        cflags           => add(sub { android_ndk()->{cflags} }),
        cppflags         => add(sub { android_ndk()->{cppflags} }),
        cxxflags         => add(sub { android_ndk()->{cflags} }),
        bn_ops           => sub { android_ndk()->{bn_ops} },
        bin_cflags       => "-pie",
        enable           => [ ],
        shared_extension => ".so",  ###增加这行
    },

3.2 配置和编译

bash 复制代码
# export ANDROID_NDK_HOME=/home/llw/android-ndk-r27d/
# PATH=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin:$ANDROID_NDK_HOME/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin:$PATH
# ./Configure android-arm64 -D__ANDROID_API__=26
# make clean
# make

编译完成后在目录下面生成了所需要的两个动态库, 通过查看文件属性发现得到的是64位的arm架构的动态库

bash 复制代码
root@lf-virtual-machine:/home/llw/openssl-1.1.1w# 
root@lf-virtual-machine:/home/llw/openssl-1.1.1w# file libssl.so 
libssl.so: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, not stripped
root@lf-virtual-machine:/home/llw/openssl-1.1.1w# 
root@lf-virtual-machine:/home/llw/openssl-1.1.1w# file libcrypto.so 
libcrypto.so: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, not stripped
root@lf-virtual-machine:/home/llw/openssl-1.1.1w# 
root@lf-virtual-machine:/home/llw/openssl-1.1.1w# 
root@lf-virtual-machine:/home/llw/openssl-1.1.1w# 

优化动态库的体积大小

bash 复制代码
root@lf-virtual-machine:/home/llw/openssl-1.1.1w# llvm-strip --strip-unneeded libcrypto.so
root@lf-virtual-machine:/home/llw/openssl-1.1.1w# ls -alth *.so
-rwxr-xr-x 1 root root 2.6M Jul 16 16:23 libcrypto.so
-rwxr-xr-x 1 root root 657K Jul 16 15:29 libssl.so
root@lf-virtual-machine:/home/llw/openssl-1.1.1w# llvm-strip --strip-unneeded libssl.so   
root@lf-virtual-machine:/home/llw/openssl-1.1.1w# ls -alth *.so
-rwxr-xr-x 1 root root 569K Jul 16 16:24 libssl.so
-rwxr-xr-x 1 root root 2.6M Jul 16 16:23 libcrypto.so
root@lf-virtual-machine:/home/llw/openssl-1.1.1w# 
相关推荐
feiyangqingyun32 分钟前
基于Qt和FFmpeg的安卓监控模拟器/手机摄像头模拟成onvif和28181设备
android·qt·ffmpeg
用户2018792831675 小时前
ANR之RenderThread不可中断睡眠state=D
android
煤球王子5 小时前
简单学:Android14中的Bluetooth—PBAP下载
android
小趴菜82275 小时前
安卓接入Max广告源
android
齊家治國平天下5 小时前
Android 14 系统 ANR (Application Not Responding) 深度分析与解决指南
android·anr
ZHANG13HAO5 小时前
Android 13.0 Framework 实现应用通知使用权默认开启的技术指南
android
【ql君】qlexcel5 小时前
Android 安卓RIL介绍
android·安卓·ril
写点啥呢5 小时前
android12解决非CarProperty接口深色模式设置后开机无法保持
android·车机·aosp·深色模式·座舱
IT酷盖5 小时前
Android解决隐藏依赖冲突
android·前端·vue.js
努力学习的小廉7 小时前
初识MYSQL —— 数据库基础
android·数据库·mysql