liedameng 2015-12-03 03:16 采纳率: 0%
浏览 7969

android localsocket 连接本地socket报Permission denied异常

  LocalSocket socket = new LocalSocket();
        LocalSocketAddress addr = new LocalSocketAddress("netcontrol",
                LocalSocketAddress.Namespace.RESERVED);
        socket.connect(addr);
        socket.close();

        本地服务端已经配好,android5.1上,找不到原因,哪位大神帮个忙
  • 写回答

6条回答 默认 最新

  • TaylorPotter 2017-08-06 04:10
    关注

    发现了,加在apk中加读写权限也没用,这是selinux问题,android5.0开始强制使用SElinux限制,
    简单验证可以关掉selinux再试就ok了:
    adb shell setenforce 0

    楼主的本地服务应该是在dev/socket下生成一个socket文件
    而应用进程去访问这个文件时会受到selinux的限制,没有权限访问,
    终端下搜所log,

     adb logcat -b all | grep "avc: denied"
    

    会发现每次connect都会出现类似如下的log,我在dev/socket下的sockect文件名字是socket_test

     08-06 11:44:35.300 24901 24901 I auditd  : type=1400 audit(0.0:1397): avc: denied { write } for comm="Thread-19" name="socket_test" dev="tmpfs" ino=14956 scontext=u:r:system_app:s0 tcontext=u:object_r:socket_device:s0 tclass=sock_file permissive=0
    

    因此这里就需要配置sepolicy了,在system/sepolicy 下新建.te文件,或者在某个te文件中添加对应的selinux权限,
    这里针对上面的deniedlog我需要配置,后面还出现其他限制原因,都要配置上

    allow system_app socket_device:sock_file{  write }
    

    然后编bootimage 烧录验证;

    搜了半天互联网,没有确切回复,在stackflow上有类似的回复,突然想到可能是selinux问题,写详细点,希望后面有人搜索方便点。
    https://stackoverflow.com/questions/31012443/android-localsocket-client-cant-connect-to-native-service-socket-in-abstract-na

    评论

报告相同问题?

悬赏问题

  • ¥35 平滑拟合曲线该如何生成
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站