将root权限授予应用程序

时间:2012-04-18 06:24:36

标签: android bluetooth android-ndk sdp

我有一个由原生部分和更高部分组成的应用程序 层

因此,需要授予root权限才能运行某些权限 本地功能。

正如我之前发布的文章,我添加了一段从Bluez获取的代码 utils的(hidd.c)。

if (bind(sk, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
    close(sk);
    return -1;
   }

代码已经被NDK构建为.so。

不幸的是,它一直返回-1而errno是13,这意味着 权限被拒绝。

一些有经验的开发人员(谢谢你在这里)提到了这一点 发生错误,因为此应用程序没有足够的权限。

它“不应该”像是

Process process = Runtime.getRuntime()。exec(“su”);

我认为这意味着你拥有系统许可但是你的 申请不是。 (如果我错了,请告诉我)

有没有办法授予应用程序拥有root权限?

任何回复/线索/提示都将受到高度赞赏。

问候 -

萨姆

2 个答案:

答案 0 :(得分:1)

我想我可以帮助你。

我们在这里......

void gainRoot()
{
    Process chperm;
    try {
        chperm=Runtime.getRuntime().exec("su");
          DataOutputStream os = 
              new DataOutputStream(chperm.getOutputStream());
            os.writeBytes("chmod 777 /dev/video0\n");
            os.flush();

            os.writeBytes("exit\n");
            os.flush();

            chperm.waitFor();

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

这是我通常用来更改根文件权限的函数。

执行su时,将使用root权限创建新进程。因此,使用此Process可以执行任何root操作。需要遵循一些特定的语法。如上例所示。

所以你要做的就是将代码的绑定部分构建为单独的可执行文件,并将其放在system / bin或保存正常可执行文件的地方。假设可执行文件的名称是bind123,而不是

            os.writeBytes("chmod 777 /dev/video0\n");
            os.flush();

替换为

            os.writeBytes("bind123\n");
            os.flush();

在上面的代码中。

这应该有效。可能一旦这个工作,我们可以尝试将它与应用程序集成,而不依赖于可执行文件。我希望我不要混淆你。如果有一些清晰度是neede,请告诉我....最好的......

答案 1 :(得分:0)

您不需要root绑定到端口&gt; = 1024。您只需INTERNET个文件中的ApplicationManifest.xml权限。