【发布时间】:2014-05-07 08:23:23
【问题描述】:
有没有办法编写一个脚本来使用 run-as 从 ADB shell 复制文件?
我知道在 adb shell 中复制的唯一方法是使用 cat source > dest(编辑:现代 android 版本有 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 中已经有很好的答案。
【问题讨论】:
-
您可能无法执行上传的脚本,因为外部存储是使用 noexec 标志安装的。如果您将它放在应用程序的私有存储或 /data 下的某个 tmp 目录中,您应该能够使其可执行。但是,如何将导出功能构建到应用程序的(调试版本)中,以这种方式进行复制?另一种选择是将来自
echo之类的命令管道 到adb shell run-as com.foo.bar会话中。 -
是否可以使用 adb 将脚本复制到应用程序的私有存储中?我总是被拒绝许可,如果我可以推送到应用程序的私人存储,那么我就不会遇到这个问题。不过,我会尝试从 echo 中进行管道传输。
-
您可以让应用程序写出脚本或授予您对目录的写入权限。
-
顺便说一句,如果您使用的是最新版本,Android 现在有一个
cp命令。 -
我一直在寻找没有应用程序帮助的东西,因为我有很多沙箱,我会定期与版本控制同步,而且有很多人在做这个项目;尽管我可以对应用程序进行临时更改,但它们可能只会持续到下次我在进行还原时忘记更改时。这就是为什么让脚本做所有事情会很好的原因。不幸的是,我用来拥有 cp 的手机上没有足够新的版本。顺便说一句,谢谢你的帮助!