当前位置: 首页 > news >正文

android studio引用so库

在工程中编译好的so库文件将在原始编译工程对应目录下:build/intermediates/cxx/Debug/xxxxxx/obj/

其目录结构如上所示,包含生成的四个版本,每个文件夹下均包含c/c++源码编译成的Android版本的libnavi.so库和提供应用接口的libnavi-lib.so库。

后续应用需要将obj下面的文件全部拷贝到需要的工程目录下使用,不是只用到libnavi-lib.so;否则会报错:java.lang.UnsatisfiedLinkError: dlopen failed: library "libnavi.so" not found:

so库的引入步骤:

由于这个是算法层调用,一般将其单独引用在一个module中,往往会新建module,需要注意以下几点,否则会报错。

1、新建的module一般直接采用No Activity,待新建后将上述的文件夹放在该模块src/main下,改名为jniLibs,其结构如下:

直接运行报错:

Execution failed for task ':app:processDebugResources'. > A failure occurred while executing com.android.build.gradle.internal.res.LinkApplicationAndroidResourcesTask$TaskAction > AAPT2 aapt2-4.2.2-7147631-windows Daemon #0: Unexpected error during link, attempting to stop daemon. This should not happen under normal circumstances, please file an issue if it does.

报这个错误是因为:主工程依赖的子工程不是一个library导致的

apply plugin: ‘com.android.application’ 改为 apply plugin: ‘com.android.library’

<AAPT2 aapt2-4.2.1-7147631-linux Daemon 异常_this should not happen under normal circumstances,-CSDN博客>

2、每个工程只需要一个aplication,新建的module应该是作为主工程依赖的子工程的,需要设置其为library,同时要删除其applicationId,否则会报错。

3、子工程的引入

需要在主工程的build.gradle里的dependencies引入子工程,

implementationproject(':navigation')

4、在子工程中申明引用c/c++源码功能函数接口

首先调用so库

static{

System.loadLibrary("navi-lib");//这里的`navi`是你的`.so`文件的名称,不包含前缀`lib`和后缀`.so`

}

然后申明调用接口函数

public native String helloworld();

类似采用native依次将需要调用的函数引用进来,便于后续使用。

http://www.lryc.cn/news/493476.html

相关文章:

  • 2024年信号处理与神经网络应用(SPNNA 2024)
  • wxWidgets-ImageView
  • 第1章-JVM和Java体系架构
  • windows 服务器角色
  • [OpenHarmony5.0][Docker][环境]OpenHarmony5.0 Docker编译环境镜像下载以及使用方式
  • C#中判断两个 List<T> 的内容是否相等
  • Linux环境下配置neo4j图数据库
  • Windows 11 搭建 Docker 桌面版详细教程
  • Pytest-Bdd-Playwright 系列教程(13):钩子(hooks)
  • dns 服务器简单介绍
  • Neo4j图形数据库-Cypher中常用指令
  • linux安全管理-防火墙配置
  • 什么是BIOS
  • c++视频图像处理
  • 音视频入门基础:MPEG2-TS专题(8)——TS Header中的适配域
  • 基于stm32单片机的教室节能系统设计
  • mini主机通过内网穿透做成服务器
  • 智能桥梁安全运行监测系统守护桥梁安全卫士
  • Selenium和Pyppeteer有什么区别?
  • 82从零开始学Java之异常处理机制简介
  • Git上传本地项目到远程仓库(gitee/github)
  • 华为仓颉编程环境搭建
  • UE5 Line Trace By Channel(通道线条追踪)节点
  • DroneCAN 最新开发进展,Andrew在Ardupilot开发者大会2024的演讲
  • UDP客户端服务器通信
  • 适合中小型公司的自动化测试的测试框架,OpenSourceTest
  • 实现跨语言通信:Rust 和 Thrift 的最佳实践
  • js判断空对象
  • visionpro官方示例分析(一) 模板匹配工具 缺陷检测工具
  • PyCharm中Python项目打包并运行到服务器的简明指南