android开发笔记之批处理自动执行adb shell命令

1 问题

最近在做app的时候,要将Android手机中的Sqlite数据库导入到pc上,查看里面的数据,然后每次去app的目录下面去找出数据库,然后在adb shell中复制到sdCard,然后退出shell,再用adb pull命令拉到pc上,非常麻烦,一不小心就出错了,多搞几次就崩溃了。作为程序猿当然不能这么干啦。
当然你可以用DDMS,可视化操作导出数据库,但是且不谈真机上DDMS根本没有权限看到数据库,作为一个程序猿,你需要更优雅的解决办法

2 手动操作

下面先讲手动操作,如何将Android数据库导出到Windows电脑上
首先进入命令行cmd,然后一步一步执行下面命令:

adb shell //进入shell
su - //切换到root命令
cp /data/data/com.demo.app/databases/db_test /mnt/sdcard // 复制数据库到sdCard上,否则无法拉到pc上 
exit //退出root
exit //退出shell,回到cmd
adb pull /mnt/sdcard/db_test C:\Users\Administrator\Desktop // 将数据库拉到桌面上

注意:这里必须先将数据库复制到sdCard卡上,然后再从sdCard上拉到电脑上,因为adb pull没有root权限,没有办法直接从/data/data目录下面去拉数据库

好了,通过上述操作就可以把demoapp下面的db_test数据库拉到pc上,是不是巨麻烦,下面来讲批处理操作

3 自动操作

bat文件可以自动执行一批dos命令,不用一个一个输入。具体方法是:新建一个txt文件a.txt,输入上面的手动命令,注意在bat中注释符号是”rem”,需要将所有的”//”换成”rem”,然后修改文件名为a.bat,直接双击运行,然后。。。。呵呵咋不按套路出牌呢,为啥卡在这儿呢?这是因为一旦进入shell,bat批处理命令就失效了,也就是卡在了shell里面,不会继续往下执行了,所以,

正确的写法是:

adb shell "su -c 'cp /data/data/com.demo.app/databases/db_test /mnt/sdcard'"
adb pull /mnt/sdcard/db_test C:\Users\Administrator\Desktop

注意:adb shell “su -c ‘shell中要执行的命令’ “
这样就使得adb shell具有了root权限

再也不用去shell里面敲命令了,双击一键完成,是不是很优雅呢

4 总结

其实归结起来就是如何让adb shell执行时拥有root权限:

adb shell “su -c ‘your command’ “
————————————————

赞 (0)