java中的Android应用程序在访问sysfs条目时存在权限问题。
try{
FileOutputStream fos = new FileOutputStream("/sys/class/shift_reg/shift_reg/value");
byte mybyte = 1;
fos.write(mybyte);
fos.close();
} catch ( Exception e) {
Log.d(TAG, "Failed in writing to Shift Register"); <------- I am always getting this exception.
}
1)尝试过输入"setforce0"。不行。即使强制级别是允许的。
2) 我必须使用 JNI 方式访问: ( 安卓应用程序 -> JNI -> 驱动程序 )
3)我已将sysfs节点文件的文件权限设置为0777。
Dmesg 错误消息:
[ 417.176302] 类型=1400 审核(418.589:63): AVC: 拒绝 { 写入 } pid=3164 comm="com.android.cam" name="value" dev="sysfs" ino=9749 scontext=u:r:untrusted_app:s0 tcontext=u:object_r:sysfs:s0 tclass=file 允许=1
ps -Z
u:r:untrusted_app:s0 u0_a67 4360 333
com.android.cam
以下是我遇到的一些选项。
1. 从应用程序直接访问 [ 安卓应用程序(.java) -> jni -> 驱动程序 ]我需要实现 jni吗?
[疑问] jni 解决方案是否不会与仅 java 应用程序具有相同的权限问题。
[答]这行不通。
2. 将我的申请签名为"platform_app"。目前显示为"untrusted_app">
[答] 平台应用仍在应用域中。 这是行不通的。
3. 使用任何现有的安卓硬件 API。是否可以重用现有的东西(修改现有的东西) 1) 安卓硬件 2) 安卓.硬件.输入
[答:是的。 可能是最简单的方法,但请注意不要与使用您正在修改的 HAL 的其他模块冲突。
4. 添加新的自定义系统服务 我相信添加系统服务有两种选择 1) 在系统服务器内部添加 2) 在系统服务器外部添加
[答:是的。正确的解决方案之一。
5. 使用 NDK 开发应用程序是否有助于获得权限
[答] 应用仍在应用域中。 您将不会获得权限。
注意:
系统服务实现 github:
https://github.com/opersys/opersys-hal-hw