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的run-as和exec-out参数)