ADB命令和ADB命令面试常见的问题

ADB命令常见的问题

连接模拟器端口: adb connect 127.0.0.1:7555(7555为mumu的端口)
列出已连接的设备:adb devices
启动 adb 服务:adb start-server
停止 adb 服务:adb kill-server
指定设备:adb -s <设备序列号> <命令>
普通安装:adb install
覆盖安装:adb install -r
完全卸载:adb uninstall <包名>
保留配置文件:adb uninstall -k <包名>
显示所有应用:adb shell pm list packages
只显示系统应用:adb shell pm list packages -s
只显示第三方应用:adb shell pm list packages -3
获取前台包名/activity名
mac:adb shell dumpsys activity | grep mFocusedActivity
win:adb shell dumpsys activity | findstr mFocusedActivity
启动应用:adb shell am start -n <包名>/
清除应用数据与缓存:adb shell pm clear <包名>
强制停止应用:adb shell am force-stop <包名>
从电脑上传文件至设备:adb push <电脑路径> <设备路径>
从设备复制文件至电脑:adb pull <设备路径> <电脑路径>
将模拟器当前显示截图:adb shell screencap <设备路径>
清除旧日志信息:adb logcat -c
开始抓取日志:adb logcat -v time > .\logcat.log
查看系统资源:adb shell top | grep 包名
查看 CPU 信息:adb shell dumpsys cpuinfo
看内存信息:adb shell dumpsys meminfo

ADB简介:

ADB,即 Android Debug Bridge,它是 Android 开发/测试人员不可替代的强大工具,也是 Android 设备玩家的好玩具。安卓调试桥 (Android Debug Bridge, adb),是一种可以用来操作手机设备或模拟器的命令行工具。它存在于 sdk/platform-tools 目录下。虽然现在 Android Studio 已经将大部分 ADB 命令以图形化的形式实现了,但是了解一下还是有必要的。
注: 有部分命令的支持情况可能与 Android 系统版本及定制 ROM 的实现有关。

查看当前连接设备

--查看当前连接设备
adb devices
--如果发现设备
adb -s 设备号 其他指令

查看顶部Activity:

--Windows环境下:
adb shell dumpsys activity | findstr "mFocusedActivity"
--Linux、Mac环境下
adb shell dumpsys activity | grep "mFocusedActivity"

查看日志

adb logcat

安装apk文件

adb install xxx.apk
--次安装方式,如果已存在,无法安装;
--推荐使用覆盖安装
adb install -r xxx.apk
--比分直接RUN出来的是包test-onlu的无法安装,推荐使用****-t****
adb install -r -t xxx.apk

卸载App:

adb uninstall com.zhy.app
--如果想要保留数据,则:
adb uninstall -k com.zhy.app

传递文件:

--往手机SDCard传递文件:
adb push 文件名 手机端SDCard路径
--例如:
adb push 帅照.jpg /sdcard/

--从手机端下载文件:
adb pull /sdcard/xxx.txt

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

adb shell pm list packages

启动Activity:

adb shell am start 包名/完整Activity路径
--例如:
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
--启动一个隐式的Intent:
adb shell am start -a "android.intent.action,VIEW" -d "https://www.google.com"

发送广播:

adb shell am broadcast -a "broadcastactionfilter"
--如果需要携带参数(携带一个Intent,key为name):

adb shell am broadcast -a "broadcastactionfilter" -e name zhy

启动服务:

adb shell am startservice "com.zhy.aaa/com.zhy.aaa.MyService"

屏幕截图:

--可以使用screencap命令来进行手机屏幕截图,例如:
adb shell screencap /sdcard/screen.png

录制视频:

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

adb shell screenrecord /sdcard/demo.mp4

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

一.链接ADB:

启动ADB的2种方式:

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

1.png

解决上述图片中的问题,请看下方针对MacOS和Windows系统的解决方案:
--对于macOS,可以这样配置:

export PATH=$PATH:/platform-tools

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

--对于windows,可以这样配置:
1.先进入环境变量:


2.png

3.png

2.选择系统变量下的Path再选择编辑(你也可以选择新建,注意添加分号;)

5.png

7.png

--然后去寻找你的Android SDK文件夹下的platform-tools,进入该文件夹并在地址栏复制当前路径。


8.png
9.png
10.png

--最后,新建并添加复制好的路径即可。


11.png

--验证:配置环境变量成功后,关闭当前cmd,再次进入cmd中,输入adb信息,可以看到如下图所示,那么就OK了:


12.png

注意:Android SDK,你可在安卓官网去下载,或者如果你拥有AndroidStudio也会下载过它,它可存放在资源管理器下的任意位置。你知晓它的存放位置即可。

--手机打开“开发人员选项:(此处以华为畅玩7x手机为例)
进入手机设备的设置,选择关于手机

13.png

14.png

