news 2026/5/6 10:53:34

ADB命令实战:5分钟搞定Android应用包名查询与安装路径定位(Windows/Linux双平台)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ADB命令实战:5分钟搞定Android应用包名查询与安装路径定位(Windows/Linux双平台)

ADB命令实战:5分钟搞定Android应用包名查询与安装路径定位(Windows/Linux双平台)

每次接手新项目时,面对测试机上密密麻麻的应用图标,你是否也经历过"大海捞针"般寻找目标应用的困扰?作为移动开发老手,我至今记得第一次逆向分析时,花了半小时才定位到目标APK的尴尬经历。本文将分享一套经过实战检验的ADB查询技巧,让你在不同操作系统下都能闪电般完成应用定位。

1. 环境准备与基础命令解析

在开始之前,确保你的开发环境满足以下条件:

  • 已安装Android SDK Platform Tools(包含adb)
  • 设备已开启USB调试模式
  • 通过adb devices命令确认设备连接成功

基础命令速查表

命令格式功能描述适用平台
adb shell pm list packages列出设备所有应用包名Windows/Linux
adb shell pm path <包名>显示指定应用的APK安装路径Windows/Linux
adb shell dumpsys package <包名>获取应用的完整信息Windows/Linux

提示:在Linux终端中,建议使用sudo adb kill-server && sudo adb start-server解决常见的设备连接问题

2. 精准定位目标应用包名

2.1 基础查询方法

全量列出设备应用包名是最直接的查询方式,但在实际开发中我们往往需要更精准的定位。试试这个组合命令:

adb shell pm list packages -f | grep "keyword"

这个命令的妙处在于:

  • -f参数会同时显示包名和关联APK路径
  • 管道符|将结果传递给grep进行二次过滤
  • 替换"keyword"为应用特征词(如开发商名称)

2.2 Windows平台特殊处理

在PowerShell环境下,过滤命令需要稍作调整:

adb shell pm list packages -f | Select-String "keyword"

如果遇到编码问题,可以尝试:

$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding

3. 深入解析应用安装路径

3.1 路径结构解读

获取到包名后,查询安装路径就很简单了:

adb shell pm path com.example.myapp

典型输出示例:

package:/data/app/~~Abc123==/com.example.myapp-xyz456==/base.apk

路径组成解析:

  • /data/app/:标准用户应用安装目录
  • ~~Abc123==:随机生成的目录哈希
  • -xyz456==:应用签名校验值
  • base.apk:主APK文件(可能还有split_config.xx.apk)

3.2 批量提取技巧

需要分析多个应用时,可以结合循环命令:

for pkg in $(adb shell pm list packages | cut -d':' -f2); do echo "$pkg : $(adb shell pm path $pkg)" done > all_packages_path.txt

这个脚本会:

  1. 提取所有包名(去掉"package:"前缀)
  2. 为每个包名查询安装路径
  3. 将结果保存到文本文件

4. 高级应用场景实战

4.1 系统应用特殊处理

系统应用通常安装在/system分区,查询时需要额外注意:

adb shell pm list packages -s # 只列出系统应用 adb shell pm path com.android.settings # 系统设置应用的路径

4.2 多用户设备处理

在支持多用户的设备上,需要指定用户ID:

adb shell pm list packages --user 10 # 查询用户10的应用 adb shell pm path --user 10 com.example.myapp

4.3 结合APK分析工具

获取APK路径后,可以快速拉取到本地分析:

adb pull $(adb shell pm path com.example.myapp | cut -d':' -f2) ./myapp.apk

然后使用下列工具之一进行分析:

  • JD-GUI:查看反编译的Java代码
  • APKTool:解包资源文件
  • Android Studio:直接分析APK结构

5. 效率提升技巧与自动化脚本

5.1 常用命令封装

创建adb_utils.sh脚本:

#!/bin/bash function find_app() { adb shell pm list packages -f | grep "$1" } function get_path() { adb shell pm path "$1" } function pull_apk() { local path=$(adb shell pm path "$1" | cut -d':' -f2) adb pull "$path" "$2" }

5.2 Windows批处理方案

对于Windows用户,可以创建find_app.bat

@echo off adb shell pm list packages -f | findstr "%1"

5.3 自动化日志记录

开发调试时,这个命令组合特别有用:

adb logcat | grep $(adb shell ps | grep "com.example.myapp" | awk '{print $2}')

它实现了:

  1. 通过包名查找进程ID
  2. 过滤该进程的日志输出
  3. 实时显示在终端

6. 疑难问题解决方案

问题1adb devices显示设备未授权

  • 检查设备是否弹出授权对话框
  • 尝试重启adb服务:adb kill-server && adb start-server

问题2pm list packages返回空列表

  • 确认设备已解锁屏幕
  • 检查adb shell是否具有root权限
  • 尝试指定用户:pm list packages --user 0

问题3:路径查询返回Error: Unknown package

  • 确认包名拼写正确
  • 检查应用是否已安装到当前用户
  • 使用通配符查询:pm list packages | grep "partial_name"

在最近的一次跨平台开发中,我发现Linux下的grep命令配合-i参数(忽略大小写)能显著提高查询效率。而Windows平台则需要注意PowerShell的默认编码问题,否则可能出现乱码导致过滤失败。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 19:15:32

初学者宝典:C语言入门基础知识大全

01 C语言程序的结构认识 用一个简单的c程序例子&#xff0c;介绍c语言的基本构成、格式、以及良好的书写风格&#xff0c;使小伙伴对c语言有个初步认识。 例1&#xff1a;计算两个整数之和的c程序&#xff1a; #include main() int a,b,sum; a20; /*定义变量a,b&#xff0c;sum…

作者头像 李华
网站建设 2026/4/15 19:12:21

粒子滤波算法在目标追踪中的Python实践指南

1. 粒子滤波算法入门&#xff1a;从生活场景理解核心思想 想象一下你在雾天开车&#xff0c;能见度只有5米。这时候GPS信号也不稳定&#xff0c;你只能依靠车速、方向盘转角等有限信息来推测自己的位置。这就是粒子滤波要解决的典型问题——在不确定环境中进行状态估计。我用这…

作者头像 李华
网站建设 2026/4/15 19:11:20

3个技巧:如何用ctfileGet开源工具解决城通网盘下载速度问题

3个技巧&#xff1a;如何用ctfileGet开源工具解决城通网盘下载速度问题 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 城通网盘作为国内广泛使用的文件存储服务&#xff0c;在提供便利的同时也面临着下…

作者头像 李华