2011-08-02 70 views
2

我已经扎根在我的设备,然后在我的应用问题与调用Runtime.getRuntime()。EXEC()

Process p = Runtime.getRuntime().exec("su"); 

,它做工精细,我的应用程序将是根模式。然后我尝试添加无线局域网的地址空间,但它不工作,当我在终端退房,以下错误消息显示

busybox ifconfig there is not a new wlan address space. 

我尝试用以下方式:

Process p = Runtime.getRuntime().exec("su"); 
p = Runtime.getRuntime().exec("busybox ifconfig wlan0 add xxxxxxxxxxxx"); 
p.waitfor(); 

当我运行我的应用程序,吐司显示该应用程序是根模式,但没有添加wlan0。

+0

当然,如果我在终端苏写的busybox的ifconfig为wlan0添加XXXXXXXX,它工作正常,并有一个新的为wlan0地址空间。 – user760503

回答

0

这可能是因为当您运行su时,它会启动一个进程。然后你运行busybox ...,它发生在另一个不以超级用户身份启动的进程中。

尝试像

Process p = Runtime.getRuntime().exec(new String[] {"su", "-c", "busybox ifconfig wlan0 add xxxxxxxxxxxx"}); 

,即在单个命令行执行它。

+0

对不起,它不工作!没有更多的应用程序是超级用户,并且没有添加wlan地址空间。 – user760503

+0

@ user760503:哦,对不起,我忘了'-c'开关。它应该看起来像这样:'exec(“su -c \”busybox ifconfig wlan0 add xxxxxxxxxxxx \“”)' – Andy

+0

@ user760503:'man su'告诉语法是'su -c COMMAND'。 – Andy

1

不支持“su -c COMMAND”语法。为了更好的便携性,使用这样的:

p = Runtime.getRuntime().exec("su"); 
stream = p.getOutputStream(); 
stream.write("busybox ifconfig wlan0 add xxxxxxxxxxxx"); 

写()命令不存在的,是的,但我敢肯定,你会发现如何将流写入到它,也许封装输出流在BufferedOutputWriter左右。

2

,因为以“busybox”开头的进程与以“su”开头的进程不是相同的一个 。你应该是这样的:

Process process = Runtime.getRuntime().exec("su"); 
OutputStream os = process.getOutputStream(); 
DataOutputStream dos = new DataOutputStream(os); 
dos.writeBytes("busybox ifconfig wlan0 add xxxxxxxxxxxx" + "\n"); 
dos.flush(); 
相关问题