文档更新说明
免责声明
本文档虽力求准确,但可能存在错误或遗漏,用户需谨慎评估适用性;我们保留随时修订的权利,且不保证旧版本内容的有效性,为了得到最新版本的产品信息,请定时访问立创开发板官网进行资料的更新下载。本文档版权及最终解释权归深圳嘉立创科技集团股份有限公司所有。请务必注意以上声明,自行评估风险并决策,我们对使用本文档产生的任何问题概不负责。感谢您的包容与支持。
前言
adb是我们使用到非常高频工具,本文档主要帮助大家快速掌握ADB的安装与使用,并且在泰山派中进行调试试验。
准备工作
- 需要一台win10电脑,其他系统理论上也可以但是我没测试,我这里以我电脑为例,后续所有的环境以及开发编译如果不做特殊说明默认都是基于此配置电脑进行
- 泰山派需烧录对于的Android系统固件
- ADB固件包
简介
ADB,全称为Android Debug Bridge,是由Google开发的一种命令行工具,用于与Android设备进行通信和调试。作为Android软件开发工具包(SDK)的一部分,ADB提供了一系列功能和命令,方便开发者进行与Android设备交互和调试的操作。
ADB的主要功能和用途如下:
- 设备连接与管理:ADB允许开发者通过USB或网络连接Android设备,并对设备进行管理。可以列出已连接的设备、安装或卸载应用程序、复制文件到设备等操作。
- 应用程序调试:ADB允许开发者在已连接的Android设备上进行应用程序调试。可以启动和停止应用程序、查看应用程序日志、监视CPU和内存使用情况等。
- 文件传输:ADB可以通过命令行在计算机和Android设备之间传输文件。这对于安装应用程序、传输媒体文件或备份数据非常有用。
- Shell访问:ADB提供了一个可以执行设备上的shell命令的接口,方便开发者进行设备调试、日志记录、系统状态查询等操作。
- 截图和屏幕录制:ADB可以进行屏幕截图和录制,以便开发者捕获设备屏幕上的图像和动画,并进行分析和调试。
- 端口转发:ADB支持将设备的端口转发到计算机的端口,方便开发者通过计算机与设备上运行的服务进行通信和调试。
- 设备控制:ADB提供了一些命令来进行基本的设备操作,如重启设备、关机、进入恢复模式等。
需要注意的,是虽然adb是为android开发的但是因为他很好用很流行所以在其他平台我们也是可以看到他的身影比如后面我们用到的buildroot、debian、ubuntu等。
安装
ADB下载
📌 在 下载中心
->百度网盘
->第07章.【立创·泰山派】开发工具
->platform-tools_r33.0.3-windows.zip压缩包
中。
这个是Windows环境下运行的
下载安装包并解压,我这里直接下载并解压到D:盘,这里可以根据个人情况制定位置但是后面添加环境变量时也需要指定对应路径
此时我们直接在当前目录打开命令行窗口是可以直接使用adb的,打开方法在文件目录栏直接输入cmd并回车
在命令行窗口运行adb.exe help命令能够出现版本信息等表示adb正常。
上面我们adb.exe同目录下运行成功,但是我们实际使用的时候是想在任意位置打开cmd即可使用adb,所以我们需要把adb添加到windows的环境变量中,这里就以win10为例,其他大同小异。
鼠标右键点击win10图片,选择系统。
点击高级系统设置
点击环境变量
选择系统变量中的Path,然后点击点击编辑
点击新建,接着把刚刚下载的adb.exe所在路径填入
点击确定保存,接着打开一个新的cmd窗口,记得一定要新打开,之前打开不会同步环境变量。
运行adb help看到以下日志就证明你成功啦~~~~
使用
连接泰山派开发板
下面实验很多命令都是需要与泰山派进行交互,所以我们这里需要通过typec数据线把泰山派连接上。
- 泰派数据线连接电脑,注意:如果供电不足需要用电源诱骗小板补电,typec要有数据功能不单是充电线
- android系统中打开USB调试,我们提供的固件默认是已经打开了的,手动打开方法:
进入android系统界面
-->Settings
-->About tablet
-->连续多少点击Build number打开开发者模式
-->退回上级进入Sysem
-->Advanced
-->打开USB debugging选型
打开设备管理器中能够正确找到Android ADB Interfaces
设备。
ADB命令学习方法
最好的学习方式就是阅读原文当,后面我会挑选一些adb高频的常用方法与大家分析,详细的还请参考谷歌官方手册:
如何快速掌握ADB用法
一般我们使用命令行工具如:adb,makefile,git,python,Docker等,都会提供一个help命令来帮我们快速的了解它们的用法和参数选项。这些信息对于初学者来说尤其有用,可以作为入门指南和快速参考。建议新朋友养成工具不会用先help一下的习惯。以下是help的所有信息,这里我挑几个重要参数进行举例说明。
C:\Users\win>adb help
Android Debug Bridge version 1.0.41
Version 34.0.1-9680074
Installed as D:\platform-tools\adb.exe
global 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]
--one-device SERIAL|USB only allowed with 'start-server' or 'server nodaemon', server will only connect to one USB device, specified by a serial number or USB device address.
--exit-on-write-error exit if stdout is closed
general commands:
devices [-l] list connected devices (-l for long output)help show this help message
version show version num
networking:
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 all
pair HOST[:PORT] [PAIRING CODE]
pair with a device for secure TCP/IP communication
forward --list list all forward socket connections
forward [--no-rebind] LOCAL REMOTE
forward socket connection using:
tcp:<port> (<localmay be "tcp:0" to pick any open port)
localabstract:<unix domain socket name>
localreserved:<unix domain socket name>
localfilesystem:<unix domain socket name>
dev:<character device name>
jdwp:<process pid> (remote only)
vsock:<CID>:<port> (remote only)
acceptfd:<fd> (listen only)
forward --remove LOCAL remove specific forward socket connection
forward --remove-all remove all forward socket connections
reverse --list list all reverse socket connections from device
reverse [--no-rebind] REMOTE LOCAL
reverse socket connection using:
tcp:<port> (<remote> may be "tcp:0" to pick any open port)
localabstract:<unix domain socket name>
localreserved:<unix domain socket name>
localfilesystem:<unix domain socket name>
reverse --remove REMOTE remove specific reverse socket connection
reverse --remove-all remove all reverse socket connections from device
mdns check check if mdns discovery is available
mdns services list all discovered services
file transfer:
push [--sync] [-z ALGORITHM] [-Z] LOCAL... REMOTE
copy local files/directories to device
--sync: only push files that are newer on the host than the device
-n: dry run: push files to device without storing to the filesystem
-z: enable compression with a specified algorithm (any/none/brotli/lz4/zstd)
-Z: disable compression
pull [-a] [-z ALGORITHM] [-Z] REMOTE... LOCAL
copy files/dirs from device
-a: preserve file timestamp and mode
-z: enable compression with a specified algorithm (any/none/brotli/lz4/zstd)
-Z: disable compressionsync [-l] [-z ALGORITHM] [-Z] [all|data|odm|oem|product|system|system_ext|vendor]sync a local build from $ANDROID_PRODUCT_OUT to the device (default all)
-n: dry run: push files to device without storing to the filesystem
-l: list files that would be copied, but don't copy them
-z: enable compression with a specified algorithm (any/none/brotli/lz4/zstd)
-Z: disable compression
shell:
shell [-e ESCAPE] [-n] [-Tt] [-x] [COMMAND...]
run remote shell command (interactive shell if no command given)
-e: choose escape character, or "none"; default '~'
-n: don't read from stdin
-T: disable pty allocation
-t: allocate a pty if on a tty (-tt: force pty allocation)
-x: disable remote exit codes and stdout/stderr separation
emu COMMAND run emulator console command
app installation (see also `adb shell cmd package help`):
install [-lrtsdg] [--instant] PACKAGE
push a single package to the device and install it
install-multiple [-lrtsdpg] [--instant] PACKAGE...
push multiple APKs to the device for a single package and install them
install-multi-package [-lrtsdpg] [--instant] PACKAGE...
push one or more packages to the device and install them atomically
-r: replace existing application
-t: allow test packages
-d: allow version code downgrade (debuggable packages only)
-p: partial application install (install-multiple only)
-g: grant all runtime permissions
--abi ABI: override platform's default ABI
--instant: cause the app to be installed as an ephemeral install app
--no-streaming: always push APK to device and invoke Package Manager as separate steps
--streaming: force streaming APK directly into Package Manager
--fastdeploy: use fast deploy
--no-fastdeploy: prevent use of fast deploy
--force-agent: force update of deployment agent when using fast deploy
--date-check-agent: update deployment agent when local version is newer and using fast deploy
--version-check-agent: update deployment agent when local version has different version code and using fast deploy
(See also
adb shell pm help
for more options.)
uninstall [-k] PACKAGE
remove this app package from the device
'-k': keep the data and cache directories
debugging:
bugreport [PATH]
write bugreport to given PATH [default=bugreport.zip];
if PATH is a directory, the bug report is saved in that directory.
devices that don't support zipped bug reports output to stdout.
jdwp list pids of processes hosting a JDWP transport
logcat show device log (logcat --help for more)
security:
disable-verity disable dm-verity checking on userdebug builds
enable-verity re-enable dm-verity checking on userdebug builds
keygen FILE
generate adb public/private key; private key stored in FILE,
scripting:
wait-for[-TRANSPORT]-STATE...wait for device to be in a given state
STATE: device, recovery, rescue, sideload, bootloader, or disconnect
TRANSPORT: usb, local, or any [default=any]
get-state print offline | bootloader | device
get-serialno print <serial-number>
get-devpath print <device-path>
remount [-R]
remount partitions read-write. if a reboot is required, -R will
will automatically reboot the device.
reboot [bootloader|recovery|sideload|sideload-auto-reboot]
reboot the device; defaults to booting system image but
supports bootloader and recovery too. sideload reboots
into recovery and automatically starts sideload mode,
sideload-auto-reboot is the same but reboots after sideloading.
sideload OTAPACKAGE sideload the given full OTA package
root restart adbd with root permissions
unroot restart adbd without root permissions
usb restart adbd listening on USB
tcpip PORT restart adbd listening on TCP on PORT
internal debugging:
start-server ensure that there is a server running
kill-server kill the server if it is running
reconnect kick connection from host side to force reconnect
reconnect device kick connection from device side to force reconnect
reconnect offline reset offline/unauthorized devices to force reconnect
usb:
attach attach a detached USB device
detach detach from a USB device to allow use by other processes
environment variables:$ADB_TRACE
comma-separated list of debug info to log:
all,adb,sockets,packets,rwx,usb,sync,sysdeps,transport,jdwp$ADB_VENDOR_KEYS colon-separated list of keys (files or directories)$ANDROID_SERIAL serial number to connect to (see -s)$ANDROID_LOG_TAGS tags to be used by logcat (see logcat --help)$ADB_LOCAL_TRANSPORT_MAX_PORT max emulator scan port (default 5585, 16 emus)$ADB_MDNS_AUTO_CONNECT comma-separated list of mdns services to allow auto-connect (default adb-tls-connect)
Online documentation: https://android.googlesource.com/platform/packages/modules/adb/+/refs/heads/master/docs/user/adb.1.md
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
列出已连接的设备列表
adb devices
此命令是列出所有连接设备,这命令平时少用,一般在同时连接了多个开发板才会用到这个命令。例如我这里连接了两台泰山派开发板
案例:打开命令行窗口运行以下命令C:\Users\win>adb devices
List of devices attached
4d70015485fe537b device
4d70015485fe537b device
2
3
4
这里只是告诉大家有这个功能,后面都是基于一台设备情况下的操作。
启动设备的命令行
- 进入命令
adb shell
- 命令说明: 连接到设备的 shell,你可以在命令行中直接输入命令,并且设备会执行这些命令。例如,你可以运行常见的 Linux 命令、执行设备特定命令,或使用各种adb工具提供的功能。
#进入设备
adb shell
#使用root权限
su
#在泰山中使用ls命令ls#在泰山派中使用pwd查看路径pwd#查看泰山派kernel日志-----非常重要-------
dmesg
#查看系统层日志-----非常重要-------
logcat
2
3
4
5
6
7
8
- 演示案例:
exit
安装应用程序
adb install
打开cmd窗口运行以下安装命令其中C:\Users\win\Downloads\chrome.apk是安装包位置这里代替成自己的安装包目录即可
C:\Users\win>adb install C:\Users\win\Downloads\chrome.apk
Performing Streamed Install
Success
2
3
提示安装成功并且我可以在android系统中看到Chrome图标
同时我们也可以通过命令来查看是否安装成功,其中"adb shell pm list packages"命令使列出所有包并且通过grep 过滤出包含"chrome"关键字的包,如果想查看全部可以不加 "| grep chrome"C:\Users\win>adb shell pm list packages | grep chrome
package:com.android.chrome
2
卸载应用程序
有安装肯定有卸载卸载命令是:
adb uninstall
先试用命令列出所有包,然后找到自己要卸载的应用
C:\Users\win>adb shell pm list packages
package:com.android.cts.priv.ctsshim
package:com.android.keychain
package:com.android.chrome
以下省略N行
2
3
4
5
假如我们这里需要卸载chrome,对应上面第四行
C:\Users\win>adb uninstall com.android.chrome
Success
2
3
将文件从电脑复制到设备
这个功能非常实用的在调试设备的时候需要经常传东西,掌握这个命令的使用以后就不要再拿U盘考来考去啦。
adb push
在使用"adb push"命令将文件推送到 Android 设备之前,有时需要先执行 remount 操作,以便将设备的文件系统以可写模式挂载。默认情况下,Android 设备的文件系统通常以只读模式挂载,这是为了保护系统的完整性和安全性。这意味着你无法直接向设备的文件系统写入文件或修改系统文件。通过执行 remount 操作,可以将文件系统从只读模式切换为可写模式,允许向设备的文件系统写入文件或修改系统文件。因为执行remount需要root权限所有先执行root在执行remount
#执行root
C:\Users\win>adb root
restarting adbd as root
#执行romout
C:\Users\win>adb remount
Using overlayfs for /system
Using overlayfs for /vendor
Using overlayfs for /odm
Using overlayfs for /product
Using overlayfs for /system_ext
Now reboot your device for settings to take effect
remount succeeded
2
3
4
5
6
7
8
9
10
11
12
13
"adb push 文件目录 开发板中的目录"
C:\Users\win>adb push C:\Users\win\Downloads\chrome.apk /data
C:\Users\win\Downloads\chrome.apk: 1 file pushed, 0 skipped. 48.3 MB/s (236058891 bytesin4.661s)
#进入查看是否成功
C:\Users\win>adb shell
rk3566_tspi:/# ls /data/c
cache/ chrome.apk#发现一直存在目录里了
2
3
4
5
6
将文件从设备复制到电脑
adb pull
"adb pull 开发板中的目录 文件保存目录"
#在泰山派开发板中创建一个测试文件
rk3566_tspi:/data# echo "tispi" > pulldemo.txt#退出shell终端
rk3566_tspi:/data# exit#这里正式开始测试,我们把刚刚在/data/文件夹下的创建的pulldemo.txt复制到电脑C:\Users\win\Downloads中
C:\Users\win>adb pull /data/pulldemo.txt C:\Users\win\Downloads
#提示传输速率时间等,表示成功
/data/pulldemo.txt: 1 file pulled, 0 skipped. 0.0 MB/s (6 bytesin0.002s)
2
3
4
5
6
打开查看
查看设备的日志信息
下面这几个命令就非常重要了,我们调试代码分析问题大多数多是会打印日志来定位分析,大家之后如果有问题需要交流探讨建议也附上logcat与dmesg日志
- logcat简单理解为负责Android层日志输出
adb logcat
- dmesg简单理解为负责Linux层日志输出
adb dmesg
进入升级模式
adb reboot loader