从android应用程序访问sysfs的权限问题(.java源代码)

时间:2017-03-30 20:51:13

标签: android permissions selinux sysfs

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)尝试过'setenforce 0'。不行。即使执行级别是允许的。

2)我是否必须使用JNI方式访问: (android-app - &gt; jni - &gt; driver)

3)我已将sysfs节点文件的文件权限设置为0777。

Dmesg错误讯息:

  

[417.176302] type = 1400 audit(418.589:63):avc:拒绝{write} for   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 个答案:

答案 0 :(得分:0)

以下是我遇到的一些选项。

<强> 1。从应用程序直接访问[Android应用程序(.java) - &gt; jni - &gt;司机] 我是否需要实施jni [怀疑] jni解决方案是否会与仅仅java应用程序具有相同的权限问题。

[Ans]这不起作用。

<强> 2。将我的申请签署为&#39; platform_app&#39;。 目前它显示为&#39; untrusted_app&#39;

[Ans]平台应用仍处于应用领域。这不起作用。

第3。使用任何现有的Android硬件API。 是否可以重用现有的东西(修改现有的东西)        1)android.hardware        2)android.hardware.input

[答案]是的。可能是最简单的方法,但要注意不要与使用您正在修改的HAL的其他模块发生冲突。

<强> 4。添加新的自定义系统服务 我相信添加系统服务有两种选择       1)在System Server内添加       2)添加到系统服务器外部

[答案]是的。一个合适的解决方案。

<强> 5。将使用NDK开发应用程序帮助权限

[Ans]应用仍处于应用领域。您将无法获得权限。

注意:

系统服务实现github:

https://github.com/opersys/opersys-hal-hw