提取手机上的所有apk文件

提取手机上的所有已安装应用的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的文件,双击运行即可。

    原文作者:c1n4007
    原文地址: https://blog.csdn.net/c1n4007/article/details/107624238
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