[問題] 用app 執行底層的 shell command
今天試了一整天,有點崩潰..開發環境 Android studio 2.1,試了網路上範例
device 是 nexus 6P 安卓7.0
onCreate(){
TextView tex = (TextView)findViewById(R.layout.textView);
try {
execCommand("ls");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void execCommand(String command) throws IOException {
Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec(command);
try {
if (proc.waitFor() != 0) {
System.err.println("exit value = " + proc.exitValue());
}
BufferedReader in = new BufferedReader(new InputStreamReader(
proc.getInputStream()));
StringBuffer stringBuffer = new StringBuffer();
String line = null;
while ((line = in.readLine()) != null) {
stringBuffer.append(line+"-");
}
tex.setText(stringBuffer.toString());
} catch (InterruptedException e) {
System.err.println(e);
}
}
他可以印出執行完 "ls"後的字串,並展示在 app 上,其他
cat /proc/sys/net/ipv4/ip_forward 也可以展示出來
-----------------------------------------------------------------------------
可我想要寫入 echo 0 > /proc/sys/net/ipv4/ip_forward 卻一直無法成功,以下是 code
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
execCommand("echo 0 > /proc/sys/net/ipv4/ip_forward\n");
}
catch(IOException e){
e.printStackTrace();
}
}//end onCreate
public void execCommand(String command) throws IOException {
java.lang.Process su = Runtime.getRuntime().exec(command);
DataOutputStream outputStream = new
DataOutputStream(su.getOutputStream());
outputStream.writeBytes("echo 0 > /proc/sys/net/ipv4/ip_forward\n");
outputStream.writeBytes("exit\n");
outputStream.flush();
}
------------------------------------------------------------------------------
另外的嘗試是依樣以上面的程式範例
execCommand("echo 0 > /proc/sys/net/ipv4/ip_forward\n");
改成
execCommand("su");
Android studio 出現以下 error:
W/System.err: java.io.IOException: Cannot run program "su":
error=13, Permission denied
com.example.user.myapplication W/System.err:
at java.lang.ProcessBuilder.start(ProcessBuilder.java:983)
com.example.user.myapplication W/System.err:
at java.lang.Runtime.exec(Runtime.java:691)
com.example.user.myapplication W/System.err:
at java.lang.Runtime.exec(Runtime.java:524)
com.example.user.myapplication W/System.err:
at java.lang.Runtime.exec(Runtime.java:421)
com.example.user.myapplication W/System.err:
at
com.example.user.myapplication.MainActivity.execCommand(MainActivity.java:41)
com.example.user.myapplication W/System.err:
at
com.example.user.myapplication.MainActivity.onCreate(MainActivity.java:33)
com.example.user.myapplication W/System.err:
at android.app.Activity.performCreate(Activity.java:6664)
com.example.user.myapplication W/System.err:
at
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
com.example.user.myapplication W/System.err:
at
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)
com.example.user.myapplication W/System.err:
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
com.example.user.myapplication W/System.err:
at android.app.ActivityThread.-wrap12(ActivityThread.java)
com.example.user.myapplication W/System.err:
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
com.example.user.myapplication W/System.err:
at android.os.Handler.dispatchMessage(Handler.java:102)
com.example.user.myapplication W/System.err:
at android.os.Looper.loop(Looper.java:154)
com.example.user.myapplication W/System.err:
at android.app.ActivityThread.main(ActivityThread.java:6077)
com.example.user.myapplication W/System.err:
at java.lang.reflect.Method.invoke(Native Method)
com.example.user.myapplication W/System.err:
at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
com.example.user.myapplication W/System.err:
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
com.example.user.myapplication W/System.err:
Caused by: java.io.IOException: error=13, Permission denied
com.example.user.myapplication W/System.err:
at java.lang.UNIXProcess.forkAndExec(Native Method)
com.example.user.myapplication W/System.err:
at java.lang.UNIXProcess.<init>(UNIXProcess.java:133)
com.example.user.myapplication W/System.err:
at java.lang.ProcessImpl.start(ProcessImpl.java:128)
com.example.user.myapplication W/System.err:
at java.lang.ProcessBuilder.start(ProcessBuilder.java:964)
com.example.user.myapplication W/System.err:
... 17 more
可以編譯,可以看到手機上有app
請大俠指教...
萬分感激,謝謝。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 58.115.110.28
※ 文章網址: https://www.ptt.cc/bbs/AndroidDev/M.1477211618.A.646.html
※ 編輯: blueblueChen (58.115.110.28), 10/23/2016 16:41:41
→
10/23 16:52, , 1F
10/23 16:52, 1F
→
10/23 17:06, , 2F
10/23 17:06, 2F
※ 編輯: blueblueChen (58.115.110.28), 10/23/2016 17:15:44
→
10/23 17:29, , 3F
10/23 17:29, 3F
→
10/23 17:29, , 4F
10/23 17:29, 4F
→
10/23 17:30, , 5F
10/23 17:30, 5F
→
10/23 17:36, , 6F
10/23 17:36, 6F
→
10/23 17:36, , 7F
10/23 17:36, 7F
→
10/23 17:37, , 8F
10/23 17:37, 8F
→
10/23 18:10, , 9F
10/23 18:10, 9F
→
10/23 18:11, , 10F
10/23 18:11, 10F
→
10/23 18:11, , 11F
10/23 18:11, 11F
→
10/23 18:11, , 12F
10/23 18:11, 12F
→
10/23 18:20, , 13F
10/23 18:20, 13F