看板 AndroidDev 關於我們 聯絡資訊
今天試了一整天,有點崩潰..開發環境 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
ssccg: 你有權限? 10/23 16:52
blueblueChen: 請問您指的權限是? 10/23 17:06
※ 編輯: blueblueChen (58.115.110.28), 10/23/2016 17:15:44
blueblueChen: 我在AndroidManifest.xml加上 10/23 17:29
blueblueChen: <uses-permission android:name="android.permissio 10/23 17:29
blueblueChen: n.ACCESS_SUPERUSER"/> 結果相同... 10/23 17:30
y3k: 你沒有用過Linux吧? 第一次的問題是你沒要系統管理員權限 10/23 17:36
y3k: 第二次是你要了但是拿不到 第三次(你剛剛的推文)是你的系統不 10/23 17:36
y3k: 給你 簡單講 這種code必須要在"root過"的手機上才能跑 10/23 17:37
blueblueChen: 您好,我聽了各位的話...root nexus 6p 手機 10/23 18:10
blueblueChen: 然後他就可以了! 只是我很那悶,我在還沒root時 10/23 18:11
blueblueChen: 就已經看到 system/xbin/su 有這個檔案了,為啥我還 10/23 18:11
blueblueChen: 需要 root tool?? 10/23 18:11
KeySabre: 樓上已經有人說出你該補的觀念囉 10/23 18:20