Java调用root命令获取Android用户/设备信息的文件权限问题
问题原因
通过su执行screenrecord生成的文件所有者为root用户,默认权限配置不允许非root用户访问,Android Studio的Device File Explorer依托ADB shell身份运行,无root权限因此无法读取导出文件。另外data/data/[包名]属于应用私有目录,不会通过MTP协议暴露给PC端的Windows文件资源管理器,因此你无法在Windows中直接找到对应路径。
可行解决方案
- 方案1:生成文件后修改权限
执行完录制命令后追加修改文件权限的命令,允许其他用户读取文件,Device File Explorer即可正常访问:runCommand("chmod 644 " + getApplicationContext().getFilesDir() + "/sRec.mp4"); - 方案2:直接输出到公共存储路径
用root身份执行录制命令时可直接把输出路径指定到SD卡公共目录,无需申请应用存储权限,生成的文件可直接在Windows的MTP存储中找到:runCommand("screenrecord --time-limit 9 /sdcard/sRec.mp4"); - 方案3:手动通过ADB导出文件
不想修改代码的话可以直接在ADB命令行执行以下操作导出文件:
执行完成后即可在PC端直接读取/sdcard路径下的录制文件。adb shell su cp /data/data/[你的应用包名]/files/sRec.mp4 /sdcard/
补充说明
你当前的runCommand方法只实现了命令写入,没有读取进程的输出流和错误流,如果后续需要排查命令执行问题,建议补充读取process.getInputStream()和process.getErrorStream()的逻辑,方便定位错误。
内容的提问来源于stack exchange,提问作者erdemc
相关产品推荐
相关产品推荐

