一:問題描述 在已經root過的android設備下,app執行一個linux命令,app需要獲取su許可權,在某些android主板下會出現異常, Command: [su] Working Directory: null Environment: null,代碼如下: 由於確認設備已經root,並 ...
一:問題描述
在已經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: null 12-02 10:00:08.685 W/System.err: Caused by: java.io.IOException: Permission denied 12-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/su Unable to chmod /system/xbin/su: Read-only file system
3 /system/xbin/su 不允許第三方應用獲取root許可權
網上的解決辦法是:
root@android:/ $ su su: uid 10061 not allowed to su root@android:/