jni开发-生成多个so库

本文介绍如何使用CMakeLists生成多个so,依赖多个第三方so库。

生成多个so库

  1. 添加要生成的so。

    如上图要生成两个名为:libpciesdf.so、libpciexdm.so,添加要生成的so库名称使用add_library

    add_library说明:
    (一)添加生成的so库名称:“pciesdf”、“pciexdm”。

    (二)设置库的加载方式。
    STATIC表示静态的.a的库。 SHARED表示.so的动态库库。

    (三)源文件的相对路径。
    实现代码。 tool.c:工具类,sdfapi.c:生成libpciesdf.so的实现源码,xdmapi.c:生成libpciexdm.so的实现源码。

  2. 添加源目录

    源码和头文件都放在了cpp目录下。

引入第三方动态库

  1. 添加要引入的第三方动态库名称
    libpciesdf.so的实现源码中需要引用libtsrs10.so,libpciexdm.so的实现源码中需要引用libxdm10.so。
    添加要引入库的名称,指定so所在目录。

    使用add_library添加引入的第三方库的名称。STATIC表示静态的.a的库。 SHARED表示.so的动态库库。
    使用set_target_properties,设置要连接的so的相对路径。
    ${CMAKE_SOURCE_DIR}:表示CMake.txt的当前文件夹路径。
    ${ANDROID_ABI}:编译时会自动根据CPU架构去选择相应的库

  2. 设置要链接的库文件的名称

    CMakeLists.txt全部代码:


