提取手机上的所有已安装应用的apk文件
今天学习了一些dos的命令,又想到上次换手机重下软件特别麻烦,于是有了这个想法。
首先要知道几个基本的adb命令:
显示系统中全部设备: adb devices
列出手机装的所有app的包名: adb shell pm list packages
列出系统应用的所有包名: adb shell pm list packages -s
列出除了系统应用的第三方应用包名:adb shell pm list packages -3
输出apk路径:adb shell pm path
文件传输:adb pull/adb push
还有几个dos的命令
删除文件:del/f/s/q *.txt /s子目录,/f只读,/q不确认
逐行读取txt文件:for /f “delims=,” %i in (D:\下载\1.txt) do echo %i
字符串替换:(例如:set a=ppap set b=%a:a=p%
在测试过程中发现我不会列出的包名和apk路转成变量,于是我想到了把它们存为txt文件,等需要时再读取。以后会弄了回来把程序改一下。整个的分析过程:
1.将包名存为txt文件(我放在了d盘根目录)
adb shell pm list packages -s > D:\7uh5f34fx.txt
::adb shell pm list packages -s可以换成另外两个
2.按行读取这个文件
for /f "delims=," %%i in (D:\7uh5f34fx.txt) do echo %%i
3.对每行包名进行简单处理,比如把
package:com.baidu.netdisk 替换为 com.baidu.netdisk
set pgcom=package:com.baidu.netdisk
set com=%pgcom:package:=%
4.根据包名得到路径,并把路径存在txt里
adb shell pm path !com! > D:\20hf82v27d.txt
5.从txt里读取路径并把package:替换掉(同上)
6.把文件传入电脑,如
adb pull /system/app/OppoLFEHer/OppoLFEHer.apk D:\下载
::这里是存到了d盘的下载目录里
6.删掉多余的txt文件
del/q D:\7uh5f34fx.txt,D:\20hf82v27d.txt
把以上过程放入循环里就是:
@echo off
adb shell pm list packages -s > D:\7uh5f34fx.txt
setlocal ENABLEDELAYEDEXPANSION
set pgcom=1
for /f "delims=," %%i in (D:\7uh5f34fx.txt) do (
set pgcom=%%i
set com=!pgcom:package:=!
adb shell pm path !com! > D:\20hf82v27d.txt
for /f "delims=," %%i in (D:\20hf82v27d.txt) do (
set pgdir=%%i
set dir=!pgdir:package:=!
)
adb pull !dir! D:\下载
)
del/q D:\7uh5f34fx.txt,D:\20hf82v27d.txt
pause
注意延迟环境变量扩展,有些地方的%变成了!
更新:
@echo off
chcp 65001
if exist %~dp0AndroidApp (del/q %~dp0AndroidApp) else (md AndroidApp)
adb shell pm list packages -3 > %~dp0AndroidApp\z1.txt
setlocal ENABLEDELAYEDEXPANSION
set pgcom=1
for /f "delims=: tokens=2" %%i in (%~dp0AndroidApp\z1.txt) do (
set com=%%i
adb shell pm path !com! > %~dp0AndroidApp\z2.txt
for /f "delims=: tokens=2" %%l in (%~dp0AndroidApp\z2.txt) do (
set dir=%%l
)
adb pull !dir! %~dp0AndroidApp
::if exist %~dp0AndroidApp\base.apk (ren %~dp0AndroidApp\base.apk !com!.apk)
if exist %~dp0AndroidApp\base.apk (
aapt dump badging %~dp0AndroidApp\base.apk > %~dp0AndroidApp\z3.txt
for /f "tokens=1,2 delims=:" %%l in (%~dp0AndroidApp\z3.txt) do (if %%l==application-label set name=%%m)
set name=!name:'=!
ren %~dp0AndroidApp\base.apk !name!.apk
echo !name!.apk已保存
)
)
del/q %~dp0AndroidApp\*.txt
pause
先把手机与电脑用usb调试连接,再开启adb。把以上代码存为后缀为bat的文件,双击运行即可。