--找到版本号,并连续点击它7次及以上,直到出现“已打开开发者人员选项“字样时停止。 然后再回到设置 ->系统,这时可以看见开发人员选项并按照图示进行勾选。

15.png

--验证ADB连接设备成功:
前面的步骤完成后(即环境配置成功、开发者选择中开启了USB调试模式),打开cmd(快捷键windows键+R键盘,在框中输入cmd)。在任意路径进入cmd后,输入adb device:
--如果没有连接手机或因为数据线问题等其他原因,则会出现下图:(失败原因请自己排查)

16.png

--成功后,如下图所示:(下方一串字母是我的手机序列号)
17.png

上方的A5R7N18202000063是我的手机设备序列号(手机不同,设备序列号也就不同),device是设备状态。
设备的3种状态:
offline ———设备未连接到adb或者没有响应
device———设备已连接到ADB
no device ———未连接到模拟器/设备

二. 安装和卸载

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

adb -s A5R7N18202000063 install crime.apk

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

2.覆盖安装:
如果你当前要操作的手机设备已经安装了你想要安装的APP,你再去执行安装命令(即重复安装),就会报错:Failure [INSTALL_FAILED_ALREADY_EXISTS].解决方案为:覆盖安装:加上-r(replace)来替换当前已安装的应用。
adb install -r crime.apk
3.卸载:
卸载一个当前设备上的某个APP的命令为:adb uninstall [option],前提是你得直到你想要卸载的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/目录下,该目录下存放有数据库、SharedPreference和其他缓存数据。

--如果想把手机中的文件拷贝到电脑中,使用adb pull [local]命令。其中,local地址为空,则会拷贝到电脑当前目录下:
例如:

adb pull /sdcard/crime.apk

--如果想要把电脑中的文件拷贝到手机里面,使用**adb push **命令:
adb push crime.apk /sdcard/data/data

2.清除APP数据:
在开发中,经常会遇到:清空APP缓存数据,然后进行一系列请求。如,清空APP缓存数据,可使用adb shell pm clear com.example.packagename 命令。注:该命令清除掉APP的缓存,还能把APP的数据给清空。

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

adb shell pm list packages

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

adb shell pm list packages -f

四.事件输入:

1.input:
使用adb shell input命令向屏幕输入一些信息,
例如:
adb shell input text "insert%stext%shere"

注意:%s表示空格。

--使用adb shell input tap命令来模拟屏幕点击事件,例如:
adb shell input tap 500 1450

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

--使用adb shell input swipe命令来模拟手势滑动事件,例如:
adb shell input swipe 100 500 100 1450 100

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

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

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

2.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

--如果启动带有参数,则使用-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"
    }
}

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

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信息。例如:
adb shell am start -a "android.intent.action.VIEW" -d "https://www.google.com"

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

--am 也能发送广播和启动服务。比如启动一个广播,一般要添加一个-a
adb shell am broadcast -a "our.specified.action"
还可以在上述命令后面添加-e来添加额外的信息。

--使用下面的命令可以直接让手机重启:
adb shell am broadcast -a android.intent.action.BOOT_COMPILETED

--启动一个服务也是类似,例如:
adb shell am startservice "com.example.crime/com.example.crime.MyService"

五.事件输出:

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

18.png

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

2.dumpsys:
dumpsys命令可以提供非常多的系统信息。可以通过adb shell service list来查看dumpsys能提供查询信息的服务,常用的有:


19.png

例如,要查看电池信息,命令行输入adb shell dumpsys battery,可以看到如下图:

20.png

--使用**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

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

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

  * 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 | grep -i ‘ProcessRecord’ | grep -i 'PID’
,然后程序会输出信息,你可以数一下有多少个PID开头,有多少个就表示有几个进程。还可以知道分别的进程名和PID等等。
--查看APP使用了那些服务,使用** adb shell dumpsys activity s | grep -i ‘ServiceRecord’ 命令,显示结果中可以看出是谁推送的服务。
--查看当前APP的内存使用情况,使用
adb shell dumpsys meminfo 命令,显示结果可以知道当前APP内存使用情况。
3.屏幕截图:
使用
screencap** 命令来进行手机屏幕截图,例如:
adb shell screencap /sdcard/screen.png

4.录制视频:
使用screenrecord [options] filename命令来录制屏幕视频,例如:
adb shell screenrecord /sdcard/demo.mp4

注:此命令适用于Android 4.4及以上的设备中。
录制视频也有参数选项,比如 --size 设置视频大小, --time-limit设置最大录制时长等。

六.系统命令:

--查看进程信息:
使用adb shell ps命令查看进程信息。可以在该命令后加包名,来查看某个应用程序的进程信息。
--查看CPU使用情况:
使用**adb shell top **命令来查看系统CPU使用情况。(ctrl+c结束)

你可能感兴趣的:(ADB命令和ADB命令面试常见的问题)