如何通过ADB从包名获取应用名称?实现安卓预装应用卸载脚本
如何通过ADB从Android包名获取应用名称(附卸载脚本实现思路)
嘿,刚好我之前做过类似的卸载脚本,这就给你详细说说怎么从包名拿到对应的应用名称,顺便把脚本的核心逻辑给你捋明白~
单个包名获取应用名称的常用方法
最直接的方式就是借助ADB的dumpsys package命令,它能输出指定包的所有详细信息,我们从中提取应用标签即可:
# 替换成你要查询的包名 adb shell dumpsys package com.google.android.youtube | grep -m 1 "Application Label"
这条命令会输出类似Application Label: YouTube的结果。如果想直接只拿到名称,可以用sed或者awk来过滤:
adb shell dumpsys package com.google.android.youtube | sed 's/.*Application Label: //'
小贴士:有些定制ROM的输出格式可能略有不同,如果上面的命令没拿到结果,可以试试
grep "label"来扩大搜索范围,再手动调整过滤规则。
另外,如果你电脑上装了Android SDK的build-tools,也可以用aapt工具来获取(需要先把APK拉到本地):
# 先获取APK路径并拉到本地 adb pull $(adb shell pm path com.google.android.youtube) # 用aapt提取应用名称 aapt dump badging base.apk | grep "application-label:"
这个方法更精准,但步骤稍多,适合需要深度解析APK的场景。
批量获取包名+应用名称(脚本核心)
你要做的卸载脚本需要批量列出「应用名称 (包名)」格式的列表,这里可以写个循环来批量处理所有系统应用(如果要所有应用就去掉-s参数):
adb shell pm list packages -s | cut -d: -f2 | while read pkg; do # 获取应用名称,没拿到的话就用包名代替 label=$(adb shell dumpsys package $pkg | grep -m 1 "Application Label" | sed 's/.*Application Label: //') [ -z "$label" ] && label=$pkg echo "$label ($pkg)" done
这条命令会直接输出所有系统应用的名称和包名,格式完全符合你的要求。
完整卸载脚本示例
基于上面的逻辑,我给你写了一个简易的交互式卸载脚本,用户可以直接选择要卸载的应用:
#!/bin/bash # 创建临时文件存储应用列表 temp_list=$(mktemp) # 批量获取应用名称和包名并写入临时文件 adb shell pm list packages -s | cut -d: -f2 | while read pkg; do label=$(adb shell dumpsys package $pkg | grep -m 1 "Application Label" | sed 's/.*Application Label: //') [ -z "$label" ] && label=$pkg echo "$label ($pkg)" >> "$temp_list" done # 显示选择菜单 echo "=== 可选系统应用列表 ===" select app in $(cat "$temp_list"); do # 从选中的内容里提取包名 pkg_name=$(echo "$app" | sed 's/.*(\(.*\))/\1/') echo "开始卸载:$app" # 执行卸载命令,--user 0 指定当前主用户 adb shell pm uninstall --user 0 "$pkg_name" if [ $? -eq 0 ]; then echo "卸载成功!" else echo "卸载失败(可能是核心系统应用无法卸载)" fi break done # 清理临时文件 rm "$temp_list"
注意:有些核心系统应用(比如设置、电话)是无法卸载的,执行后会提示失败,这属于正常现象。
内容的提问来源于stack exchange,提问作者Vladimir Mikulic
相关产品推荐
相关产品推荐

