【发布时间】:2023-04-05 19:42:01
【问题描述】:
我正在开发一个 Android 应用程序,它将调用由不同的 Android NDK 应用程序创建的 .so 文件。
我在我的项目中创建了以下文件夹结构并复制了 .so 文件,如下所示:
|--app:
|--|--src:
|--|--|--main
|--|--|--|--jniLibs
|--|--|--|--|--armeabi
|--|--|--|--|--|--libmylib.so
|--|--|--|--|--x86
|--|--|--|--|--|--libmylib.so
我通过我的应用程序通过以下代码调用这个库:
static {
System.loadLibrary("mylib");
}
然后我通过以下代码从这个共享对象调用方法:
String str = stringFromJNI();
这不起作用,因为程序会按如下方式查找损坏的函数名称:
com.example.androidlibcall.MainActivity.stringFromJNI() 我的 .so 函数将使用不同的包名称,因此会生成不同的函数名称。 我不太确定从外部库调用函数需要做什么,我假设我可以创建自己的库并利用 dlopen() 加载外部库并对其进行调用,但想知道是否有是否有其他方法来实现这一点。
我的最终目标是能够创建可以调用移动设备上预先存在的库的应用程序,但是由于我是 NDK/Android 的新手,我不确定什么是最好的方法并且还没有找到了可以使用的好例子。 许多先前存在的类似问题似乎都在处理似乎不再适用的旧版 Android Studio。
我在 Windows 7 机器上使用最新版本的 Android Studio (3.1.2) 和 Gradle 4.4。
请指教。
谢谢!
【问题讨论】:
标签: android-studio android-ndk java-native-interface