1

我正在尝试使用语法框架的 Java 绑定构建模板 Android 应用程序(但是,我认为我使用的 Java 代码实际上并不重要。假设我正在尝试使用一些外部非 Android Java Android 应用程序中的代码)。

经过一些试验和错误后,我按照以下步骤使用此外部代码成功构建了一个应用程序:

  1. .jar为我要使用的库生成一个文件(它被称为jpgf.jar
  2. 将其复制到app/libs
  3. 将其添加为库并验证是否build.gradle已更新
     implementation files('libs/jpgf.jar')
    
  4. 将它导入我的应用程序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.so64 位而不是 32 位。你打赌,我的机器是 64 位的。

因此,为了帮助我,您可以回答以下两个问题:

  • 如何.so在 64 位机器上编译 32 位版本的文件?我尝试了一些gcc选择,但没有帮助
  • 我真的需要那个预建.so文件吗?我看到其他人只是导入 JAR。我可以不只是这样做(甚至以某种方式导入源代码),并让 Android Studio 以它想要的方式生成它想要的所有资产吗?
4

0 回答 0