V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
loveyu
V2EX  ›  Android

Android 代码读取/data/misc/wifi/wpa_supplicant.conf 问题,已经获取了 ROOT 权限,然后 FileReader 直接提示无权限!

  •  
  •   loveyu · 2014-09-21 23:18:21 +08:00 · 23055 次点击
    这是一个创建于 3715 天前的主题,其中的信息可能已经有所发展或是发生改变。
    直接提示:E/Read﹕ /data/misc/wifi/wpa_supplicant.conf: open failed: EACCES (Permission denied)

    真心不知道这个东西是怎么回事了。读取/etc/hosts可以,为啥/data/misc就不行呢?
    11 条回复    2014-09-22 20:09:40 +08:00
    wwqgtxx
        1
    wwqgtxx  
       2014-09-22 06:28:32 +08:00 via Android
    因为那个文件的所有者是wifi而不是root,你用re管理器看一下就知道了,hosts文件的所有者才是root
    你需要chmod一下权限
    loveyu
        2
    loveyu  
    OP
       2014-09-22 09:33:54 +08:00 via Android
    @wwqgtxx 懂了,我试试
    loveyu
        3
    loveyu  
    OP
       2014-09-22 11:39:57 +08:00
    @wwqgtxx 刚试了下,各种权限修改都无效,百度谷歌已经没有合适的方法了
    xylophone21
        4
    xylophone21  
       2014-09-22 13:49:05 +08:00
    Android上的APK获取了root权限是指你的应用可以使用su(一般位于/system/bin/su)了,而非直接改变你进程的uid.

    如果需要以root权限做事,请使用su.具体的例子你搜一下权限管理工具SuperSU神马的的SDK或者文档.
    换句话说,获取root权限后,如果你不调用su,跟没获取没什么两样.
    loveyu
        5
    loveyu  
    OP
       2014-09-22 14:40:47 +08:00 via Android
    @xylophone21 这个我知道的,最后找到的解决方案就是使用cp复制到缓存目录,再读取。这是我能想到的最简单的办法了
    wszf
        6
    wszf  
       2014-09-22 15:11:45 +08:00
    你是shell的root.并不是java级的root,肯定没有权限读取.
    xylophone21
        7
    xylophone21  
       2014-09-22 15:17:22 +08:00   ❤️ 1
    @loveyu
    E/Read﹕ /data/misc/wifi/wpa_supplicant.conf: open failed: EACCES (Permission denied)

    这句看起来很像Java代码打印的(没找到具体代码),怀疑你是用Java代码读的.

    但su一般来说用起来是:

    proc = runtime.exec("su");
    osw = new OutputStreamWriter(proc.getOutputStream());
    osw.write(command);
    osw.flush();
    osw.close();


    要使Java代码以root身份运行还是蛮麻烦的.(感觉需要自己再启一个虚拟机?没试过)
    大胆猜测你应该没这么做.

    所以想来想去,还是只有上面那个可能性最大.
    注意,使用su是指只有proc是root权限,你的apk本身还是原来的权限.

    PS:你copy的时候是不是用的类似上面代码把命令赋给command,但直接读取不是用的命令行?
    loveyu
        8
    loveyu  
    OP
       2014-09-22 17:57:41 +08:00
    @xylophone21 后来我也发现了,要提升APK的权限太难,只好通过cp data/misc/wifi/wpa_supplicant.conf /data/data/...../cache/ 然后再读取,这样就没有问题了,我想知道的是为啥改为777依旧不可读
    porrat
        9
    porrat  
       2014-09-22 18:39:46 +08:00 via Android
    apk进程的权限是系统通过UID检查确定的,跟文件本身的权限没啥关系
    xylophone21
        10
    xylophone21  
       2014-09-22 18:52:49 +08:00
    如果你只想读文件内容的话,试试cat,然后
    InputStream inputstream = proc.getInputStream();
    loveyu
        11
    loveyu  
    OP
       2014-09-22 20:09:40 +08:00 via Android
    @xylophone21 这个东西我试了好几次,都是无响应了,问题一直不清楚
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2740 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 14:54 · PVG 22:54 · LAX 06:54 · JFK 09:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.