一:問題描述
在已經root過的android設備下,app執行一個linux命令,app需要獲取su權限,在某些android主板下會出現異常, Command: [su] Working Directory: null Environment: null,代碼如下:
private void execLinuxCommand(String cmd){ Runtime runtime = Runtime.getRuntime(); try { Process localProcess = runtime.exec("su"); OutputStream localOutputStream = localProcess.getOutputStream(); DataOutputStream localDataOutputStream = new DataOutputStream(localOutputStream); localDataOutputStream.writeBytes(cmd); localDataOutputStream.flush(); } catch (IOException e) { Logger.i(TAG+"strLine:"+e.getMessage()); e.printStackTrace(); } }由于確認設備已經root,并且上個月測試的時候,沒有任何問題,然后今天換新設備測試時(新設備,舊設備android版本一致,均為5.1,并且都已經root),卻出現如下異常:
java.io.IOException: Error running exec(). Command: [su] Working Directory: null Environment: null12-02 10:00:08.685 W/System.err: Caused by: java.io.IOException: Permission denied12-02 10:00:08.686 W/System.err: at java.lang.ProcessManager.exec(Native Method)12-02 10:00:08.686 W/System.err: at java.lang.ProcessManager.exec(ProcessManager.java:209)12-02 10:00:08.687 W/System.err: ... 17 more
通過異常信息判斷,Process localProcess = runtime.exec("su");執行這句代碼,沒有權限,都root了還沒權限,我去。。。ls -al /system/xbin/su信息如下:
二:解決辦法
出現這種問題,一般有三個原因
1 /system/xbin/su 不存在
root@rk3288:/system/xbin # ls -al su-rwsr-x--- root shell 67160 2017-10-16 15:01 su
通過adb命令,看到是有su這個文件的,所以排除這個原因。
2 /system/xbin/su 權限問題,
解決辦法是執行如下命令,前提是android主板給予了執行chmod 06755命令的權限
chmod 06755 /system/xbin/su
如果執行以上命令,出現如下問題,請聯系設備廠商
root@rk3288:/system/xbin # chmod 06755 /system/xbin/suUnable to chmod /system/xbin/su: Read-only file system
3 /system/xbin/su 不允許第三方應用獲取root權限
網上的解決辦法是:
root@android:/ $ susu: uid 10061 not allowed to suroot@android:/
總結
以上所述是小編給大家介紹的Android 程序執行Linux命令的解決方法及注意事項,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!
新聞熱點
疑難解答