安卓 JNI : 32-bit compatability with 64-bit devices?

标签 android android-ndk java-native-interface 32bit-64bit

我有一些使用 native 组件的库,这些库是使用 NDK 为 32 位 Arm 架构构建的。

现在我们在现代设备上有 64 位处理器,所以我想知道这些库是否可以工作。在我的情况下,我没有本地库的源代码文件,只有 SO 文件,我无法为 64 位构建它们。

那么 32 位库会在 64 位处理器上运行吗?或者我必须重新构建它们?

**

编辑

** 在我的场景中,我有以下内容:

1- 我手动分发 APK,尚未发布到 Google Play。

2- 该项目有两个 native 库,一个支持 64 位和 32 位,另一个仅支持 32 位。

有没有一种方法可以让应用程序在 64 位设备上运行而无需暂时发布到 Google Play?我可以删除 64 位库以强制包管理器加载 32 位库吗?

最佳答案

32 位库在 64 位处理器上工作得很好。

只要库以正确/官方的方式安装(即,不是手动下载或从 APK 中的某些非标准部分提取,而是在 APK 中正确打包),包管理器将检测到该进程使用 32 位库,并且进程应该以 32 位模式启动。否则,进程将以 64 位模式启动,之后将无法加载 32 位库。 (如果您的 APK 包含一些 .so 文件,但不是全部,在 64 位模式下,它只会安装它们,并且该过程将在 64 位模式下启动。因此,除非所有 .so 文件都可用于特定的 ABI,不要包含其中任何一个)。

因此,如果您拥有其中一个 native 库的 64 位版本,只需删除它并仅发布 32 位版本,直到您拥有所有这些库的 64 位版本。

关于安卓 JNI : 32-bit compatability with 64-bit devices?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33919220/

相关文章:

android - 如何在 calabash android 中设置 SCRENSHOT_VIA_USB=true 。

android - 如何在 Android 主屏幕小部件中隐藏/显示按钮

android - 使用 ARM 代码的 hello world jni

java - 通过 jni 将枚举 native 类型公开给 java?

java - 加载需要 UAC 使用 jni 提升权限的 dll

android - android sdk 中的 NDK(并排)是什么?

java - 无法解析方法 setVisibility(int)

安卓 Crashlytics ndk; build.gradle 中 NdkOut 和 NdkLibsOut 的值

android - 缺少 sync_val_compare_and_swap_1

java - code::blocks 不支持 JNI 宏?