我在Android 4.4上面临一种奇怪的行为。 以下命令在android Jelly Bean rooted设备上完美运行:
Process process = Runtime.getRuntime().exec("su");
DataOutputStream dos = new DataOutputStream(process.getOutputStream());
// path is a folder saved on sdcard
dos.writeBytes("cp -a " + path + " " + "/data/data" + " \n");
dos.flush();
process.waitFor() return 0 mean Ok
但是在Android 4.4 rooted设备上,上述命令不起作用。 process.waitFor()返回1意味着某处出现错误。
我注意到在Android Jelly Bean root设备上运行时,文件的权限是:rwxr-x。 在Android 4.4上,它们是:rwxrwx -
我搜索了这个问题,但到目前为止没有找到任何结果。 谢谢。 :)
更新: 我可以使用cp命令将数据从/ data / data文件夹复制到sdcard文件夹。
答案 0 :(得分:1)
在Android 4.4+上运行su
以在root设备中复制/写入文件之前,请备份此文件:
/system/etc/permissions/platform.xml
然后查看platform.xml
中是否已定义以下权限和组:
<permission name="android.permission.WRITE_EXTERNAL_STORAGE" >
<group gid="sdcard_r" />
<group gid="sdcard_rw" />
<group gid="media_rw" />
</permission>
如果没有,请修改platform.xml
并添加,保存,然后重新启动设备并再次尝试su
命令。
如果其他所有方法都失败了,请尝试在root设备上安装BusyBox
二进制文件并通过它运行su
命令。
答案 1 :(得分:0)
我设法通过更改命令使其工作。
cp -a " + path + " " + "/data/data" + " \n"
到
cp -r " + path + " " + "/data/data" + " \n"
-a和-r之间的区别是,-a将保留复制文件的所有权限,我不知道为什么它在android 4.4上不起作用。 -r还将复制所有文件和文件夹,但它会更改文件的权限,简单的解决方案(我认为)是在复制后手动修改权限。