精華區beta AndroidDev 關於我們 聯絡資訊
adb shell 是 root 身分和一般所指的手機 root 了不一樣 adb shell 的 root 身分是 adbd 給的, 但是 app 不是透過 adb -> adb server -> adbd 來拿到 root 身分, 而是直接走 su 應該檢查一下 su 的權限設定是否正確 問題可能是 1. su 沒有 switch user 的權限 2. su 的 owner 不是 root 3. other 不能執行 su 簡易驗證 su 是否可用: # su 2000 // 由 root 切成 shell 身分 $ su 0 // 此時檢查是否成功切換成 root 身分 su 其實也沒有做很複雜的事, 可以寫個小程式, 透過給予不同的權限和擁有者, 來瞭解如何能切換身分。 #include <sys/types.h> #include <unistd.h> #include <stdio.h> int main() { if (!setuid(0)) { printf("succeeded\n"); } else { printf("failed\n"); } } 不確定 Runtime.exec() 會不會幫忙切參數 "sh /cache/hello.sh" 是給予 -c 的一個參數 雖然 su 可能會處理好 但還是清楚一點比較好 hello.sh 內如果有 shebang 不需要再透過 sh 呼叫 shebang 是 loader 處理的且由 OS 實現 不能用 AOSP 提供的 su 那只能給 root 和 shell 身分的使用者使用 ※ 引述《Leeng (Leeng)》之銘言: : 環境如下: : 我手上的Android是工程build,有root,沒有SuperUser之類的管理app : 在adb shell底下不用打su也能執行root權限 : 打adb root會出現 adbd is already running as root : 我想做這件事: : su -c sh /cache/hello.sh //在adb shell底下打沒問題 : 但在寫app時調用: : Process p = Runtime.getRuntime().exec("su -c sh /cache/hello.sh"); : 卻不會執行(但沒有exception) : 上網查不到相關資訊,有人能解答嗎?謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.141.124.40 ※ 編輯: changyuheng 來自: 60.251.223.31 (09/17 10:25)
Leeng:清楚多了 謝謝!! 09/17 22:52