是否可以仅使用C在Android上编写应用程序?

Dou*_*oug 5 android

现在等一下,然后再将其标记为重复,因为这是一个非常具体的问题.

我不是在问你是否可以使用另一种使用NDK绑定的语言编写应用程序; 我想知道的是:

  1. 在硬件层面,dalvik如何与Android设备上的Linux内核进行交互?

根据我的理解,(1)的答案是因为android基本上是一个Linux系统,这是通过系统调用完成的.也就是说,在某种程度上,davlik/art VM 必须通过C API与C Linux内核进行交互.

  1. 如果您的设备上有root权限,为什么你能不能从本地系统二进制做同样的事情?

所以,当然这将是一个痛苦的经历,但从技术上讲,有什么理由为什么不用纯粹在C中编写应用程序,而根本不使用android运行时?

(注意:不是没有运行时;显然必须存在运行时才能执行各种操作,例如设备初始化;但是一个独立的二进制文件,它不与运行时交互).

(我可以想到为什么会出现这种情况的几个原因,特别是需要对各种硬件进行独占硬件访问的运行时,但我找不到任何关于它的具体文档)

elc*_*uco 1

有可能,这就是守护进程在 Android 上的工作方式(例如 RILD)。但是,您无法访问 Android 设施(图形、位置等),因为没有来自 C 的 API。

请注意,为了与 Android API 对话,您的进程需要是 zygote 的子进程。如果您从 ADB shell 或 init 生成进程,您将不会成为fork()zygote,并且无法直接访问 JVM。