【问题标题】:Is it possible to write applications on android using only C?是否可以仅使用 C 在 android 上编写应用程序?
【发布时间】:2014-08-07 05:40:06
【问题描述】:

现在请稍等片刻,然后再将其标记为重复,因为这是一个非常具体的问题。

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

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

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

  1. 如果您在设备上拥有 root 权限,为什么您不能从本机系统二进制文件中执行相同的操作?

所以,这当然会是一个痛苦的经历,但技术上有什么理由不能完全用 C 语言编写应用程序,而不使用 android 运行时?

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

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

【问题讨论】:

  • 你到底想做什么...?
  • @elcuco 实际上什么都没有;有人在 SDL 邮件列表上问的是:您能否使用嵌入式 android 并利用 android 设备驱动程序而不通过 android 运行时与它们进行交互。我直接的直觉是不……但试图证明这一点,我找不到任何具体的理由来解释为什么答案是否定的。
  • 你不能这样做。所有设备都通过相应的守护进程进行管理。您不能(通常)打开第二个句柄。

标签: android


【解决方案1】:

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

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

【讨论】:

  • 从技术上讲,设备驱动程序位于内核中;为什么不能通过系统调用访问硬件?
  • 是的。您在内核中创建设备驱动程序,它允许用户空间使用设备(通常是字符设备)进行通信。当我这样做的时候,我所要做的就是打开/dev/ttyS2,但原理是一样的。
猜你喜欢
  • 2011-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-26
  • 1970-01-01
  • 2022-06-16
  • 1970-01-01
相关资源
最近更新 更多