adb的学习日记

Android调试桥 (adb) 

Android调试桥 (adb) 是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试应用,并提供对 Unix shell(可用来在模拟器或连接的设备上运行各种命令)的访问。该工具作为一个客户端-服务器程序,包括三个组件:

客户端,该组件发送命令。客户端在开发计算机上运行。您可以通过发出adb 命令从命令行终端调用客户端。

后台程序 A daemon (adbd),该组件在设备上运行命令。后台程序在每个模拟器或设备实例上作为后台进程运行。

服务器,该组件管理客户端和后台程序之间的通信。服务器在开发计算机上作为后台进程运行。

放个自己理解画的图


adb有什么用

借助adb工具我们可以管理设备或手机模拟器的状态。还可以进行很多手机操作,如安装软件、系统升级、运行shell命令等等。其实简而言说,adb就是连接Android手机与PC端的桥梁,可以让用户在电脑上对手机进行全面的操作。

1)、快速更新设备或手机模拟器中的代码,如应用或Android 系统升级; 

2)、在设备上运行shell命令; 

3)、管理设备或手机模拟器上的预定端口; 

4)、在设备或手机模拟器上复制或粘贴文件;

 

当然有好玩的用处

从别的文章中看到的。。。

有了这个工具,就可以在手机上做很多比较好玩的事情。比如前段时间比较火的微信小程序游戏“跳一跳”,利用adb进行截屏,opencv进行图像处理,自动“跳一跳”得高分。又比如一些自动点赞、刷票、打卡等小工具。

 

一些基础的adb命令 

查看到连接的手机设备信息

  adb devices

安装apk

mac 系统

首先 将文件拖入终端就可得地址

然后  adb install test.apk -r 覆盖安装,保留数据和缓存文件  -d 解决低版本version问题  -s 安装apk到sd卡 就完成了。

启动Activity:

     adb shell am start -n 包名/包名+类名(-n 类名,-a action,-d date,-m MIME-TYPE,-ccategory,-e 扩展数据,等)。

启动应用:

adb shell am start -n <package_name>/.<activity_class_name> 

例如:adb shell am start -n yf.o2o.store/yf.o2o.store.activity.LoginActivity

 

让原本数据线连接的设备 变为无线:

保证手机和电脑处在同一个无线网络内

在USB连接的基础上,执行命令【adb tcpip 5555】

断开USB连接,执行命令【adb connect 设备ip地址:5555】

此时执行命令【adb devices】即可查看到连接的手机设备信息

就像git一样的 push 和pull命令 

从本地复制文件到设备:

adb push  

从设备复制文件到本地:

adb pull 

运行adb 命令获取屏幕分辨率等信息:


 



模拟用户事件

文本输入:adb shell input text

例:手机端输出demo字符串,相应指令:adb shell input "demo".

键盘事件:input keyevent ,其中KEYCODE见本文结尾的附表

例:点击返回键,相应指令: input keyevent 4.

点击事件:input tap

例: 点击坐标(500,500),相应指令: input tap 500 500.

滑动事件:input swipe

例: 从坐标(300,500)滑动到(100,500),相应指令: input swipe 300 500 100 500.

例: 200ms时间从坐标(300,500)滑动到(100,500),相应指令: input swipe 300 500 100 500 200.


与应用交互

与应用交互主要是使用am <command>命令,常用的<command>如下:

command用途

start [options] <intent>启动<intent>指定的 Activity

startservice [options] <intent>启动<intent>指定的 Service

broadcast [options] <intent>发送<intent>指定的广播

force-stop <package-name>停止<package-name>相关的进程

Activity

adb shell am start -a android.settings.SETTINGS # 打开系统设置页面adb shell am start -a android.intent.action.DIAL -d tel:10086 # 打开拨号页面adb shell am start -n com.android.mms/.ui.ConversationList # 打开短信会话列表

Service

adb shell am startservice [options] 

一个典型的用例是如果设备上原本应该显示虚拟按键但是没有显示,可以试试这个:

adb shell am startservice -n com.android.systemui/.SystemUIService

broadcast

向所有组件广播 BOOT_COMPLETED:
adb shell am broadcast [options] <INTENT>

只向 com.android.receiver.test/.BootCompletedReceiver 广播 BOOT_COMPLETED:

adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -n com.android.receiver.test/.BootCompletedReceiver

Android 日志

查看 Android 设备系统属性的基本命令格式是:

adb logcat [option] [filter-specs]复制代码

如果需要停止logcat日志打印,可以按Ctrl + C停止日志监控。

按级别过滤日志

按级别过滤日志的基本命令格式是:

adb logcat [filter-specs]复制代码

Android 的日志分为如下几个优先级(priority):

级别含义

*:V过滤只显示 Verbose 及以上级别(优先级最低)

*:D过滤只显示 Debug 及以上级别

*:I过滤只显示 Info 及以上级别

*:W过滤只显示 Warning 及以上级别

*:E过滤只显示 Error 及以上级别

*:F过滤只显示 Fatal 及以上级别

*:S过滤只显示 Silent 及以上级别(优先级最高,什么也不输出)

按某级别过滤日志则会将该级别及以上的日志输出。

比如,命令:

adb logcat *:W复制代码

会将 Warning、Error、Fatal 和 Silent 日志输出。

注:在 macOS 下需要给*:W这样以*作为 tag 的参数加双引号,如adb logcat "*:W",不然会报错no matches found: *:W。)

 按 tag 和级别过滤日志

按 tag 和级别过滤日志的基本命令格式是:

adb logcat [tag:level] [tag:level] ...复制代码

比如,命令:

adb logcat ActivityManager:I MyApp:D *:S复制代码

表示输出 tagActivityManager的 Info 以上级别日志,输出 tagMyApp的 Debug 以上级别日志,及其它 tag 的 Silent 级别日志(即屏蔽其它 tag 日志)。

 


关于adbd

觉得adbd是个有趣的东西

就探索了一下 

  注:JDWP 是 Java Debug Wire Protocol 的缩写,它定义了调试器(debugger)和被调试的 Java 虚拟机(target vm)之间的通信协议。它仅仅定义了数据传输的格式 ,Java 调试体系。

由于本人技术有限,详情在jdwp主讲页

关于这个方面,希望自己日后可以补充。

参考资料

jdwp主讲页

https://juejin.im/post/5b5683bcf265da0f9b4dea96

https://developer.android.com/studio/command-line/adb

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值