仅本机代码可以作为独立应用程序在 Android 上运行吗

pie*_*fou 3 java-native-interface android android-ndk

我们想要将一个巨大复杂的本机程序迁移到Android系统,将其作为后台服务运行,接受使用JNI和IPC从Java程序发送的命令。然而,Android NDK 声明了以下内容:

请注意,NDK 不支持您开发纯本机应用程序。Android 的主要运行时仍然是 Dalvik 虚拟机。

这是否意味着我们无法在 Android 上运行独立的纯本机应用程序作为后台服务?原生代码只能以库的形式存在,通过JNI加载到虚拟机中?

Chr*_*ton 5

NDK 本身仅用于创建库,但如果您进行一些网络搜索,您会发现至少有两组包装器脚本或指令(ab)使用其工具链来制作与 android 的仿生 libc 链接的独立可执行文件(您可以使用它)无法从非 Android Arm 工具链中获取)。

谷歌人并不鼓励人们这样做。不幸的是,他们对 android 的愿景仅包括 java 应用程序,并支持可选的本机库 - 它不包括安装或启动本机可执行文件的任何“稳定”方法,从某种意义上说,他们警告您今天可能能够使用的方法可能无法在新版本中继续工作。这确实太糟糕了,因为这意味着放弃该设备的许多通用计算机潜力。

  • 好吧,使用当前的 NDK,还可以构建“纯本机”应用程序,尽管这仅意味着*您的*代码只是本机的(不需要 Java 包装器),系统将提供 Java 包装器(NativeActivity)。您仍然会在虚拟机中运行。 (3认同)