[原创] 批处理一键提取前台运行的APK
2022-02-23 本文已影响0人
RedB
工作中经常需要提取Android App的APK到电脑上进行分析,于是索性花了半天时间写了一个Windows批处理,可以实现:一键提取前台运行的App的APK到电脑上,并重命名为包名.apk
。
多台手机测试通过。
REM REM注释比::注释更规范更不容易出错
REM 1) 核心:用for /f 获取命令回显的字符串并作为参数调用:https://mp.weixin.qq.com/s/PZiAgFHlq0kq-tl1e7KmeA
REM · token和delims用于分割字符串
REM · for /f 官方文档:https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/for
REM · 如果想把%%i替换成更好看的变量名,可以使用setlocal enabledelayedexpansion:https://blog.csdn.net/earbao/article/details/89284933
REM 2) 提取包名:使用Shell里的cut命令来切割出需要的部分。因为经过测试,linux的grep和windows的findstr,都难以用()提取包名
REM 3) 不要在do( )里连续写>=两行的::注释,会报错:系统找不到指定的驱动器
REM 4) set /p="" 相当于可自定义文字的pause命令
REM 5) tr命令:删除重复出现的字符序列,只保留第一个
REM 6) xargs echo -n:删除字符串结尾的换行符\r,否则有的手机上会报错does not existte object
REM 7) 双引号与单引号:除了在for /f %%d in ('')中单引号是作为命令的边界之外,其余时候单引号单纯是个字符,没有任何特殊意义
@echo off
set /p=请连接手机,运行需要提取的APK,然后按任意键继续
for /f %%p in ('adb shell "dumpsys activity | grep Resumed | tr -s ' ' | cut -d ' ' -f 5 | cut -d / -f 1 | head -n 1 | xargs echo -n"') do (
for /f "tokens=2 delims=:" %%i in ('adb shell "pm path %%p | xargs echo -n"') do (
adb pull %%i %%p.apk
)
)
set /p=脚本运行结束,按任意键退出
adb shell "dumpsys activity | grep Resume" 命令参考自:https://blog.csdn.net/tabactivity/article/details/78788456