为什么我不能在 Linux 上执行 Android x86 可执行文件

Sui*_*oga 5 linux executable android elf shared-library

我正在尝试将 Android 应用程序移植到 Linux(不要笑:),但我遇到了一个问题。app_process在添加可执行权限后尝试执行 Android 可执行文件 ( )./app_process时表示它不存在,但cat ./app_process有效。

同样在我的文件管理器(Pantheon Files)中,可执行文件显示了共享库图标。

有什么方法可以让这些在 Linux 上执行。

Gil*_*il' 10

Android 和 Linux 是两种不同的操作系统。你不能只从一个中获取一个可执行文件并在另一个上运行它。

第一个障碍是内核。Android 和 Linux 基于相同的内核,但它们具有一些不同的功能。特别是,Android 提供了binders,自 3.19 版本以来,它只存在于主流内核(Linux 发行版中的内核)中。纯本机代码应用程序可能不使用绑定器,但大多数 Java 应用程序使用。

第二个障碍是动态库。如果您有一个动态链接的可执行文件,它会调用动态链接器。Android 和 Linux 具有不同的动态链接器,如果动态链接器不存在,您会得到与可执行文件本身不存在一样的错误

如果您复制动态链接器、它需要的配置文件和本机库,那么您应该能够运行大多数本机程序。您需要复制大部分/system,并且副本需要位于/system

如果您想运行 Java 应用程序,那就更复杂了。您需要 Java 运行时环境 (Dalvik/ART),并且大多数应用程序也需要一些 Android 守护进程(一些本机代码应用程序也需要那些恶魔)。

结果是,虽然两个系统可以共存于一个内核,但这需要一个足够新的内核,或者一个 Android 内核(一个 Android 内核可以运行大多数 Linux 应用程序),并且两个操作系统都需要安装——你不能只需从一个运行一个应用程序。

我不知道在 Linux 上有任何现成的 Android 安装程序。然而,也有相反的安装程序,特别是LinuxonAndroid

如果目标是在 Linux 系统上运行 Android 应用程序,那么目前最简单的方法是在模拟器中运行它,模拟器是Android 开发工具的一部分