0

我正在开发一个有根的 Android 2.3。在我的应用程序中,使用 jni 机制,我调用了需要 root 权限才能运行的本机 (c/c++) 函数,这就是它总是失败的原因(即使我的手机已 root - 因为特定的进程/应用程序需要授予 root 权限) .

我想将该函数移动到一个外部可执行文件,该可执行文件将通过我将从 java ( Runtime.getRuntime().exec("sudo ...");)运行的命令“sudo exec_name”在 linux 上运行

所以

1)如何编译本机可执行文件?(不是像往常一样的库 [.so])

2) 在我有一个独立的可执行文件后,我必须把它放在系统的什么地方,并拥有什么权限?

4

1 回答 1

1

要编译本机可执行文件,请使用include $(BUILD_EXECUTABLE)而不是include $(BUILD_SHARED_LIBRARY). NDK调用中有一个示例,test-libstdc++它显示了如何构建最简单的本机可执行文件。

然后你需要把它放在可执行位置,比如/data/local并调用chmod 777以使其可执行。之后,您可以通过 shell 运行它。

我想将该函数移动到一个外部可执行文件,该可执行文件将通过我将从 java (Runtime.getRuntime().exec("sudo ...");) 运行的命令“sudo exec_name”在 linux 上运行

在这种情况下,您的工作流程将如下所示:

  • 您将代码编译为本机可执行文件并将其放入应用程序资产中
  • 在开始时,您需要将 yoru 可执行文件从资产复制到/system/bin
  • 允许使用chmod 777
  • 实际运行您的可执行文件

前三点应该只做一次。

于 2012-11-29T14:51:07.787 回答