首页 > 解决方案 > 使用 JNA 访问 .so 文件搜索本机库 (libjnidispatch.so) 时出错

问题描述

请注意,这个问题是我前段时间在这里提出的另一个问题的后续问题。

我想达到什么目标?

我想使用 JNA(带有 Android Studio 的 4.5.2 版)来实现以下目标:

  1. 首先,我想从给定的 .so 文件中获取所有可调用函数的列表。
  2. 一旦我有了这个列表,我想调用一个特定的函数

到目前为止我做了什么?

到目前为止,我的测试应用程序的“MainActivita.java”文件的代码如下所示:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        String MyLibraryString = MyLibrary.Instance.toString();
    }

    public interface MyLibrary extends Library
    {
        MyLibrary Instance = (MyLibrary ) Native.loadLibrary("nameOfMyLibraryWithoutSoExtension", MyLibrary.class);
    }
}

我面临什么问题?

我曾经收到一条错误消息,指出在我的 Android 设备上找不到我的库,但在将其放入“jniLibs”子文件夹后,我的应用似乎能够检测到它。不幸的是,我现在收到错误消息

java.lang.UnsatisfiedLinkError: 在资源路径 (.) 中找不到本机库 (com/sun/jna/android-aarch64/libjnidispatch.so)

每当我尝试在我的设备上启动应用程序时。我已经尝试从 JNA.jar 文件中提取文件“libjnidispatch.so”并将其放在其各自的子文件夹中(如此所述),但这不起作用。

我的应用程序的子文件夹“app\src\main\jniLibs”的文件夹结构如下所示:

app\src\main\jniLibs\arm64-v8a\myLibrary.so 
... 
app\src\main\jniLibs\arm64-v8a\libjnidispatch.so

app\src\main\jniLibs\armeabi\myLibrary.so 
... 
app\src\main\jniLibs\armeabi\libjnidispatch.so

app\src\main\jniLibs\armeabi-v7a\myLibrary.so 
... 
app\src\main\jniLibs\armeabi-v7a\libjnidispatch.so

app\src\main\jniLibs\mips\myLibrary.so 
... 
app\src\main\jniLibs\mips\libjnidispatch.so

app\src\main\jniLibs\mips64\myLibrary.so 
... 
app\src\main\jniLibs\mips64\libjnidispatch.so

app\src\main\jniLibs\x86\myLibrary.so 
... 
app\src\main\jniLibs\x86\libjnidispatch.so

app\src\main\jniLibs\x86_64\myLibrary.so 
... 
app\src\main\jniLibs\x86_64\libjnidispatch.so

任何帮助将不胜感激。

标签: androidandroid-studioshared-librariesjna

解决方案


推荐阅读