0

是否可以从应用程序对 android 内核进行系统调用?示例:system(cmd) 在 C 程序中,我正在使用 JNI 在我的 android 活动中访问它。

4

1 回答 1

0

答案:系统调用——是的。调用 system() - 一种。

两者不是一回事。系统调用由内核提供,Bionic 为它们提供了一个瘦包装器,与普通 LibC 在 vanilla linux 中包装它们的方式非常相似。

然而,system() 不是系统调用,而是 LibC 提供的一个函数,实际上相当于 fork(),然后在子进程中 execl("/system/bin/sh", "...args") 和等待。

粗略查看 Android 源代码显示 Bionic 不会导出 system()。但您可以手动实现它。然而,更重要的是,您为什么要这样做?从技术上讲,您可以加载 JNI(Java 中的 System.loadLibrary),然后让本机方法执行任何操作 - 但这会使您的生活变得非常复杂,尤其是考虑到您的应用程序是沙盒的并且您不能依赖 shell 命令的正常行为(如大多数是由设备上的工具箱提供的,如果有的话)。

于 2013-04-03T17:57:51.400 回答