2016-11-01 22 views
0

我有一個自定義設備android 4.3。問題發生在一些命令中,例如:su在adb上和程序上的行爲不同

su -c 'pm enable com.android.systemui' 

當我在adb上運行此命令時,它起作用。但是,當我使用this庫以編程方式運行代碼時,它只是不起作用,也沒有顯示錯誤。

有趣的觀察:

Shell.SU.available() : false 
Shell.SU.isSELinuxEnforcing() : false 
+0

通過'adb',即使您的設備沒有root權限,您也可以執行該命令。但是,如果設備沒有根,無論您使用哪個庫,該命令都會失敗。那麼如果物理設備真的紮根? –

+0

@ th3pat3l,設備默認爲root。所以,我可以運行大部分的root命令。例如,當我單獨執行「rebo​​ot」命令時,它不起作用。但是,如果我作爲根設備重新啓動執行它。 – guness

+0

我發佈了一個答案。看看能否幫到你 –

回答

0

確定,所以設備被生根。你試圖使用該庫來執行該命令的任何原因?

我想說的是爲什麼你不能自己運行shell命令?

runRootCommand方法:

static boolean runRootCommand(String command) { 
    boolean status = true; 
    DataOutputStream os = null; 

    try { 
     Process process = Runtime.getRuntime().exec("su"); 
     os = new DataOutputStream(process.getOutputStream()); 
     os.writeBytes(command + "\n"); 
     os.writeBytes("exit\n"); 
     os.flush(); 
     process.waitFor(); 
    } catch (IOException | InterruptedException e) { 
     Log.e(TAG, e.toString()); 
     status = false; 
    } finally { 
     try { 
      if (os != null) 
       os.close(); 
     } catch (IOException e) { 
      Log.e(TAG, e.toString()); 
      status = false; 
     } 
    } 
    return status; 
} 

然後調用該方法是這樣的:

boolean success = runRootCommand("pm enable com.android.systemui"); 

if(success) { 
    // command was successful 
} else { 
    // command was NOT successful 
} 

這將運行命令 「蘇」(超級用戶)。 希望這有助於。

+0

問題不是我該如何執行su命令。問題本身就是。問題是我如何才能達到訪問級別,就像adb root一樣。 – guness

+0

如果您的設備已經生根,您已經擁有所需的「訪問級別」。這只是一個正確的方式。如果您想測試它,請從Play商店下載終端應用程序並執行命令。它會工作。 –

相關問題