2
請原諒我,我不是Linux核心程序員。這是我第一次做任何Linux編碼,因此對我一無所知。在Android應用程序中執行shell腳本
因此,我已經閱讀了大量關於這個主題的文章,並且我很難弄清楚我的代碼正在發生什麼。基本上,我試圖創建一個個人檔案應用程序。該設備已生根幷包含BusyBox。我寫了一個linux腳本,根據登錄的用戶交換/ data和/ cache分區。
當我從ADB執行這個腳本時,它完美地工作。我想在應用中實現它會相當容易。
#SP登錄用戶名密碼
Android的重新初始化與新的配置文件和一切都很好。這是我在Android的:
Log.v("Profiles", "sp login " + user + " " + password);
Process process = Runtime.getRuntime().exec("sp login " + user + " " + password);
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
int read;
char[] buffer = new char[4096];
StringBuffer output = new StringBuffer();
while ((read = reader.read(buffer)) > 0) {
output.append(buffer, 0, read);
}
reader.close();
process.waitFor();
Log.v("Profiles", output.toString());
唯一的記錄是我的「回聲」在實際的腳本本身。我看不到在該腳本中執行的命令的任何結果。例如,當在ADB中運行時,所有安裝命令和我所做的不同事情都有輸出。這些都不會在輸出字符串中輸出。
有什麼建議嗎?
如果'password'包含shell元字符,如';'或'&'或'*'或'''你執行exec()'調用可能不執行,你?期望。如果Android允許你訪問更像'execve(2)'而不像'system(3)'的東西,那麼使用它會是明智的。 (雖然我不認爲這與你目前的問題有關。) – sarnold
沒有。密碼中沒有特殊字符。只是一個簡單的字符串,雖然這是我需要檢查的東西。而且,儘管我對這方面的知識並不是很瞭解,但Android似乎並不存在。 – normmcgarry