我正在尝试使用语法框架的 Java 绑定构建模板 Android 应用程序(但是,我认为我使用的 Java 代码实际上并不重要。假设我正在尝试使用一些外部非 Android Java Android 应用程序中的代码)。
经过一些试验和错误后,我按照以下步骤使用此外部代码成功构建了一个应用程序:
.jar
为我要使用的库生成一个文件(它被称为jpgf.jar
- 将其复制到
app/libs
- 将其添加为库并验证是否
build.gradle
已更新implementation files('libs/jpgf.jar')
- 将它导入我的应用程序
MainActivity
并编写一些使用它的代码
然而,在 Android 开发中,没有什么是容易的。所以我的应用程序,经过很好的编译,在启动时崩溃并出现以下错误:
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/bho.harisont.gfdemo-8c870hpW06uEnMQHV1ILjw==/base.apk"],nativeLibraryDirectories=[/data/app/bho.harisont.gfdemo-8c870hpW06uEnMQHV1ILjw==/lib/x86, /system/lib, /system/product/lib]]] couldn't find "libjpgf.so"
简而言之,有些.so
文件找不到。现在,我不是 Java 或.so
文件专家,但我知道当我jpgf
使用 dedicated 在我的机器上安装系统范围时Makefile
,会生成一个.so
文件并将其复制到某个位置。我可能幼稚的尝试是获取该.so
文件并将其移动到jniLibs
. 我知道我将它放在正确的文件夹中,因为通过这种方式我设法更改了错误消息,但没有解决问题:此时抱怨是libjpgf.so
64 位而不是 32 位。你打赌,我的机器是 64 位的。
因此,为了帮助我,您可以回答以下两个问题:
- 如何
.so
在 64 位机器上编译 32 位版本的文件?我尝试了一些gcc
选择,但没有帮助 - 我真的需要那个预建
.so
文件吗?我看到其他人只是导入 JAR。我可以不只是这样做(甚至以某种方式导入源代码),并让 Android Studio 以它想要的方式生成它想要的所有资产吗?