adb卸载所有用户的安装包

Dmail / 2024-09-20 / 原文

@echo off
:: 设置adb的文件路径
set "adb_path=E:\SDK\platform-tools"
:: 更新环境变量
set PATH=%adb_path%;%PATH%
:: 白名单包名
set "whitelist=magisk.term com.speedsoftware.rootexplorer org.lsposed.manager com.tencent.mm com.eg.android.AlipayGphone com.cjs.hegui30"

:: 列出连接的设备并选择设备
adb devices
set /p device=Please enter the device name:

:: 检查设备是否有效
if "%device%"=="" (
    echo No device selected, exiting.
    pause
    exit /b
)

echo Uninstalling all packages except whitelisted ones...

:: 获取所有用户安装的应用包名并存储到 packages.txt 文件
adb -s %device% shell pm list packages -3 > packages.txt

:: 处理包名,逐个检查是否在白名单内
setlocal enabledelayedexpansion
for /f "tokens=2 delims=:" %%a in (packages.txt) do (
    set "package=%%a"
    set "found=0"

    :: 检查包名是否在白名单中
    for %%b in (%whitelist%) do (
        if "!package!"=="%%b" (
            set "found=1"
            echo Skipping whitelisted package: !package!
        )
    )

    :: 如果包名不在白名单中,卸载应用
    if "!found!"=="0" (
        echo Uninstalling package: !package!
        adb -s %device% shell pm uninstall --user 0 !package!
    )
)

endlocal

:: 删除临时文件
del packages.txt

:: 清除桌面布局
echo Clearing desktop layout...
adb -s %device% shell pm clear com.android.launcher3 > clear_result.txt

:: 判断是否包含 "Failed" 字符
findstr /i "Failed" clear_result.txt >nul
if %errorlevel%==0 (
    echo Resetting desktop layout failed!
) else (
    echo Desktop layout reset successfully.
)

:: 删除临时文件
del clear_result.txt

echo All other packages uninstalled except the specified ones.
pause