ADB的run-as和exec-out参数

https://www.jianshu.com/p/2b10310cd545

 

run-as 可以用某个用户的权限来执行命令,这可以解决没有访问权限的问题,在不带这个参数时执行:

adb push sample.db /data/data/com.sample.foo/databases/sample.db

sample.db就不能被com.sample.foo访问,因为文件的用户和所在的组与com.sample.foo不一致,必须要经过chown修改用户和组后才能访问,而且由于每次app安装后获得的用户名不一致,没法将chown命令的参数批处理化,这是个很重要的缺陷。

带上run-as执行:

adb shell "run-as com.sample.foo sh -c 'cp /sdcard/sample.db /data/data/com.sample.foo/databases/sample.db'"

sample.db就变成com.sample.foo亲生的。如果你没有root权限,执行pull或者push时又提示Permission denied,不妨加上run-as参数看看。

exec-out是本文的另一个主角。在用adb pull从设备拉db之类的二进制文件的过程中,程序会自作主张的加上一些换行符,最终导致得到的文件被修改,exec-out的意思是说,给我保留原汁原味,我不要添加剂,谢谢!

你可以对比以下命令的输出:

adb shell "su -c cat /data/data/com.android.providers.settings/databases/settings.db" > settings.db

adb exec-out "su -c cat /data/data/com.android.providers.settings/databases/settings.db" > settings.db

更详细的说明请参考adb的帮助和下面的连接:
https://stackoverflow.com/questions/13578416/read-binary-stdout-data-from-adb-shell
https://stackoverflow.com/questions/22703254/copying-files-in-adb-shell-with-run-as/22751947

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值