Android Studio NDK中cpp代码链接第三方动态库libcrypro.so

一. 简介

使用场景:JNI代码中使用libcrypro.so库和libssl.so库,Android Studio版本是3.4.2。
Android系统中提供了libcrypro.so和libssl.so,存在/system/lib目录中,但是在NDK中并没有提供使用该库的头文件和库。不过openssl是开源的,能将其代码编译获得libcrypro.so和libssl.so,并且源码中提供头文件,因此在配置好NDK的CMakeLists.txt文件后,便能使用动态库了。另外网上也有很多已经编译好的libcrypro.so和libssl.so,并头文件。本人使用的armeabi-v7a版本的动态库。

二. 操作步骤

  1. 在 /src/main/cpp 目录新建 jniLibs 目录,把 so 文件拷入其中,so文件最好从按住手机里面pull出来,不然可能不兼容;
  2. 在 /src/main/cpp 目录新建 include目录,把*.h文件全部拷入进去,也可以拷入包含头文件的文件夹,在添加头文件后,不显示红色,就表示头文件目录导入有效。
    在这里插入图片描述
    在这里插入图片描述
  3. 配置CMakeLists.txt文件
include_directories(${CMAKE_SOURCE_DIR}/include/)   #添加头文件目录
add_library(crypto
        SHARED
        IMPORTED)
set_target_properties(crypto
        PROPERTIES IMPORTED_LOCATION      
        ${CMAKE_SOURCE_DIR}/jniLibs/libcrypto.so
        )
add_library(ssl
        SHARED
        IMPORTED)
set_target_properties(ssl
        PROPERTIES IMPORTED_LOCATION     
        ${CMAKE_SOURCE_DIR}/jniLibs/libssl.so
        )
# ${CMAKE_SOURCE_DIR} 是cpp所在目录,如我的是:E:\Projects\AndroidProjects\ASProject\Application2\app\src\main\cpp,上面路径拼接就是so所在的路径,也可以用绝对路径替代
# 然后,target_link_libraries中填上libXXX.so的XXX
target_link_libraries( # Specifies the target library.
        native-lib
        # Links the target library to the log library
        # included in the NDK.
        ${log-lib} crypto ssl)
  1. 在app的build.gradle中做点修改
# 加一句 abiFilters 'armeabi-v7a' 
android {
    ...
    defaultConfig {
       ...
        externalNativeBuild {
            cmake {
                cppFlags ""
                abiFilters 'armeabi-v7a' 
            }
        }
    }

加上的作用是将原来默认编译成armeabi-v7a、x86、armeabi等多个版本的so申明只编译成armeabi-v7a版本,因为我们只提供了该版本的so,如果不加的话,编译其它版本时,会因为找不到对应的so版本而报错。

三. 总结

涉及到CMakeLists.txt的配置比较麻烦一些,用到include_directories、add_library、set_target_properties、target_link_libraries。以及最后app的build.gradle中在对应位置加abiFilters ‘armeabi-v7a’ 。整个Demo工程链接地址如下:添加链接描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值