您的位置:首页 > 移动开发 > Android开发

通过bat批处理,向没有root的手机pull和push文件

2016-12-12 21:01 316 查看
最近写项目的时候偶尔需要取出应用里的文件,做出修改之后再放回去。但是每一次pull和push都需要好几步,虽然每个步骤都能找到现成的命令行,但是反复操作多次之后感觉实在太麻烦了,就摸索了一下怎么写bat和shell。现在终于大功告成,大家可以参考一下~

1 Push文件

pushFiles.bat:

@echo off
adb push %2 /sdcard/myPush/%2
adb shell "echo $(dirname %2);fileName=$(basename %2);package=$(pm list package %1);packageName=${package#*package:};echo packageName: $packageName;filePath=$(run-as $packageName find /data/data/$packageName -name $fileName);echo filePath: $filePath;run-as $packageName cp -r /sdcard/myPush/%2 $(dirname $filePath)/;"
adb shell "rm -r /sdcard/myPush"
pause


一个adb shell是一行,由于不知道怎么续行,导致中间有一行有点长,不过无伤大雅。

使用起来也比较简单,举个例子:

pushFiles MyApp MyApp.db


其中需要两个参数:

MyApp
:可以是应用的关键词或者全名,这里我的应用全名是
com.example.MyAppXYZ
,只需要MyApp就可以了,因为这样就可以识别出我的APP了。

MyApp.db
:可以是文件名或者文件夹名,这里是我应用内部的数据库文件。名字里不能包含路径(就是说
c://MyApp.db
这样不行),所以你执行的时候可能需要先把要push的文件和pushFiles.bat放在同一个路径下。还有就是应用内部不能有重名的文件

2 Pull文件

pullFiles.bat:

@echo off
adb shell "package=$(pm list package %1);packageName=${package#*package:};echo packageName: $packageName;filePath=$(run-as $packageName find /data/data/$packageName -name *%2*);echo filePath: $filePath;mkdir /sdcard/myPull;run-as $packageName cp -r $filePath /sdcard/myPull/;cd /sdcard/myPull;ls;"
adb pull /sdcard/myPull
adb shell "rm -r /sdcard/myPull"
pause


跟上面一个毛病,一行有点长。。。

还是先举个栗子:

pullFiles MyApp .db


仍然是两个参数:

MyApp
:跟上面一样,APP包名的关键字

.db
:这个是要pull的文件或文件夹的关键字,这里会把以db结尾的文件都取出来,如果是.xml就是取所有的xml文件。最后会把文件放在pullFiles.bat目录下的myPull文件夹中。

怎么样,使用方法还算简单吧,具体的命令就不讲解了,网上的资料很多,就不班门弄斧了:)

如果有什么问题还请留言告知,谢谢~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