有谁知道怎么做? 这是我的代码:
try {
Process p = Runtime.getRuntime().exec("su");
p.waitFor();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
Process p = Runtime.getRuntime().exec(
"/system/bin/netcfg > /sdcard/netcfg.txt");
p.waitFor();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
是的,我知道我没有进行任何测试,看看用户是否真的接受了超级用户对话框,但这只是对我自己的测试。
答案 0 :(得分:1)
这不是你的完整解决方案,但这是我前一段时间尝试的一些代码。它可以运行任意命令(代码在这里使用ls
)。从屏幕截图中可以看到,超级用户对话框会弹出ls
。
我最初尝试做的是打开一个带有sh
的shell,然后在该shell中运行命令,以便每次只显示初始sh
超级用户对话框。我看过似乎这样做的应用程序,但我仍然不确定它是如何完成的。我怀疑这也是你正在寻找的,但至少使用这段代码你可以运行命令。 :)
无论如何,这是代码。将它粘贴到一个骨架Android应用程序中它应该可以工作。
public class ShellCommandTestActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final StringBuilder log = new StringBuilder();
try{
ArrayList<String> commandLine = new ArrayList<String>();
commandLine.add("su");
commandLine.add("-c");
commandLine.add("ls");
Process process = Runtime.getRuntime().exec(commandLine.toArray(new String[0]));
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
for (String command : commandLine){
Log.i("SU_Test", command);
}
String line;
while ((line = bufferedReader.readLine()) != null){
log.append(line);
log.append("\n");
}
}
catch (IOException e){
Log.e("SU_Test", "Fail: " + e.getMessage());
}
Log.i("SU_Test", log.toString());
}
祝你好运!
答案 1 :(得分:0)
刚刚测试过,它不适用于Nexus S,OS 2.3.6。
<强>更新强>
您的手机已根植su
应该有效。您看到的问题是密码对话框未显示。这似乎适用于一些有根的手机,但可能是自定义固件的功能。
您可以做的是启动su
进程,通过对话框询问用户密码,然后将其输出到su
进程。
Process process = new ProcessBuilder()
.command("su", "android.com")
.redirectErrorStream(true)
.start();
// Dialog for asking pass here
OutputStream out = process.getOutputStream();
out.write(password);
答案 2 :(得分:-1)
我从来没有尝试过自己,但是如果没有su权限,你可以在没有su权限的应用程序中做su这样的东西。所以我想你需要做的第一件事是为你的应用程序请求su权限:
// arbitrary number of your choosing
final int SUPERUSER_REQUEST = 2323;
// superuser request
Intent intent = new Intent("android.intent.action.superuser");
// tell Superuser the name of the requesting app
intent.putExtra("name", "Shell");
// tel Superuser the name of the requesting package
intent.putExtra("packagename", "koushikdutta.shell");
// make the request!
startActivityForResult(intent, SUPERUSER_REQUEST);
然后你可以:
Runtime.getRuntime().exec("su -c <your privileged command here>");
(从http://forum.xda-developers.com/showpost.php?p=2954887&postcount=7复制)