2013-02-07 47 views
5

我需要在該端口上寫入數據時更改/ dev/tty *文件的權限。我可以通過以root用戶身份輸入adb shell來更改Windows命令提示符下的權限。以編程方式更改android中tty端口的權限和所有權

但是,當我重新啓動設備,權限不會持久。相反,它們被設置爲默認值。

因此,每次我需要在重新啓動後運行我的應用程序時,我需要更改權限。

我試圖通過使用Runtime.exec()方法從應用程序運行adb命令,但由於該應用程序沒有更改文件所有權限的權限,因此不會更改任何內容。

這是我如何執行從應用程序中的命令(在這種情況下測試了它在仿真器):

Process process = Runtime.getRuntime().exec("su"); 
DataOutputStream os = new DataOutputStream(process.getOutputStream()); 
os.writeBytes("chown root:root /dev/ttyS0 \n"); 
os.writeBytes("chmod 777 /dev/ttyS0 \n"); 
os.writeBytes("exit\n"); 
os.flush(); 
os.close(); 
process.waitFor(); 

當「ス」命令被執行,它提供錯誤su: uid 10044 not allowed to su 由於這個原因,上執行chown或chmod會給出錯誤Unable to chmod Operation Not permitted

那麼,如何更改該文件的權限和所有權?

任何幫助,高度讚賞!

謝謝!

+0

模擬器或設備?如果設備然後紮根或不?你說什麼「通過編程從'android app'運行'adb root'? – Shaiful

+0

它在設備中。爲了通過命令提示符更改/ dev/tty *文件的權限,我需要在給出adb root命令後輸入adb shell,即.adb必須以root身份運行。如果不是,它不允許我更改權限 –

+0

,並且可以通過命令提示符更改權限。但我想通過代碼來完成類似的過程。 –

回答

1

默認(由Google提供)su二進制檢查UID它正在運行。只有rootshell用戶可以運行su。除非您安裝修補程序su二進制文件,而不檢查UID,否則您將無法從應用程序運行su

所有什麼adb root命令會在執行設備上的以下命令:

setprop service.adb.root 1 
stop adbd 
start adbd 

但我肯定你是問一個錯誤的問題在這裏。沒有理由爲什麼su命令不適合你的目的。

你應該執行改變TTY設備許可的命令是:

Runtime.getRuntime().exec("su root chmod 777 /dev/ttyS0"); 

另外,在機器人的.被用作在chown命令代替:用戶和組的字段之間的分隔符。正確的命令是:

su root chown root.root /dev/ttyS0 
+0

我已經更新了這個問題..你能否檢查一下 –