如何为root的Android编译纯本机可执行文件

时间:2012-11-29 14:42:33

标签: java android c++ java-native-interface

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

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

运行

所以

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

2)在我有一个独立的可执行文件之后,我必须在系统中放置它并具有哪些权限?

1 个答案:

答案 0 :(得分:1)

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

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

  
    

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

  

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

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

前三点应该只进行一次。