ADB常用命令及其用法大全
作者:互联网
前言:
本文主要记述ADB的常用命令,关于ADB用法大全,可参考文末链接
ADB简介:
ADB,即 Android Debug Bridge,它是 Android 开发/测试人员不可替代的强大工具,也是 Android 设备玩家的好玩具。安卓调试桥 (Android Debug Bridge, adb),是一种可以用来操作手机设备或模拟器的命令行工具。它存在于 sdk/platform-tools 目录下。虽然现在 Android Studio 已经将大部分 ADB 命令以图形化的形式实现了,但是了解一下还是有必要的。
注: 有部分命令的支持情况可能与 Android 系统版本及定制 ROM 的实现有关。
小技巧:记不住ADB命令?
ADB 命令的插件 adb-idea
查看当前连接设备:
- 查看当前连接设备:
adb devices
- 1
- 如果发现多个设备:
adb -s 设备号 其他指令
- 1
举例:
adb -s devicel install xxx.apk
查看顶部Activity:
- windows环境下:
adb shell dumpsys activity | findstr "mFocusedActivity"
- 1
- Linux、Mac环境下:
adb shell dumpsys activity | grep "mFocusedActivity"
- 1
查看日志:
adb logcat
- 1
安装apk文件:
adb install xxx.apk
- 1
- 此安装方式,如果已经存在,无法安装;
推荐使用覆盖安装:
adb install -r xxx.apk
- 1
- 比分直接RUN出来的包是test-onlu的无法安装,推荐使用**-t**
adb install -r -t xxx.apk
- 1
卸载App:
adb uninstall com.zhy.app
- 1
- 如果想要保留数据,则:
adb uninstall -k com.zhy.app
- 1
传递文件:
- 往手机SDCard传递文件:
adb push 文件名 手机端SDCard路径
- 1
例如:
adb push 帅照.jpg /sdcard/
- 从手机端下载文件:
adb pull /sdcard/xxx.txt
- 1
查看手机端安装的所有app包名:
adb shell pm list packages
- 1
启动Activity:
adb shell am start 包名/完整Activity路径
- 1
例如:
adb shell am start com.zhy.aaa/com.zhy.aaa.MainActivity
- 如果需要携带参数(携带一个Intent,Key 为name):
adb shell am start com.zhy.aaa/com.zhy.aaa.MainActivity -e name zhy
- 1
- 启动一个隐式的Intent:
adb shell am start -a "android.intent.action,VIEW" -d "https://www.google.com"
- 1
发送广播:
adb shell am broadcast -a "broadcastactionfilter"
- 1
-如果需要携带参数(携带一个Intent,key为name):
adb shell am broadcast -a "broadcastactionfilter" -e name zhy
- 1
启动服务:
adb shell am startservice "com.zhy.aaa/com.zhy.aaa.MyService"
- 1
屏幕截图:
- 可以使用screencap命令来进行手机屏幕截图,例如:
adb shell screencap /sdcard/screen.png
- 1
录制视频:
可以使用screenrecord[options] filename命令来录制屏幕视频,例如:
adb shell screenrecord /sdcard/demo.mp4
- 1
针对Android小白的常用ADB细致讲解操作:
一.链接ADB:
启动ADB的2种方式:
- 直接进入sdk/platform-tools目录:
然后在命令行中输入adb devices来验证设备是否连接。
缺点:每次进入platform-tools目录很麻烦。 - 将adb地址写入环境变量**(即配置adb为环境变量)**
- 没有配置环境变量之前:
解决上述图片中的问题,请看下方针对MacOS和Windows系统的解决方案: - 对于macOS,可以这样配置:
export PATH=$PATH:<path to Android SDK>/platform-tools
- 1
然后在命令行中输入source ~/.bash_profile或者source ~/.zshrc来更新配置文件。
- 对于windows,可以这样配置:
- 先进入环境变量:
- 选择系统变量下的Path再选择编辑(你也可以选择新建,注意添加分号;)
然后去寻找你的Android SDK文件夹下的platform-tools,进入该文件夹并在地址栏复制当前路径。
最后,新建并添加复制好的路径即可。
- 验证:配置环境变量成功后,关闭当前cmd,再次进入cmd中,输入adb信息,可以看到如下图所示,那么就OK了:
注意:Android SDK,你可在安卓官网去下载,或者如果你拥有AndroidStudio也会下载过它,它可存放在资源管理器下的任意位置。你知晓它的存放位置即可。
- 手机打开“开发人员选项:(此处以华为畅玩7x手机为例)
进入手机设备的设置,选择关于手机:
找到版本号,并连续点击它7次及以上,直到出现“已打开开发者人员选项“字样时停止。 然后再回到设置 ->系统,这时可以看见开发人员选项并按照图示进行勾选。
- 验证ADB连接设备成功:
前面的步骤完成后(即环境配置成功、开发者选择中开启了USB调试模式),打开cmd(快捷键windows键+R键盘,在框中输入cmd)。在任意路径进入cmd后,输入adb device: - 如果没有连接手机或因为数据线问题等其他原因,则会出现下图:(失败原因请自己排查)
- 成功后,如下图所示:(下方一串字母是我的手机序列号)
上方的A5R7N18202000063是我的手机设备序列号(手机不同,设备序列号也就不同),device是设备状态。
设备的3种状态:
offline ———设备未连接到adb或者没有响应
device———设备已连接到ADB
no device ———未连接到模拟器/设备
二. 安装和卸载
- 安装:
我们可以使用adb install [option] <path> 命令来将电脑上的一个APP安装到手机上,例如:
adb install crime.apk
注意:有时候apk文件不在你的启动cmd的路径下,记得添加apk文件在你电脑上的path路径。
- 如果当前连接的设备个数超过一个(比如开启多个模拟器)。
那么在安装操作之前,我们需要现在cmd中输入adb devices查看当前连接的设备的序列号,并复制你想要给哪个设备安装apk文件的设备序列号。然后指定要操作的设备的序列号,执行adb -s [serial_number] command 命令。
比如现在有多个设备连接了电脑并都打开了开发者模式,那么我如果直到了我当前华为设备的序列号后,输入下列命令:
adb -s A5R7N18202000063 install crime.apk
- 1
即可安装成功crime.apk文件了。
- 覆盖安装:
如果你当前要操作的手机设备已经安装了你想要安装的APP,你再去执行安装命令(即重复安装),就会报错:Failure [INSTALL_FAILED_ALREADY_EXISTS].解决方案为:覆盖安装:加上**-r**(replace)来替换当前已安装的应用。
adb install -r crime.apk
- 1
- 卸载:
卸载一个当前设备上的某个APP的命令为:adb uninstall [option]<packagename>,前提是你得直到你想要卸载的APP的包名。
注意:卸载APP知道它的包名;从电脑上安装APP到手机上只需要知道电脑中APK 的存放路径和APK文件名。
APP卸载后,其缓存文件一般也会被清除。
如果要想保留缓存文件,添加 -k,即:
adb uninstall -k 包名
三.文件操作
- Android 手机中的文件路径:
以前手机容量较小,一般会有可拔插的SD卡扩展内存,然后把资源数据存放到SD卡目录下。现在,手机取消了SD卡,外部存储空间很大了,但是Android仍称之为SD。为了做兼容,也会mock一个假的SD卡路径。因此,很多开发者将APP数据保存在**/sdcard**目录下。现在已经不推荐将文件存储在/sdcard目录下了。
-
音视频文件还是应该放在SD卡目录下。 SD卡的路径是/mnt/sdcard/或者/sdcard,/sdcard是/mnt/sdcard的软链接。其中,/mnt/sdcard/DCIM一般用于存放照片,DCIM——Digital Camera Images。但是截图及APP保存图片的位置,一般是在/mnt/sdcard/Pictures。以此类推,视频文件存放在/mnt/sdcard/Movies等。
-
当我们手机上安装完成了一个APP后,相关的文件存放在下面2个地方:
1):APP本身被存放在/data/app 目录下。
2):文件目录存放在/data/data/<package name>目录下,该目录下存放有数据库、SharedPreference和其他缓存数据。 -
如果想把手机中的文件拷贝到电脑中,使用**adb pull <remote> [local]**命令。其中,local地址为空,则会拷贝到电脑当前目录下:
例如:
adb pull /sdcard/crime.apk
- 1
- 如果想要把电脑中的文件拷贝到手机里面,使用adb push <local> <remote> 命令:
adb push crime.apk /sdcard/data/data
- 1
-
清除APP数据:
在开发中,经常会遇到:清空APP缓存数据,然后进行一系列请求。如,清空APP缓存数据,可使用adb shell pm clear com.example.packagename 命令。注:该命令清除掉APP的缓存,还能把APP的数据给清空。 -
查看所有App的名称:
使用如下命令:
adb shell pm list packages
- 1
注意:该命令可以查看手机上的APP名称。可以在后面加上 -f ,这样还能显示该APP的路径。
即:
adb shell pm list packages -f
- 1
四.事件输入:
- input:
- 使用adb shell input命令向屏幕输入一些信息,
例如:
adb shell input text "insert%stext%shere"
- 1
注意:%s表示空格。
- 使用adb shell input tap命令来模拟屏幕点击事件,例如:
adb shell input tap 500 1450
- 1
表示在屏幕上(500,1450)的坐标点上进行一次点击。
- 使用adb shell input swipe命令来模拟手势滑动事件,例如:
adb shell input swipe 100 500 100 1450 100
- 1
表示从屏幕坐标(100,500)开始,滑动到(100,1450)结束,整个过程耗时100ms.
- 使用上面的命令还可以模拟”**长按(long press)**操作,也就是2个坐标点相同,耗时超过500ms.
adb shell input swipe 100 500 100 500 500
- 1
- 使用adb shell input keyevent命令来模拟点按实体按钮的命令,例如:
adb shell input keyevent 25
- 1
该命令表示调低音量。数字25是在AOSP源码中的KeyEvent类里卖弄定义的一个事件常量。该类定义了将近300个事件常量。
- am:
am(Activity Manager)命令来启动一个APP、启动Activity、启动广播和服务等等。
- 启动一个activity,最简单的命令可以使用adb shell am start com.package.name/com.package.name.ActivityName,例如:
adb shell am start com.example.crime/com.example.crime.MainActivity
- 1
- 如果启动带有参数,则使用**-e**标签,比如有一个SecondActivity,如:
class SecondActivity : AppCompatActivity() {
companion object { private val ARGUS_NAME = "argus_name" fun launch(activity: Activity, content: String): Intent { val intent = Intent(activity, SecondActivity::class.java) intent.putExtra(ARGUS_NAME, content) return intent } } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_second) val name = intent.getStringExtra(ARGUS_NAME) nameTv.text = "Hello, $name" }
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
即启动SecondActivity的话需要传入一个agrus_name参数,那么在命令行中可以执行:
adb shell am start com.example.crime/com.example.crime.SecondActivity -e argus_name QiuShui
- 1
- 启动带的参数一般是Key-value形式,这里的key是argus_name,Value是QiuShui.
除了默认启动的activity外,打开其他的activity时,需要在清单文件中添加android:exported="true"属性。 - 要启动一个隐式的Intent,也就是说需要传入action等参数,在ADB调试桥中可以得知Intent的参数规范,比如**-a表示action**,-c表示category,-d表示data_uri,-e表示添加额外Key-Value信息。例如:
adb shell am start -a "android.intent.action.VIEW" -d "https://www.google.com"
- 1
上面这个命令会启动浏览器打开谷歌网址页面。
- am 也能发送广播和启动服务。比如启动一个广播,一般要添加一个**-a**:
adb shell am broadcast -a "our.specified.action"
- 1
还可以在上述命令后面添加**-e**来添加额外的信息。
- 使用下面的命令可以直接让手机重启:
adb shell am broadcast -a android.intent.action.BOOT_COMPILETED
- 1
- 启动一个服务也是类似,例如:
adb shell am startservice "com.example.crime/com.example.crime.MyService"
- 1
五.事件输出:
- 日志信息:
使用adb logcat可以显示日志信息,使用**command +c (Windows下:ctrl+c)**来停止日志输出。
比起原生的adb logcat,JakeWharton大神的pidcat显示效果更好:
但我还是更喜欢AndroidStudio的日志功能,非常完善。 - dumpsys:
dumpsys命令可以提供非常多的系统信息。可以通过adb shell service list来查看dumpsys能提供查询信息的服务,常用的有:
服务 | 类名 | 功能 |
---|---|---|
activity | ActivityManagerService | AMS相关信息 |
package | PackageManagerService | PMS相关信息 |
window | WindowManagerService | WMS相关信息 |
input | InputManagerService | IMS相关信息 |
power | PowerManagerService | PMS相关信息 |
procstats | ProcessStatsService | 进程统计 |
battery | BatteryService | 电池信息 |
alarm | AlarmManagerService | 闹钟信息 |
meminfo | MemBinder | 内存 |
例如,要查看电池信息,命令行输入adb shell dumpsys battery,可以看到如下图:
- 使用adb shell dumpsys activity 查看信息,会有很长的代码,分析其结构,可以把上述命令得到的信息拆分为:
dumpsys activity intents
dumpsys activity broadcasts
dumpsys activity providers
dumpsys activity permissions
dumpsys activity services
dumpsys activity recents
dumpsys activity activities
dumpsys activity processes
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
我们可以选择这几个中的一个命令进行查询。例如查看界面相关的,使用adb shell dumpsys activity activities命令。
上述几种信息类型可以用缩写来表示,即adb shell dumpsys activity a等价于adb shell dumpsys activity activities命令等。注意:providers的缩写是prov、permissions的缩写是perm。
- 如果上述输出内容太多,只想关注运行的Activity结构层次其他的无所谓,可以使用grep命令来过滤:
adb shell dumpsys activity | grep -i 'run'
- 1
我这里会得到这样的输出:
* ContentProviderRecord{978680e u0 qiushui.me.test/com.android.tools.fd.runtime.InstantRunContentProvider}
authority=qiushui.me.test.com.android.tools.fd.runtime.InstantRunContentProvider
Running activities (most recent first):
Run #1: ActivityRecord{304ded1 u0 qiushui.me.test/.SecondActivity t14}
Run #0: ActivityRecord{19b9e16 u0 qiushui.me.test/.MainActivity t14}
Running activities (most recent first):
Run #0: ActivityRecord{f9bafb7 u0 com.google.android.apps.nexuslauncher/.NexusLauncherActivity t13}
ACTIVITY MANAGER RUNNING PROCESSES (dumpsys activity processes)
User #0: state=RUNNING_UNLOCKED
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
信息中:屏幕正在显示的界面是SecondActivity,然后是MainActivity.NexusLauncherActivity是处于最底层,就是Launcher.
- 查看APP有那些进程,使用adb shell dumpsys activity p <packagename> | grep -i ‘ProcessRecord’ | grep -i 'PID’
,然后程序会输出信息,你可以数一下有多少个PID开头,有多少个就表示有几个进程。还可以知道分别的进程名和PID等等。 - 查看APP使用了那些服务,使用 adb shell dumpsys activity s <package name> | grep -i ‘ServiceRecord’ 命令,显示结果中可以看出是谁推送的服务。
- 查看当前APP的内存使用情况,使用**adb shell dumpsys meminfo <package name>**命令,显示结果可以知道当前APP内存使用情况。
- 屏幕截图:
- 使用screencap<filename> 命令来进行手机屏幕截图,例如:
adb shell screencap /sdcard/screen.png
- 1
- 录制视频:
使用screenrecord [options] filename命令来录制屏幕视频,例如:
adb shell screenrecord /sdcard/demo.mp4
- 1
注:此命令适用于Android 4.4及以上的设备中。
录制视频也有参数选项,比如 --size 设置视频大小, --time-limit设置最大录制时长等。
六.系统命令:
- 查看进程信息:
使用adb shell ps命令查看进程信息。可以在该命令后加包名,来查看某个应用程序的进程信息。 - 查看CPU使用情况:
使用**adb shell top **命令来查看系统CPU使用情况。(ctrl+c结束)
上述就是关于ADB的一些基本命令介绍。
ADB用法大全:
点开链接访问具体内容:http://www.wanandroid.com/blog/show/2310
博主认为,最可靠的信息来源还是android官方网站,数据可靠最新,如果你感兴趣想了解Android官网中的ADB信息,请访问链接:https://developer.android.com/studio/command-line/adb.html
官方网站提供的文档才是最全最可靠的信息来源!!!
标签:shell,dumpsys,APP,常用命令,adb,activity,ADB,com,大全 来源: https://blog.csdn.net/kunkliu/article/details/122750757