从安卓应用程序访问系统fs的权限问题(.java源代码)



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

最新更新