ADB
:Android Debug Bridge
,安卓调试桥,是用的最多的一种命令行工具,它能够在电脑端和安卓支持的设备端进行通信,其通信方式有两种:USB
或者TCP/IP
。
它能够支持多种设备端的操作,包括:网络,脚本,安装和调试应用,文件传输等,同时也支持访问unix shell
。
adb
命令行工具,随着安卓SDK
平台工具一起发布,是安卓SDK
的一个组件。
它是一个C/S(client-server)
架构的应用程序,由三部分组成:
adb client
:运行在PC
上,你能够运行adb
命令来执行它。adb daemon
:守护进程,运行在设备端的后台adb server
:服务进程,运行在PC
,管理adb client
和adb daemon
之间的通信
server
与client
通信的端口是5037
,adb server
与emulator
交互时使用的端口有两个:
5554
:专门用于与Emulator
实例的连接5555
:专门用于与daemon
连接
linux
,则sudo apt install adb
下文以linux
系统为例,安装完毕后,可以查看版本信息:
[donge@ubuntu ~/]$ adb version
Android Debug Bridge version 1.0.39
Version 1:8.1.0+r23-5~18.04
Installed as /usr/lib/android-sdk/platform-tools/adb
如上图所示,需要在客户端安装adbd
的守护进程,来与PC
端的adb server
通信。
adbd
的软件包获取:
buildroot
构建工具:通过选择android tools->adbd
来直接编译得到BR2_PACKAGE_ANDROID_TOOLS_ADBD=y
adbd
软件包(放到软件仓库了)编译完成之后,直接将该工具放到系统开发板上,保持后台运行即可。
adbd
支持两种通信方式,一种是USB
,一种是TCP
,所以我们内核必须支持所需的通信协议。
不同的开发板,厂商驱动代码不同,配置多多少少也会有差异,以下仅作参考:
USB
配置如下:
# 必选
CONFIG_USB_GADGET=y# 作为USB从机,也就是设备端
CONFIG_USB_XXX_UDC=y# USB控制器驱动,根据厂商选择
CONFIG_USB_CONFIGFS=y# USB配置文件系统,通过文件来配置功能
CONFIG_USB_CONFIGFS_F_FS=y# USB功能文件系统,启用USB 功能文件系统支持
# 可选的一些功能
CONFIG_USB_CONFIGFS_ACM=y# 一种USB设备模式,用于模拟串口设备的通信。
CONFIG_USB_CONFIGFS_MASS_STORAGE=y# USB大容量存储功能
内核配置打开后,一定不要忘了在dts
设备树中打开USB
配置。
我们想要使用adb
,首先需要在开发板上启动adbd
后台进程,adbd
与主机端的adb
通信是通过USB
或者Tcp/Ip
的,所以就需要提前配置。
USB
通常是通过configfs
来配置USB
各种功能的,以下为一个示例:
#!/bin/sh
case "$1"in
start)
test -d /sys/kernel/config || mkdir /sys/kernel/config
mount -t configfs none /sys/kernel/config
mkdir /sys/kernel/config/usb_gadget/g1
cd /sys/kernel/config/usb_gadget/g1
echo 0x2207 > idVendor
echo 0x0006 > idProduct
mkdir strings/0x409
echo 0123456789ABCDEF > strings/0x409/serialnumber
echo"rockchip" > strings/0x409/manufacturer
echo"rk30xx" > strings/0x409/product
mkdir configs/b.1
mkdir configs/b.1/strings/0x409
echo"adb" > configs/b.1/strings/0x409/configuration
#echo "Conf 1" > configs/b.1/strings/0x409/configuration
#echo 120 > configs/b.1/MaxPower
cur_path=`pwd`
mkdir-p$cur_path'/functions/ffs.adb'
ln-s /sys/kernel/config/usb_gadget/g1/functions/ffs.adb /sys/kernel/config/usb_gadget/g1/configs/b.1/ffs.adb
mkdir-p /dev/usb-ffs/adb
mount -ouid=2000,gid=2000-t functionfs adb /dev/usb-ffs/adb
cd /
adbd &
UDC=`ls /sys/class/udc/| awk '{print $1}'`
sleep1 && echo$UDC > /sys/kernel/config/usb_gadget/g1/UDC &
;;
stop)
echo none > /sys/kernel/config/usb_gadget/g1/UDC
;;
restart|reload|force-reload)
echo"Error: argument '$1' not supported" >&2
exit3
;;
*)
echo"Usage: adbd start|stop" >&2
exit3
;;
esac
上面是一个示例,如果调起来比较困难,也可以在资料库中直接获取最简单的adb
配置。
更多干货可见:高级工程师聚集地,助力大家更上一层楼!
后台USB
配置成功后,可以直接启动adbd
服务。
# adbd &
# 下面是打印信息
install_listener('tcp:5037','*smartsocket*')
[ 215.019821] read descriptors
cannot bind 'tcp:5037'
warnning! use usb only
[ 215.026174] read strings
adbd may crash
Using USB
表示不能够绑定到tcp
,指定用usb
这种方式,需要你的设备端连接到网络,通常使用WiFi
来连接,连接成功后查看服务器和设备端的IP
地址,如下:
# ifconfig
wlan0 Link encap:Ethernet HWaddr 9C:84:B6:62:9F:54
inet addr:192.168.50.136 Bcast:192.168.50.255 Mask:255.255.255.0
inet6 addr: fe80::9e84:b6ff:fe62:9f54/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3247 errors:0 dropped:286 overruns:0 frame:0
TX packets:320 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:409353 (399.7 KiB) TX bytes:31375 (30.6 KiB)
ping
设备端的IP
地址,ping
通即可保证链路正常。dong@ubuntu:~$ ping192.168.50.136
PING 192.168.50.136 (192.168.50.136) 56(84) bytes of data.
64 bytes from 192.168.50.136: icmp_seq=1ttl=128time=18.5 ms
64 bytes from 192.168.50.136: icmp_seq=2ttl=128time=8.04 ms
# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:5555 0.0.0.0:* LISTEN
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 3 [ ] DGRAM 50 /dev/log
unix 2 [ ] DGRAM 17723 /var/run/wpa_supplicant/wlan0
unix 2 [ ACC ] SEQPACKET LISTENING 11722 /run/udev/control
unix 2 [ ACC ] STREAM LISTENING 11023 @jdwp-control
unix 3 [ ] STREAM CONNECTED 11020
unix 3 [ ] DGRAM 10422
unix 3 [ ] DGRAM 10421
unix 3 [ ] STREAM CONNECTED 11024
unix 3 [ ] STREAM CONNECTED 11025
unix 3 [ ] STREAM CONNECTED 11021
unix 3 [ ] STREAM CONNECTED 838
unix 2 [ ] DGRAM 53
unix 3 [ ] STREAM CONNECTED 837
dong@ubuntu:~$ adb connect 192.168.50.136:5555
connected to 192.168.50.136:5555
adb
设备dong@ubuntu:~$ adb devices
List of devices attached
192.168.50.136:5555 device
到此即为连接成功。
命令 | 说明 |
---|---|
adb device | 查看连接设备 |
adb push [local] [remote] | 向设备端中推送文件 |
adb pull [remote] [local] | 从设备端拉取文件 |
adb install < apk name > | 安装应用 |
adb uninstall < pak name > | 卸载应用 |
adb shell pm list packages | 列出手机装的所有 app 的包名 |
adb shell pm list packages -3 | 列出除了系统应用的第三方应用包名 |
adb shell pm clear < pak name > | 清除应用数据与缓存 |
adb shell pm disable-user < pak name > | 禁用应用 |
adb shell pm enable < pak name > | 启用应用 |
local_file_path
为本地文件路径,/device/path
为设备上的目标路径。/device/path
为设备上的文件路径,local_file_path
为本地目标路径。app.apk
为你要安装的应用的 APK 文件。package_name
为应用的包名。device
、offline
等。这只是一小部分 ADB 命令,还有更多功能和选项可供使用。你可以通过运行 adb
命令来查看所有可用的选项和子命令。例如:
adb --help
请注意,有些命令可能需要设备处于开发者模式下,并启用 USB 调试。
如果不是android
设备,一般我们最常用的就是前3条指令了~
更多文章,可关·注·公·号:【嵌入式艺术】,同时也为大家准备了学习福利,可免费领取。
以上,这篇文章主要介绍了ADB
工具的架构以及如何部署,如何使用,希望对大家有所帮助。
作者: _嵌入式艺术_, 来源:面包板社区
链接: https://mbb.eet-china.com/blog/uid-me-4040659.html
版权声明:本文为博主原创,未经本人允许,禁止转载!
文章评论(0条评论)
登录后参与讨论