64 位安卓、32 位应用程序和 32 位本机库

Posted

技术标签:

【中文标题】64 位安卓、32 位应用程序和 32 位本机库【英文标题】:64 bit android, 32 bit application with 32 bit native library 【发布时间】:2014-04-27 07:10:36 【问题描述】:

假设我们有 64 位硬件、64 位 linux 内核和 64 位 android。 所以 Zygote 将作为 64 位进程运行,并带有自己的 DVM 实例。

现在假设有一个第三方应用程序包含一个 32 位本机库,该库在运行时使用 system.loadlibrary 调用加载。

我认为当我们尝试运行这个应用程序时,zygote 将能够启动进程并且 DVM 将能够解释 classes.dex 文件,即使该 apk 是为 32 位机器构建的。但是当应用程序尝试加载 32 位本机库时会失败,因为设备上的仿生 libc 和其他库都是 64 位的。

这种理解正确吗?

【问题讨论】:

【参考方案1】:

据我所知,如果操作系统支持许多 32 位库(Java Native Interface 32 bit dll on 64 bit system),32 位原生库将在 64 位操作系统上成功运行,并且在 Android 系统中,操作系统架构为 32 位限制(@987654322 @),所以需要编译 32 位原生库。

综上所述,32bits 如果运行在 64bits OS 上,则需要 32bits 库。

【讨论】:

以上是关于64 位安卓、32 位应用程序和 32 位本机库的主要内容,如果未能解决你的问题,请参考以下文章

APK 或 App Bundle 可用于 64 位设备,但它们只有 32 位本机代码

在 Java 应用程序中混合运行 32 位和 64 位本机库

PlayStore - 以下 APK 或应用程序包可在 64 位设备上使用,但只有本机 32 位代码:1

将 32 位 android 应用程序转换为 64 位应用程序

如果在安装32位Oracle客户端组件的情况下以64位模式

Android 无法将应用程序添加到谷歌商店 APP 或 App Bundle 可用于 64 位设备,但它们只有 32 位本机代码