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# 
相关推荐
TechMix3 小时前
【fkw学习笔记】Android 13 AOSP 源码添加系统预置应用实战指南
android·笔记·学习
云起SAAS3 小时前
私域直播系统UniApp源码 多商户商城+直播带货 微信小程序+H5+安卓iOS
android·微信小程序·uni-app·私域直播系统
空中海3 小时前
01. 安卓逆向基础、环境搭建与授权
android
星河耀银海3 小时前
JAVA 泛型与通配符:从原理到实战应用
android·java·服务器
Ada大侦探3 小时前
新手小白学习数据分析01----数据分析师???& 数据分析思维学习
android·学习·数据分析
空中海4 小时前
安卓逆向5. 安卓风险防护、加固复测与综合
android
Mr -老鬼4 小时前
EasyClick 双端自动化智能体|Android&iOS 全平台 EC 脚本开发助手
android·ios·自动化·易点云测·#easyclick·#ios自动化
千码君20164 小时前
flutter:与Android Studio模拟器的调试分享
android·flutter
MeAT ITEM5 小时前
MySQL Workbench菜单汉化为中文
android·数据库·mysql
molihuan5 小时前
最新 将 MuPDF 编译到 Android 动态库 PDF解析渲染引擎
android·pdf