最近在写使用adb命令提取运行中APK的批处理bat,遇到了奇怪的错误,does not existte object '/data/app/com.hzhsj.chemistrytool-1/base.apk
先说解决办法:
在adb命令结尾加
| xargs echo -n
,它的作用是删除字符串结尾的换行符
问题复盘
原始批处理如下:
for /f %%p in ('adb shell "dumpsys activity | grep Resume | tr -s ' ' | cut -d ' ' -f 5 | cut -d / -f 1 | head -n 1"') do (
for /f "tokens=2 delims=:" %%i in ('adb shell "pm path %%p"') do (
adb pull %%i %%p.apk
)
)
为了找到问题所在,
- 首先我在adb pull前面加上了
echo %%i
和echo %%p
,确认了这两个变量的值都是符合预期的(这里称之为字符串I和P) - 接下来我在脚本中,把
%%i
和%%p
同时各自替换为硬编码的字符串I和P,也可以正确执行;
那就奇怪了,变量的值对,但是用变量不行,用写死的值就行。此时我想起来,这个脚本执行的时候,格式错乱,会不会与此有关呢?(见图中红框部分,部分本来在末尾的字符跑到了开头覆盖了开始的字符)
后来想到可能是回车符之类的的问题,就去stackoverflow找到了xargs echo -n(虽然这个是用来清除换行符的),果然好使了。
正确代码在:https://www.jianshu.com/p/6a99d10e2ce0
网友评论