我已經授予UsbDevice訪問,得到了他的設備名稱(/dev/bus/usb/002/002
),並將其傳遞到執行過程中與USB設備(AVRDUDE更詳細)工作從android應用程序執行的進程是否與android應用程序具有相同的權限?
Process process = Runtime.getRuntime().exec(commandArray);
,並獲得「許可被拒絕 「錯誤:
W/System.err(9368): avrdude: ser_open(): can't open device "/dev/bus/usb/002/002": Permission denied
W/System.err(9368): ioctl("TIOCMGET"): Invalid argument
AVRDUDE是在應用程序沙箱(/data/data/%package%
),所以它不需要生根只是執行AVRDUDE(確定)。我相信如果我授予訪問UsbDevice android應用程序進程和所有子進程(avrdude)獲得對USB設備文件的訪問權限。
有什麼想法?生根是不受歡迎的。
UPDATE:應用程序甚至得到允許後UsbDevice不能讀/寫的USB設備文件: '文件usbDeviceFile =新的文件(usbDevice.getDeviceName()); logger.debug(「{} exists,canRead = {},canWrite = {}」,new Object [] {usbDeviceFile.exists()?「」:「NOT」,usbDeviceFile.canRead(),usbDeviceFile。 canWrite()});' 回報: 'd/ArduinoDroid(2350):設備名稱=的/ dev /總線/ USB/002/002 d/ArduinoDroid(2350):存在,的CanRead =假,canWrite = false' – 4ntoine
是的,它們是相同的,但是這裏的問題在於,您嘗試在本機端使用不同的API,因爲該應用程序和其UID下運行的可執行文件都沒有權限。除unix組級別實現的一小部分權限(例如網絡連接)外,實際上它們都是基於Binder IPC的API的啓用碼,除非您可以通過某種方式向Binder註冊,否則本地可執行文件不可用。 –
根據我的更新android應用程序本身沒有文件的權限。所以無論如何嘗試從子進程(avrdude)訪問它是沒有意義的。不可能? – 4ntoine