有没有办法编写一个脚本,使用run-as从ADB shell复制文件?
我所知道的在adb shell中复制的唯一方法是使用cat source > dest (编辑:现代安卓版本有cp命令,这使得这个问题没有必要),但我只能引用大于一个级别的符号,所以我的脚本可以将它传递给adb shell,但不能传递给adb shell run-as。
例如,这是可行的:
adb shell "cat source > dest"
但这不是:
adb shell run-as "cat source > dest"
也不是这样:
adb shell "run-as cat source \> dest"
我甚至尝试创建了一个小脚本并将其上传到设备上,但我似乎无法从adb shell运行该脚本-它告诉我“权限被拒绝”。我也不能修改脚本。
我这样做的原因是要将文件复制到应用程序的私有存储区-具体地说,我使用脚本修改共享首选项,并将修改后的首选项放回原处。但是,只有应用程序本身或root用户可以写入我想要的文件。
此场景中的用例是将文件复制到设备上的受保护位置,而不是检索它;对于检索,this question中已经有了很好的答案。
发布于 2014-03-31 08:47:23
遵循Chris Stratton的建议,我最终让它工作的方式如下(用于将共享首选项复制回设备):
adb push shared_prefs.xml /sdcard/temp_prefs.xml
cat <<EOF | adb shell
run-as com.example.app
cat /sdcard/temp_prefs.xml > /data/data/com.example.app/shared_prefs/com.example.app_preferences.xml
exit
exit
EOF直接到adb shell run-as的管道不起作用,我不知道为什么,但是到adb shell的管道起作用了。诀窍是从交互式shell调用run-as,然后它继续接受来自管道的输入。
HERE文档允许我轻松地将换行符嵌入到不同的命令中,通常只是使其具有可读性;我使用分号不是很幸运,但这可能是由于我的处理方式所致。我相信它可以与其他通过管道传输多个命令/换行符的方法一起工作;当我最终让它工作时,我停止了这个实验。
两个出口对于防止挂起的shell (可以用CTRL-C组合键杀死)是必要的;一个出口用于run-as,另一个出口用于adb shell本身。看起来,Adb的shell对文件末尾的响应不是很好。
https://stackoverflow.com/questions/22703254
复制相似问题