我目前正在使用JNI / NDK将C ++通信库从Linux移植到Android。该设备是USB探测器,用于进行科学测量。它只是一个原始的HID,它出现为“/ dev / hidraw0”
我需要为设备获取文件描述符('_ fileHandle'),我正在通过以下方式进行:
_fileHandle = open(_devicePath.c_str(), O_RDONLY | O_NONBLOCK);
其中'_devicePath'是设备节点“/ dev / hidraw0”。不幸的是,我遇到了Android(Permissions / SELinux,很可能)的问题,我在尝试执行open(...)命令后立即在logcat中收到以下错误:
type=1400 audit(0.0:41): avc: denied { read } for name="hidraw0" dev="tmpfs" ino=229381 scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u:object_r:device:s0 tclass=chr_file permissive=0
“/ dev / hidraw0”的“ls -l”是:
crw------- 1 root root 229
如何让设备打开?
我试图只是chmod节点上的权限,并且更改不会坚持(Android立即恢复它们)。
谢谢!
答案 0 :(得分:1)
有一个API可以直接处理USB设备。看一下: https://developer.android.com/guide/topics/connectivity/usb/host.html
它能满足您的需求吗?
答案 1 :(得分:0)
@ y30是正确的。
在我的应用程序中使用root命令,我通过使用“setenforce 0”命令将SELinux设置为“Permissive”模式,然后我能够发送“chmod 666 / dev / hidraw0”命令和权限棒 - 我可以通过我的应用程序成功与设备通信。
有时候它仍然有点不稳定 - 我发现有时权限不会从我的应用程序设置,即使我在我的应用程序启动时运行命令后没有出现任何错误,我必须转到终端以root身份手动执行命令,然后返回我的应用程序。
感谢您的帮助!