ADB常用命令及其用法大全「建议收藏」

2022-08-12 16:53:28 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

前言: 本文主要记述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

查看当前连接设备:

  • 查看当前连接设备:
代码语言:javascript复制
adb devices
  • 如果发现多个设备:
代码语言:javascript复制
adb -s 设备号 其他指令

举例: adb -s devicel install xxx.apk

查看顶部Activity:

  • windows环境下:
代码语言:javascript复制
adb shell dumpsys activity | findstr "mFocusedActivity"
  • Linux、Mac环境下:
代码语言:javascript复制
adb shell dumpsys activity | grep "mFocusedActivity"

查看日志:

代码语言:javascript复制
adb logcat

安装apk文件:

代码语言:javascript复制
adb install xxx.apk
  • 此安装方式,如果已经存在,无法安装; 推荐使用覆盖安装:
代码语言:javascript复制
adb install -r xxx.apk
  • 比分直接RUN出来的包是test-onlu的无法安装,推荐使用**-t**
代码语言:javascript复制
adb install -r -t xxx.apk

卸载App:

代码语言:javascript复制
adb uninstall com.zhy.app
  • 如果想要保留数据,则:
代码语言:javascript复制
adb uninstall -k com.zhy.app

传递文件:

  • 往手机SDCard传递文件:
代码语言:javascript复制
adb push 文件名 手机端SDCard路径

例如: adb push 帅照.jpg /sdcard/

  • 从手机端下载文件:
代码语言:javascript复制
adb pull /sdcard/xxx.txt

查看手机端安装的所有app包名:

代码语言:javascript复制
adb shell pm list packages

启动Activity:

代码语言:javascript复制
adb shell am start 包名/完整Activity路径

例如: adb shell am start com.zhy.aaa/com.zhy.aaa.MainActivity

  • 如果需要携带参数(携带一个Intent,Key 为name):
代码语言:javascript复制
adb shell am start com.zhy.aaa/com.zhy.aaa.MainActivity -e name zhy
  • 启动一个隐式的Intent:
代码语言:javascript复制
adb shell am start -a "android.intent.action,VIEW" -d "https://www.google.com"

发送广播:

代码语言:javascript复制
adb shell am broadcast -a "broadcastactionfilter"

-如果需要携带参数(携带一个Intent,key为name):

代码语言:javascript复制
adb shell am broadcast -a "broadcastactionfilter" -e name zhy

启动服务:

代码语言:javascript复制
adb shell am startservice "com.zhy.aaa/com.zhy.aaa.MyService"

屏幕截图:

  • 可以使用screencap命令来进行手机屏幕截图,例如:
代码语言:javascript复制
adb shell screencap /sdcard/screen.png

录制视频:

可以使用screenrecord[options] filename命令来录制屏幕视频,例如:

代码语言:javascript复制
adb shell screenrecord /sdcard/demo.mp4

针对Android小白的常用ADB细致讲解操作:

一.链接ADB:

启动ADB的2种方式:

  1. 直接进入sdk/platform-tools目录: 然后在命令行中输入adb devices来验证设备是否连接。 缺点:每次进入platform-tools目录很麻烦。
  2. 将adb地址写入环境变量**(即配置adb为环境变量)**
  • 没有配置环境变量之前:

解决上述图片中的问题,请看下方针对MacOS和Windows系统的解决方案:

  • 对于macOS,可以这样配置:
代码语言:javascript复制
export PATH=$PATH:<path to Android SDK>/platform-tools

然后在命令行中输入source ~/.bash_profile或者source ~/.zshrc来更新配置文件。

  • 对于windows,可以这样配置:
  1. 先进入环境变量:
  1. 选择系统变量下的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 ———未连接到模拟器/设备

二. 安装和卸载

  1. 安装: 我们可以使用adb install [option] <path> 命令来将电脑上的一个APP安装到手机上,例如: adb install crime.apk 注意:有时候apk文件不在你的启动cmd的路径下,记得添加apk文件在你电脑上的path路径。
  • 如果当前连接的设备个数超过一个(比如开启多个模拟器)。 那么在安装操作之前,我们需要现在cmd中输入adb devices查看当前连接的设备的序列号,并复制你想要给哪个设备安装apk文件的设备序列号。然后指定要操作的设备的序列号,执行adb -s [serial_number] command 命令。 比如现在有多个设备连接了电脑并都打开了开发者模式,那么我如果直到了我当前华为设备的序列号后,输入下列命令:
代码语言:javascript复制
adb -s A5R7N18202000063 install crime.apk

即可安装成功crime.apk文件了。

  1. 覆盖安装: 如果你当前要操作的手机设备已经安装了你想要安装的APP,你再去执行安装命令(即重复安装),就会报错:Failure [INSTALL_FAILED_ALREADY_EXISTS].解决方案为:覆盖安装:加上**-r**(replace)来替换当前已安装的应用。
代码语言:javascript复制
adb install -r crime.apk
  1. 卸载: 卸载一个当前设备上的某个APP的命令为:adb uninstall [option]<packagename>,前提是你得直到你想要卸载的APP的包名。 注意:卸载APP知道它的包名;从电脑上安装APP到手机上只需要知道电脑中APK 的存放路径和APK文件名。

APP卸载后,其缓存文件一般也会被清除。 如果要想保留缓存文件,添加 -k,即: adb uninstall -k 包名

