如何通过Python从Android应用包名获取应用标签名称
如何通过Python从Android应用包名获取应用标签名称
嘿,我来帮你搞定这个问题!你已经能成功获取到Android应用的包名了,接下来要拿到对应的应用标签其实并不难,不用在dumpsys里乱找啦,我给你分享两个实用的Python实现方法~
方法一:逐个查询单包的应用标签(适合单包或少量包处理)
这个方法通过adb shell pm dump命令获取单个包的详细信息,再用Python解析出应用标签。如果标签是资源ID形式,还可以进一步用aapt工具解析(aapt是Android SDK build-tools里的工具,记得把它加到系统环境变量里哦)。
import subprocess import re def get_app_label(package_name): try: # 执行adb命令获取目标包的详细信息 result = subprocess.check_output( ["adb", "shell", "pm", "dump", package_name], stderr=subprocess.STDOUT, text=True ) # 正则匹配直接显示的应用标签 label_match = re.search(r"label=(.*?)\n", result) if label_match: return label_match.group(1).strip() # 如果标签是资源ID形式,调用解析函数 res_id_match = re.search(r"labelRes=0x[0-9a-fA-F]+", result) if res_id_match: res_id = res_id_match.group().split("=")[1] return get_label_from_resource(package_name, res_id) return "未找到应用标签" except subprocess.CalledProcessError as e: return f"获取失败:{e.output.strip()}" def get_label_from_resource(package_name, res_id): # 解析资源ID对应的标签文本 try: result = subprocess.check_output( ["aapt", "dump", "resources", package_name, "--values"], stderr=subprocess.STDOUT, text=True ) res_match = re.search(rf"{res_id}\s+.*?\s+(.*?)\n", result) return res_match.group(1).strip() if res_match else "资源ID解析失败" except Exception as e: return f"解析资源ID出错:{str(e)}" # 使用示例 if __name__ == "__main__": package = "com.android.settings" print(f"应用标签:{get_app_label(package)}")
方法二:批量获取所有应用的标签(适合批量包处理)
如果需要处理大量包名,逐个查询效率太低,你可以一次性获取设备上所有应用的包名和标签映射,之后直接根据包名查找即可,效率会高很多。
import subprocess import re def get_all_app_labels(): app_label_map = {} try: # 执行dumpsys命令获取所有应用的包信息 result = subprocess.check_output( ["adb", "shell", "dumpsys", "package", "packages"], stderr=subprocess.STDOUT, text=True ) # 正则匹配所有包名和对应的标签 pattern = r"Package \[([a-zA-Z0-9\.]+)\].*?label=(.*?)\n" matches = re.findall(pattern, result, re.DOTALL) for package, label in matches: cleaned_package = package.strip() cleaned_label = label.strip() # 如果标签为空,用包名代替 app_label_map[cleaned_package] = cleaned_label if cleaned_label else cleaned_package return app_label_map except subprocess.CalledProcessError as e: print(f"执行命令出错:{e.output.strip()}") return app_label_map # 使用示例 if __name__ == "__main__": all_labels = get_all_app_labels() # 查找指定包的标签 target_package = "com.tencent.mm" print(f"{target_package}的应用标签:{all_labels.get(target_package, '未找到')}")
一些注意事项
- 确保你的设备已经开启USB调试,并且可以通过
adb devices命令看到设备(如果没识别到,检查USB连接模式或者驱动) - 应用标签会跟随设备的系统语言变化,你获取到的是当前设备语言环境下的显示名称
- 少数系统核心应用可能需要特殊权限,但大部分普通应用和常用系统应用都能直接获取标签
- 不同品牌的Android设备,
pm dump或dumpsys的输出格式可能略有差异,如果正则匹配失败,可以手动执行对应的adb命令(比如adb shell pm dump com.android.settings),查看输出结构后微调正则表达式
备注:内容来源于stack exchange,提问作者martin
相关产品推荐
相关产品推荐

