当前位置:   article > 正文

【ADB常用命令及其用法大全(来自[醒不了的星期八]的全面总结)】_adb命令大全

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种方式:

    1. 直接进入sdk/platform-tools目录:
      然后在命令行中输入adb devices来验证设备是否连接。
      缺点:每次进入platform-tools目录很麻烦。
    2. 将adb地址写入环境变量(即配置adb为环境变量)
    • 没有配置环境变量之前:
      在这里插入图片描述
      解决上述图片中的问题,请看下方针对MacOS和Windows系统的解决方案:
    • 对于macOS,可以这样配置:
    export PATH=$PATH:<path to Android SDK>/platform-tools
    
    • 1

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

    • 对于windows,可以这样配置:
    1. 先进入环境变量:
      在这里插入图片描述
      在这里插入图片描述
    2. 选择系统变量下的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 命令。
      比如现在有多个设备连接了电脑并都打开了开发者模式,那么我如果直到了我当前华为设备的序列号后,输入下列命令:
    adb -s A5R7N18202000063 install crime.apk
    
    • 1

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

    1. 覆盖安装:
      如果你当前要操作的手机设备已经安装了你想要安装的APP,你再去执行安装命令(即重复安装),就会报错:Failure [INSTALL_FAILED_ALREADY_EXISTS].解决方案为:覆盖安装:加上 -r (replace)来替换当前已安装的应用。
    adb install -r crime.apk
    
    • 1
    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地址为空,则会拷贝到电脑当前目录下:
      例如:

    adb pull /sdcard/crime.apk 
    
    • 1
    • 如果想要把电脑中的文件拷贝到手机里面,使用adb push <local> <remote> 命令:
    adb push crime.apk /sdcard/data/data
    
    • 1
    1. 清除APP数据:
      在开发中,经常会遇到:清空APP缓存数据,然后进行一系列请求。如,清空APP缓存数据,可使用adb shell pm clear com.example.packagename 命令。注:该命令清除掉APP的缓存,还能把APP的数据给清空。

    2. 查看所有App的名称:
      使用如下命令:

    adb shell pm list packages
    
    • 1

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

    adb shell pm list packages -f 
    
    • 1

    四.事件输入:

    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个事件常量。

    1. am:
      am(Activity Manager)命令来启动一个APP、启动Activity、启动广播和服务等等。
    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

    五.事件输出:

    1. 日志信息:
      使用adb logcat可以显示日志信息,使用command +c (Windows下:ctrl+c)来停止日志输出。
      比起原生的adb logcat,JakeWharton大神的pidcat显示效果更好:
      在这里插入图片描述
      但我还是更喜欢AndroidStudio的日志功能,非常完善。
    2. dumpsys:
      dumpsys命令可以提供非常多的系统信息。可以通过adb shell service list来查看dumpsys能提供查询信息的服务,常用的有:
    服务类名功能
    activityActivityManagerServiceAMS相关信息
    packagePackageManagerServicePMS相关信息
    windowWindowManagerServiceWMS相关信息
    inputInputManagerServiceIMS相关信息
    powerPowerManagerServicePMS相关信息
    procstatsProcessStatsService进程统计
    batteryBatteryService电池信息
    alarmAlarmManagerService闹钟信息
    meminfoMemBinder内存

    例如,要查看电池信息,命令行输入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
    • 9

    我们可以选择这几个中的一个命令进行查询。例如查看界面相关的,使用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
    • 10

    信息中:屏幕正在显示的界面是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. 屏幕截图:
    adb shell screencap /sdcard/screen.png
    
    • 1
    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
    官方网站提供的文档才是最全最可靠的信息来源!!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/320918
推荐阅读
相关标签
  

闽ICP备14008679号