三.文件操作

  1. 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地址为空,则会拷贝到电脑当前目录下: 例如:
代码语言:javascript复制
adb pull /sdcard/crime.apk 
  • 如果想要把电脑中的文件拷贝到手机里面,使用adb push <local> <remote> 命令:
代码语言:javascript复制
adb push crime.apk /sdcard/data/data
  1. 清除APP数据: 在开发中,经常会遇到:清空APP缓存数据,然后进行一系列请求。如,清空APP缓存数据,可使用adb shell pm clear com.example.packagename 命令。注:该命令清除掉APP的缓存,还能把APP的数据给清空。
  2. 查看所有App的名称: 使用如下命令:
代码语言:javascript复制
adb shell pm list packages

注意:该命令可以查看手机上的APP名称。可以在后面加上 -f ,这样还能显示该APP的路径。 即:

代码语言:javascript复制
adb shell pm list packages -f 

四.事件输入:

  1. input:
  • 使用adb shell input命令向屏幕输入一些信息, 例如:
代码语言:javascript复制
adb shell input text "insert%stext%shere"

注意:%s表示空格。

  • 使用adb shell input tap命令来模拟屏幕点击事件,例如:
代码语言:javascript复制
adb shell input tap 500 1450

表示在屏幕上(500,1450)的坐标点上进行一次点击。

  • 使用adb shell input swipe命令来模拟手势滑动事件,例如:
代码语言:javascript复制
adb shell input swipe 100 500 100 1450 100

表示从屏幕坐标(100,500)开始,滑动到(100,1450)结束,整个过程耗时100ms.

  • 使用上面的命令还可以模拟”**长按(long press)**操作,也就是2个坐标点相同,耗时超过500ms.
代码语言:javascript复制
adb shell input swipe 100 500 100 500 500
  • 使用adb shell input keyevent命令来模拟点按实体按钮的命令,例如:
代码语言:javascript复制
adb shell input keyevent 25

该命令表示调低音量。数字25是在AOSP源码中的KeyEvent类里卖弄定义的一个事件常量。该类定义了将近300个事件常量。

  1. am: am(Activity Manager)命令来启动一个APP、启动Activity、启动广播和服务等等。
  • 启动一个activity,最简单的命令可以使用adb shell am start com.package.name/com.package.name.ActivityName,例如:
代码语言:javascript复制
adb shell am start com.example.crime/com.example.crime.MainActivity
  • 如果启动带有参数,则使用**-e**标签,比如有一个SecondActivity,如:
代码语言:javascript复制
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"
    }
}

即启动SecondActivity的话需要传入一个agrus_name参数,那么在命令行中可以执行:

代码语言:javascript复制
adb shell am start com.example.crime/com.example.crime.SecondActivity -e argus_name QiuShui
  • 启动带的参数一般是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信息。例如:
代码语言:javascript复制
adb shell am start -a "android.intent.action.VIEW" -d "https://www.google.com"

上面这个命令会启动浏览器打开谷歌网址页面。

  • am 也能发送广播和启动服务。比如启动一个广播,一般要添加一个**-a**:
代码语言:javascript复制
adb shell am broadcast -a "our.specified.action"

还可以在上述命令后面添加**-e**来添加额外的信息。

  • 使用下面的命令可以直接让手机重启:
代码语言:javascript复制
adb shell am broadcast -a android.intent.action.BOOT_COMPILETED
  • 启动一个服务也是类似,例如:
代码语言:javascript复制
adb shell am startservice "com.example.crime/com.example.crime.MyService"

五.事件输出:

  1. 日志信息: 使用adb logcat可以显示日志信息,使用**command c (Windows下:ctrl c)**来停止日志输出。 比起原生的adb logcat,JakeWharton大神的pidcat显示效果更好:

但我还是更喜欢AndroidStudio的日志功能,非常完善。

  1. 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 查看信息,会有很长的代码,分析其结构,可以把上述命令得到的信息拆分为:
代码语言:javascript复制
dumpsys activity intents
dumpsys activity broadcasts
dumpsys activity providers
dumpsys activity permissions
dumpsys activity services
dumpsys activity recents
dumpsys activity activities
dumpsys activity processes

我们可以选择这几个中的一个命令进行查询。例如查看界面相关的,使用adb shell dumpsys activity activities命令。 上述几种信息类型可以用缩写来表示,即adb shell dumpsys activity a等价于adb shell dumpsys activity activities命令等。注意:providers的缩写是prov、permissions的缩写是perm

  • 如果上述输出内容太多,只想关注运行的Activity结构层次其他的无所谓,可以使用grep命令来过滤:
代码语言:javascript复制
adb shell dumpsys activity | grep -i 'run'

我这里会得到这样的输出:

代码语言:javascript复制
  * 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

信息中:屏幕正在显示的界面是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内存使用情况。
  1. 屏幕截图:
  • 使用screencap<filename> 命令来进行手机屏幕截图,例如:
代码语言:javascript复制
adb shell screencap /sdcard/screen.png
  1. 录制视频: 使用screenrecord [options] filename命令来录制屏幕视频,例如:
代码语言:javascript复制
adb shell screenrecord /sdcard/demo.mp4

注:此命令适用于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 官方网站提供的文档才是最全最可靠的信息来源!!!

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/132159.html原文链接:https://javaforall.cn

0 人点赞