ADB的run-as和exec-out参数

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 由于adb命令实在太多,网上搜索一大把,但是讲的都不是很详细,因工作需要所以打算自己整理一份出来,免得每次都去百度...
    大表哥007阅读 2,798评论 0 3
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,107评论 19 139
  • 今天是大年三十,家家户户都团团圆圆热热闹闹的。一家人围坐在饭桌上,吃着年夜饭,看着春节晚会,其乐融融的,热闹极了!
    王琪瑄阅读 178评论 0 0
  • 圣诞又要到了,去年前年大前年,每个圣诞夜我都听着很多有关圣诞夜的歌曲沉沉入睡,今年我已经提前在听了,为什么明明享受...
    仓山阅读 258评论 0 0
  • Reactive Cocoa 学习笔记 [TOC] 基本概念 什么是RAC ReacticeCocoa 结合了好几...
    TerryZhang阅读 1,604评论 2 3