推 Leeng:清楚多了 謝謝!! 09/17 22:52
※ 引述《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)
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 身分的使用者使用