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依次将需要调用的函数引用进来,便于后续使用。

相关推荐
憧憬成为java架构高手的小白21 分钟前
黑马八股--spring框架学习
java·学习·spring
唐青枫1 小时前
Java Picocli 实战详解:用注解写出好用的命令行工具
java
X-⃢_⃢-X1 小时前
四、OpenFeign远程调用
java·微服务·springboot·springcloud
减瓦1 小时前
深入 Quarkus:云原生时代 Java 的重生之路
java·开发语言·云原生
杨运交1 小时前
[053][核心模块]Java枚举缓存与ORM集成实践
java·开发语言·缓存
Lesile2 小时前
Interview#1 历史演进:MVC · MVP · MVVM · MVI架构详解
android·android jetpack
繁星蓝雨2 小时前
C++设计原理——异常处理
java·c++·异常处理·noexcept·throw·try catch
杉氧2 小时前
Flutter 像素级还原实战:用 CustomPaint 与 Bezier 曲线手绘精致图针
android·前端·flutter
BerrySen1782 小时前
一个Java项目改成AI流程后,最难的部分完全变了
java·大数据·人工智能·可观测性·大模型应用开发·工程思维
程序猿秃头之路2 小时前
DDD 系列:DTO、VO、DO、Entity 怎么区分
java·ddd·领域驱动设计