2-appium之adb介绍
提醒:为保障学习效果,开始本节课前,请:
(1)搭建好测试环境;
(2)开启mumu模拟器;
1、adb的概念
adb(Android Debug Bridge)是一个针对Android的调试桥,是一个命令行工具,允许你与模拟器或者真机进行通信。方便开发者(测试人员)与设备进行交互。
2、adb的工作原理
启动一个adb客户端时,此客户端首先检查是否有已允许的adb服务器进程。如果没有,它会自动启动一个服务器进程。当服务器启动时,它默认与本地TCP端口5037绑定,并且侦听从adb客户端(Dos窗口或者脚本)发送的命令。所有adb客户端均使用端口5037与adb服务器进行通信。
打开Dos窗口,第一次输入如下命令:
adb devices
观察控制台输出,如下:
C:\Users\duzil>adb devices
* daemon not running; starting now at tcp:5037
* daemon started successfully
List of devices attached
翻译:
第一行,守护进程没有运行,将在5037端口启动
第二行,守护进程启动成功
第三行,附件设备清单
第四行,如果有设备的话,会列出设备信息。(我们明明已经开启了mumu模拟器,为什么找不到呢?后面解释)
这几行信息也印证了上面的介绍——“当启动客户端时,此客户端首先检查是否有已允许的adb服务器进程。如果没有,它会自动启动一个服务器进程。当服务器启动时,它默认与本地TCP端口5037绑定”
好,我们再次输入“adb devices”命令,看下打印结果:
C:\Users\duzil>adb devices
List of devices attachedC:\Users\duzil>
你可以看到,因为adb已经启动并绑定5037端口,因此这里没有再次启动,也就没有再次打印这些信息:
* daemon not running; starting now at tcp:5037
* daemon started successfully
3、adb常用命令
接下来,咱们开始学习adb的常用命令:
adb是一个非常强大的命令,你可以直接在Dos中执行一个adb命令,它会显示adb所有的命令。
这里我粘贴一部分命令,供大家了解:
C:\Users\duzil>adb
Android Debug Bridge version 1.0.41
Version 30.0.4-6686687
Installed as C:\Users\duzil\AppData\Local\Android\Sdk\platform-tools\adb.exeglobal options:-a listen on all network interfaces, not just localhost-d use USB device (error if multiple devices connected)-e use TCP/IP device (error if multiple TCP/IP devices available)-s SERIAL use device with given serial (overrides $ANDROID_SERIAL)-t ID use device with given transport id-H name of adb server host [default=localhost]-P port of adb server [default=5037]-L SOCKET listen on given socket for adb server [default=tcp:localhost:5037]general commands:devices [-l] list connected devices (-l for long output)help show this help messageversion show version numnetworking:connect HOST[:PORT] connect to a device via TCP/IP [default port=5555]disconnect [HOST[:PORT]]disconnect from given TCP/IP device [default port=5555], or allpair HOST[:PORT] [PAIRING CODE]pair with a device for secure TCP/IP communicationforward --list list all forward socket connectionsforward [--no-rebind] LOCAL REMOTEforward socket connection using:
好,来开始常用命令的学习
(1)adb connect IP:端口
前面我们讲过,adb启动默认监听5037端口。在第一节课,我们说过mumu模拟器默认启动端口为7555。所以,adb devices是无法找到模拟器的。因此我们先来学第一个命令:adb connect IP:端口,这个命令的作用是将设定adb监听的IP地址及对应的端口。
命令如下:
C:\Users\duzil>adb connect 127.0.0.1:7555
connected to 127.0.0.1:7555C:\Users\duzil>
可以看到端口监听成功
(2)adb devices
adb devices,用来打印监听端口的设备信息。
命令如下:
C:\Users\duzil>adb devices
List of devices attached
127.0.0.1:7555 deviceC:\Users\duzil>
可以看到已经能监测到mumu模拟器了。简单解释一下:
127.0.0.1:7555——是IP地址和端口号
device——是设备名称,如果你使用真机的话,会显示具体设备名。
(3)adb shell
Android是基于Linux内核开发的。Linux系统的字符交互界面是shell。所以Android也可以使用shell命令。
我们通过adb shell就可以进入Android的设备底层系统。命令
C:\Users\duzil>adb shell
root@x86_64:/ # pwd
/
root@x86_64:/
可以看到,我们输入adb shell后,进入了Linux窗口命令行,#代表root权限。然后我们执行了一条Linux命令pwd,用来打印当前所在目录,回显是个“/”,代表根目录。
如果你的PC同时连接了多台设备,你想进入特定设备的shell,请使用下面的命令:
adb -s 127.0.0.1:7555 shell
使用-s参数,加上IP+端口,就可以进入指定设备。
如果想退出shell,可以使用exit命令,如下所示:
root@x86_64:/ # exitC:\Users\duzil>a
(4)adb install xxx.apk
我们可以使用adb install安装Android应用(apk文件)
APK(全称:Android application package,Android应用程序包)是Android操作系统使用的一种应用程序包文件格式,用于分发和安装移动应用及中间件。一个Android应用程序的代码想要在Android设备上运行,必须先进行编译,然后被打包成为一个被Android系统所能识别的文件才可以被运行,而这种能被Android系统识别并运行的文件格式便是“APK”。 一个APK文件内包含被编译的代码文件(.dex 文件),文件资源(resources), 原生资源文件(assets),证书(certificates),和清单文件(manifest file)
这里我准备了一个应用宝的apk,放到了C盘AAA目录下面,接下来,使用命令安装一下:
c:\AAA>adb install yingyongbao.apk
Performing Push Install
yingyongbao.apk: 1 file pushed, 0 ski... 0.4 MB/s (11333794 bytes in 30.532s)pkg: /data/local/tmp/yingyongbao.apk
Successc:\AAA>
安装成功后,就可以在mumu模拟器看到该应用。
注意:如果想覆盖安装的话,需要增加-r参数,请参考:
c:\AAA>adb install -r yingyongbao.apk
Performing Push Install
yingyongbao.apk: 1 file pushed, 0 ski... 0.5 MB/s (11333794 bytes in 23.512s)pkg: /data/local/tmp/yingyongbao.apk
Successc:\AAA>
否则就会报错,提示应用已安装,如下:
c:\AAA>adb install c:\AAA\yingyongbao.apk
Performing Push Install
c:\AAA\yingyongbao.apk: 1 file pushed... 0.9 MB/s (11333794 bytes in 11.701s)pkg: /data/local/tmp/yingyongbao.apk
Failure [INSTALL_FAILED_ALREADY_EXISTS]c:\AAA>
(5)adb uninstall
学习完安装应用,再来看下卸载应用。安装应用的时候直接使用apk的名称就可以了。但是卸载有所不同,需要使用“包名”。
那如何查看包名呢?
方法一:
c:\AAA>adb shell
root@x86_64:/ # cd /data/app
app-asec/ app-lib/ app-private/ app/
root@x86_64:/ # cd /data/app/
root@x86_64:/data/app # ls
com.ddnapalon.calculator.gp-1
com.mumu.acc-1
com.mumu.launcher-1
com.mumu.store-1
com.tencent.android.qqdownloader-2
io.appium.settings-1
io.appium.uiautomator2.server-1
io.appium.uiautomator2.server.test-1
root@x86_64:/data/app # cd /data/local/tmp/
root@x86_64:/data/local/tmp # ls
appium_cache
root@x86_64:
- 先使用adb shell命令进入shell
- 在通过cd命令切换到“/data/app/”目录下;固定目录
- 然后通过“ls”命令查看当前目录有哪些报名;
从文件名可以看到“com.tencent.android.qqdownloader-2”就是包名。
接下来,我们使用exit命令退出shell。然后再使用adb uninstall卸载包
这里需要提醒的是,卸载的时候需要去掉每个报名末尾的“-2”,这些-数字是Android给加的标识符,具体意义不用关心。
c:\AAA>adb uninstall com.tencent.android.qqdownloader
Successc:\AAA>
再去看看mumu模拟器,是不是已经卸载成功了。
(6)adb push
将本地文件推送到设备(模拟器)。
adb push 本地文件地址 远端目录
示例:
C:\Users\duzil>adb push c:\AAA\yingyongbao.apk /sdcard
c:\AAA\yingyongbao.apk: 1 file.../s (11333794 bytes in 22.985s)C:\Users\duzil>
然后,可以进入到bash,进入到sdcard目录查看
C:\Users\duzil>adb shell
root@x86_64:/ # cd sdcard/
root@x86_64:/sdcard # ls
……此处省略部分内容……
yingyongbao.apk
root@x86_64:/sdcard #
(7)adb pull
将远端(模拟器)文件拉取到本地。
首先,我再sdcard目录,通过touch命令创建一个文本文件“a.txt”。(空文件,下载速度快,方便演示),命令如下:
root@x86_64:/sdcard # touch a.txt
root@x86_64:/sdcard # ls
……此处省略……
a.txt
然后使用pull命令,将该文件拉取到本地
C:\Users\duzil>adb pull /sdcard/a.txt c:\AAA\
/sdcard/a.txt: 1 file pulled, 0 skipped.C:\Users\duzil>
(8)adb shell pm list packages
查看设备所有包名,用法示例:
C:\Users\duzil>adb shell pm list packages
package:com.android.providers.telephony
此处有省略……
package:com.tencent.android.qqdownloader
此处有省略……C:\Users\duzil>adb shell pm list packages
用该方法同样可查看到包名。
另外,我们还可以加“-3”参数,只获取第三方应用。(非系统本身应用),演示如下:
C:\Users\duzil>adb shell pm list packages -3
package:io.appium.settings
package:com.ddnapalon.calculator.gp
package:io.appium.uiautomator2.server
package:com.tencent.android.qqdownloader
package:io.appium.uiautomator2.server.testC:\Users\duzil>
(9)adb shell dumpsys window|findstr mCurrentFocus
查看包名和activity。包名我们前面讲过,不再多说,什么是activity呢?你可以简单理解为处于当前活跃状态的APP(没有切换到后台)。
演示示例:
C:\Users\duzil>adb shell dumpsys window|findstr mCurrentFocusmCurrentFocus=Window{9e45e96 u0 com.tencent.android.qqdownloader/com.tencent.assistantv2.activity.MainActivity}
上面结果中
- “com.tencent.android.qqdownloader”,这部分是包名。
- “com.tencent.assistantv2.activity.MainActivity”,这部分是activity的值
(10)adb kill-server 或 adb start-server
启动、关闭adb服务
C:\Users\duzil>adb start-serverC:\Users\duzil>adb kill-serverC:\Users\duzil>adb start-server
* daemon not running; starting now at tcp:5037
* daemon started successfullyC:\Users\duzil>
4、知识点补充
查看端口,结束端口的占用进程。
比如7555端口被占用了。再尝试用7555去启动应用必然报错,你可以通过如下命令查看那个程序占用了7555端口。
C:\Users\duzil>netstat -ano|findstr 7555TCP 127.0.0.1:5097 127.0.0.1:7555 ESTABLISHED 29716TCP 127.0.0.1:7555 0.0.0.0:0 LISTENING 19348TCP 127.0.0.1:7555 127.0.0.1:5097 ESTABLISHED 19348
第一行中,第三列,7555端口被占用,本行最后一列,29716位PID,进程id(process ID)
然后使用下面的命令结束进程
C:\Users\duzil>taskkill -f -pid 29716
成功: 已终止 PID 为 29716 的进程。C:\Users\duzil>
好,本节课先到这里。谢谢观看。
2-appium之adb介绍相关推荐
- appium之adb常用命令
appium之adb常用命令 一.真机远程调试步骤: (非数据线操作要求需要手机和pc端在同一个路由器下) 1.将手机连接到pc端 2.adb devices 检测设备 3.adb tcpip 55 ...
- Appium、adb控制Android手机和实战项目
Appium.adb控制Android手机和实战项目 adb常用命令 Appium中API 元素定位操作API 滑动和拖拽事件(appium<2.0版本) 高级手势TouchAction 手机操 ...
- adb介绍、下载安装、使用
adb下载安装及使用 adb介绍: Android Debug Bridge(安卓调试桥) tools.它就是一个命令行窗口,用于通过电脑端与模拟器或者是设备之间的交互. ADB是一个C/S架构的应用 ...
- 自动化工具之Appium工具简单介绍
背景 自动化,性能测试,接口测试,开发平台等工作,到底测试的价值在哪里,其实价值来源不断充实与为大众服务,今天简单介绍ui小工具appium攻击. 简单介绍 Appium 是一个自动化测试开源工具,支 ...
- appium: adb server is out of date.killing
开始学习appium+python,环境搭建通了,但是连接虚拟设备报错adb server is out of date.killing... 通过度娘,找到如下文章,解决. 前提: 1,搭建好环境 ...
- Appium python adb命令
获取当前界面 adb shell dumpsys activity activities | findstr mFocusedActivity Android 7.0 现象: Android 8.0 ...
- android的adb介绍,Android开发基础不牢
ok 后,模拟器有如下反应: (3) sms测试 sms send 13522543026 hello ok 则, 在模拟器的messaging中,就会看到有一条短信了. 如图: 13 d ...
- Appium基础 — adb shell 命令
使用adb命令的前提是保证手机或者模拟器和电脑是连接状态. 使用adb connect 127.0.0.1:+端口号命令,进行链接. 1.启动和关闭adb服务 在某些情况下,可能需要终止然后再启动服务 ...
- 如何获得Android设备名称(ADB命令详细介绍)
豌豆荚.360手机管家等软件可以获取android设备名称,显示在界面上,如下图: 我们自己如何来获取设备名称呢?答案如下: 在命令行中输入"adb shell" 进入shell之 ...
最新文章
- 疑惑即新知——记一次reverse模板实现过程
- 复习笔记(一)——C++基础
- english writing sample for professional
- 12行代码AC-Leecode 598. 范围求和 II——Leecode每日一题系列
- [luoguP2331] [SCOI2005]最大子矩阵(DP)
- 企业资源计划软件 业务知识点汇编整理
- php activerecord,Yii2 优雅的 Active Record
- 相机模型与标定(六)--单应性求解
- C语言:求圆的面积和周长
- 团队文化中的害群之马
- 一如此前的回应,王劲将景驰科技总部搬到了广州
- odoo 14 手册 客户 报价单 销售订单
- 计算机硬盘如何安装系统,电脑主机硬盘如何安装系统 一键硬盘安装win7系统
- 西南科技大计算机实验室,西南科技大学|关于公布西南科技大学本科教学实验室建制的通知|...
- sketchb必备快捷键大全,sketch如何自定义快捷键
- 基于PHP的餐饮公司展示网站及点餐系统设计与实现
- NOIP 2015 D1 T2 信息传递
- python二级准备一个月能行吗_计算机二级选哪个?一个多月的准备时间够吗?
- Ubuntu16.04+win10+Fabric
- 数据科学系列:plotly可视化入门介绍
热门文章
- 小程序 unicode_程序员工具集锦
- 一个700万人口的国家系统遭黑客入侵,超500万人身份信息泄露...
- MACD金叉死叉能不能提前预警?2020上半年MACD金叉死叉的效果如何?
- win下禁用光标闪烁 记录
- 【CV】收藏!YOLOv4全文解读与翻译总结!(附思维导图和论文译文)
- 用计算机名添加网络打印机,当IP地址经常变动时,使用计算机名连接共享打印机-自动交易...
- 【计算机组成原理】门阵列译码器
- 【学习笔记】DeepCrossing
- 浅析国有企业外部董事如何履职
- 2015 电子科大校园招聘名单(更新中)