【问题标题】:is there any way to use compiled 32 bit native library as 64 bit lib有什么方法可以将编译的 32 位本机库用作 64 位库
【发布时间】:2020-01-13 13:29:10
【问题描述】:

我正在尝试在 Play 商店上发布我的旧 android 应用程序,但遇到了 64 位本机 lib 要求的问题。

所以我的 Android Studio 项目是用 Java 编写的,并且它在 armeabi 下确实有一个名为 libgba.so 的本机库。您可能已经知道 Google Play 不接受没有 x64 库的 APK。我的项目只有 32 位编译的本机库。不幸的是,我没有本机代码来再次构建 lib。

APK 在具有给定 32 位本机库的所有设备上运行良好,但是当我在 jniLibs 下的 x64 (arm64-v8a) 的 abi 文件夹中创建并粘贴该 32 位库时,出现如下错误试图加载的库。

java.lang.UnsatisfiedLinkError: dlopen failed: "/data/app/com.advanceDragon.superSaiyanGoku-2aOWxg51Zl-_I9XC0pDcwg==/lib/arm64/libgba.so" is 32-bit instead of 64-bit

我想知道是否有任何方法可以在 armeabi 下加载 lib,并且在 arm64-v8a 下也有 lib,但它不应该被加载(仅适用于 Google play 的 64 位要求)。或者如果有其他选择,请向我建议。谢谢。

**编辑:**

我尝试使用System.load 从它的绝对路径加载.so lib,但我不知道它的确切存储位置。

String path = "/data/data/" + packageName + "/lib/"; System.load(path + "libgba.so");

【问题讨论】:

  • 联系开发原生库的开发者,你无能为力,afaik。
  • 如果设备在 x86 上运行,arm 库将无法工作——ISA 完全不同。 32 位 x86 可能工作,因为 64 位 ISA 是 32 位的超集。您可以尝试在两个地方打包相同的库。但是你最好只重新编译为 64 位。如果它来自库,请从源代码重新编译库。如果您正在许可库并且没有源代码,请与您的供应商联系。
  • 本机库开发人员不可用。这就是我在 stackoverflow 上寻求帮助的原因
  • 你从哪里得到图书馆的?如果实在无法重建,则需要更换库。
  • 我从一家名为 Liquid Mobile 的公司获得了那个库,该公司已经构建了名为 Gba(Gameboy Advance 模拟器)的应用程序。现在它们不可用。连联系都联系不上。

标签: android android-ndk .so


【解决方案1】:

从 64 位文件夹中删除 32 位库,然后将其留在 32 位 lib 文件夹中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-27
    • 2012-11-18
    • 2011-11-04
    • 1970-01-01
    • 2011-04-23
    • 2020-11-25
    • 2011-04-12
    • 1970-01-01
    相关资源
    最近更新 更多