# Sets the minimum version of CMake required to build the native library.#cmake_minimum_required(VERSION 3.4.1)
cmake_minimum_required(VERSION 2.8.12.2)#生成的so库在指定路径
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/jniLibs/${ANDROID_ABI}) #指定路径#动态方式加载 STATIC:表示静态的.a的库 SHARED:表示.so的库。
add_library( # Sets the name of the library.pciesdf#生成的so库的名称# Sets the library as a shared library.SHARED# Provides a relative path to your source file(s).tool.csdfapi.c)add_library( # Sets the name of the library.pciexdm#生成的so库的名称# Sets the library as a shared library.SHARED# Provides a relative path to your source file(s).tool.cxdmapi.c)add_library( # Sets the name of the library.pcieukey#生成的so库的名称# Sets the library as a shared library.SHARED# Provides a relative path to your source file(s).tool.cUkey.c)#添加源码目录
target_include_directories(pciesdf PRIVATE ${CMAKE_SOURCE_DIR}/cpp)
target_include_directories(pciexdm PRIVATE ${CMAKE_SOURCE_DIR}/cpp)
target_include_directories(pcieukey PRIVATE ${CMAKE_SOURCE_DIR}/cpp)#引入第三方动态库#动态方式加载 STATIC:表示静态的.a的库 SHARED:表示.so的库。
add_library(pcietsrs10 SHARED IMPORTED)
#设置要连接的so的相对路径 ${CMAKE_SOURCE_DIR}:表示CMake.txt的当前文件夹路径 ${ANDROID_ABI}:编译时会自动根据CPU架构去选择相应的库
set_target_properties(pciesdf PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}/libtsrs10.so)#动态方式加载 STATIC:表示静态的.a的库 SHARED:表示.so的库。
add_library(pciexdm10 SHARED IMPORTED)
#设置要连接的so的相对路径 ${CMAKE_SOURCE_DIR}:表示CMake.txt的当前文件夹路径 ${ANDROID_ABI}:编译时会自动根据CPU架构去选择相应的库
set_target_properties(pciexdm PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}/libxdm10.so)#动态方式加载 STATIC:表示静态的.a的库 SHARED:表示.so的库。
add_library(pciexdja SHARED IMPORTED)
#设置要连接的so的相对路径 ${CMAKE_SOURCE_DIR}:表示CMake.txt的当前文件夹路径 ${ANDROID_ABI}:编译时会自动根据CPU架构去选择相应的库
set_target_properties(pciexdm PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}/libxdjakey.so)#默认配置项,不用修改
find_library( # Sets the name of the path variable.log-lib# Specifies the name of the NDK library that# you want CMake to locate.log)#设置要链接的库文件的名称
target_link_libraries( # Specifies the target library.pciesdf# 引用的第三方库pcietsrs10# Links the target library to the log library# included in the NDK.${log-lib})#设置要链接的库文件的名称
target_link_libraries( # Specifies the target library.pciexdm# 引用的第三方库pciexdm10# Links the target library to the log library# included in the NDK.${log-lib})#设置要链接的库文件的名称
target_link_libraries( # Specifies the target library.pcieukey# 引用的第三方库pciexdja# Links the target library to the log library# included in the NDK.${log-lib})

AndroidStudio Jni开发-生成多个so库相关推荐

  1. AndroidStudio jni开发入门及打包so库和jar包

    AndroidStudio jni开发入门及打包so库和jar包 配置ndk开发环境 下载NDK,LLDB,CMake工具包 配置系统环境变量 在原有项目中进行jni开发环境配置 Androidstu ...

  2. Android JNI开发生成.h头文件问题(转)

    在JNI开发中,首先要将建立的anroid类编译成.h文件,编译用到命令javah,由于第一次用,以前对java的编译过程也不怎么了解,所以走了好多弯路,网络没有对这一步的详细介绍,这里讲一下: 通过 ...

  3. androidstudio jni开发_初识NDK开发(一)

    " 前言:初学逆向 请多多指教 昨天在看雪论坛发了篇文章,被标记了优秀,不由得感叹 这一个月没有白学! 剩下还有11个月 冲了" 学习到的内容 - 1.了解了什么是NDK,以及在a ...

  4. androidstudio jni开发_高考失利落榜,7年Android开发现已年薪60w,我的逆袭之路想说给你听...

    今天是高考的日子,首先祝愿所有高考学子都能金榜题名.旗开得胜. 大学的目标 这篇文章,想讲讲我的一些经历故事,如果你想入行编程.或者在一两年编程经验的迷茫时期.相信这篇文章可以给你带来帮助. 回想7年 ...

  5. android studio jni 开发生成.h

    命令: D:\AndroidStudioProject\testJNI\app\src\main\java\com\example\binbin\testjni>javac myJNI.java ...

  6. JNI开发笔记(六)--一种更规范的so库生成方法

    一种更规范的JNI工程写法 引 前言 1. MainActivity中的两个重要的语句 2. 建立Util类来替代MainActivity 3. 在MainActivity中验证JNI工程并生成so库 ...

  7. 安卓 jni 开发 —— Android Studio 打包 so 的坑

    博客: 安卓之家 微博: 追风917 CSDN: 蒋朋的家 简书: 追风917 安卓开发坑无限 我心依旧,不变 向前 jni 开发的坑 这两天要搞安卓下的串口读写,这块涉及到了 jni 开发,我找了两 ...

  8. 鸿蒙so系统,鸿蒙手机版JNI实战(JNI开发、SO库生成、SO库使用)

    鸿蒙JNI开发现状 现阶段,不仅鸿蒙JNI相关的开发资料较少,而且Phone相关的JNI开发资料几乎没有,这对于新入行的鸿蒙开发者们来说,非常不友好. 也可能会给Android工程(使用了SO库的工程 ...

  9. JNI开发笔记(七)--aar库的生成和调用

    aar库的生成和调用 引 前言 1. 新建一个空工程 2. 新建一个Module 3. 移植JNI工程到Module中 4. 生成aar库与so库 5. 在另一个工程中调用aar库 引 JNI开发笔记 ...

最新文章

  1. MySQL库目录下db.opt文件的作用
  2. oracle之 变更OS时间对数据库的影响
  3. 如何快捷配置java路径_eclipse常用快捷设置
  4. java线程池参数含义
  5. 微软所谓的无人工介入的自动的机器翻译系统
  6. matlab regionprops区域属性信息
  7. c# 无损高质量压缩图片代码
  8. sf | 空间矢量对象的几何信息处理方法
  9. 定义一个工资变量c语言,《工资管理》c语言程序设计.doc
  10. 【Research】Accounting-会计
  11. 施耐德M241 plc与IAI伺服电缸通过ethernet/ Ip通讯,plc与伺服套装,送软件和资料
  12. c语言思维导图(学习笔记)
  13. 嵌入式Linux设置开机自动运行程序(基于BusyBox init)
  14. 【视角】限贷传闻横扫楼市 专家看空房地产业
  15. Wordpress限制游客访问权限(免插件) 实现禁止游客访问功能
  16. QT构建编译出现错误error: undefined reference to 的解决办法
  17. 2021年深圳市产业发展与创新人才奖申报条件及材料
  18. C# Action 使用
  19. Android应用程序的开发
  20. luna服务器维护,luna洗脸仪发霉怎么办 日常使用完要保持干燥

热门文章

  1. LoRa节点ABP入网方式怎么样
  2. 让Kodu动起来---Kodu少儿编程第五天
  3. 【香橙派4B】1、重刷系统
  4. [Canvas系列]Canvas简单线条绘制_02
  5. kallsyms_lookup_name使用简介
  6. 小酷智慧地图3D导览v1.0.87打卡定位 地图打卡
  7. 中级会计 科学计算机,听说中级会计机考系统计算器你还不会使用?还不快点关注...
  8. 计算机操作系统——(第四章) 存储器管理/内存管理
  9. 【解惑】女生适合干计算机什么方面的工作
  10. 通过nodejs 服务器读取HTML文件渲染到页面