我编写了一个 Android 应用程序,它在 Android 4.4 Kitkat 设备上的自定义内核上运行,该设备使用 Android 串行端口 API (https://code.google.com/p/android-serialport-api/ https://code.google.com/p/android-serialport-api/)以便打开串行端口“/dev/ttyACM0”,这是与我的串行设备关联的端口。该端口具有适当的“666”权限(crw-rw-rw),应用程序本身甚至具有“WRITE_EXTERNAL_STORAGE”权限。
但是,即使权限看起来正确,当我的应用程序尝试使用该库打开所述串行端口时,它会失败。在我的java代码中,如果我尝试执行“device.canWrite()”,它将返回 false,而“device.canRead()”返回 true。我觉得这是更大权限问题的症状。
如果我使用与串行端口 api/库捆绑的示例 apk,我会遇到同样的问题,应用程序在 device.canWrite() 处失败并抛出 SecurityException。
当在自定义内核 ICS 设备上运行时,完全相同的代码确实成功运行并打开,该应用程序最初是为此开发的。然而,两者的内核是由同一开发人员编写的,至少从表面上看,端口的权限似乎是相同的。
这是否是我可以在应用程序代码方面解决的问题?我尝试过其他一些串口库(USBSerial3.0、usb-serial-for-android-master),我似乎遇到了同样的问题。
无论问题出在哪里,有人知道问题可能是什么吗?对内核、应用程序和 api 的更改都在桌面上。谢谢。
Gabe,Google 在 Android 4.4 中将 SELinux 模式从 Permissive Mode 更改为 Enforce Mode,默认情况下应用程序没有(SELinux)访问串行端口的权限。以下是解决该问题的几种方法:
(1).如果您的设备已获得 root 权限,您可以将 SELinux 模式从强制模式切换到许可模式:“su setenforce 0”。每次重新启动设备时都需要运行该命令。看http://www.xda-developers.com/easy-change-your-android-selinux-mode/ http://www.xda-developers.com/easily-change-your-android-selinux-mode/(2)。如果您有权访问设备的内核框架文件,
可以更改它们并授予对您的应用程序的串行端口访问权限。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)