2.3 ADB命令使用技巧
虽然手机在我们的世界里扮演着越来越重要的角色,但是电脑就像一位母亲一样,随时守候着我们的手机,而连接手机和电脑的“脐带”,就是ADB——Android Debug Bridge。借助这样一个工具,我们可以用电脑来操纵手机,不仅是开发者需要,普通的用户也会需要,下面我们就来看看Android ADB。
2.3.1 ADB基础
ADB工具位于SDK的platform-tools目录下,因此在命令行中使用ABD的时候,需要通过cd命令,切换到该目录下,或者将platform-tools的路径添加到系统环境变量中,这样就可以直接使用了。配置好后,在命令行中输入以下命令。
- C:\Users\Administrator>adb version
如果显示如下内容,就说明配置成功了。
- Android Debug Bridge version 1.0.32
如果是Windows系统,则还需要下载对应的手机驱动。Linux系统则不需要下载。手机驱动一般在手机品牌的官网上可以找到。这里介绍一种更简单的方法,那就是靠各种手机助手来帮忙,像豌豆荚、91、QQ手机助手等,都可以帮我们下载到相应的手机驱动。通过USB端口连接手机后,只要开启这些手机助手,就会自动识别手机并下载相应驱动,这是不是很方便呢?其实,这些手机助手也是使用ADB来实现它的功能的,由此可见ADB的功能是多么强大。
下面我们再来设置一下手机端,这里Google也是为了安全而设计了一套机制。
首先进入Setting,选择“about my phone”,通过不断单击“内部版本号”来激活开发者选项。进入开发者选项后,就可以选择“USB Debug”了。这时候,如果你的手机连接了电脑,那么手机界面上会显示“是否需要对这台电脑授权”的选项,选择“OK”后,电脑就通过ADB连接上了这台手机。
接着,在命令行中输入如下命令。
- C:\Users\Administrator>adb shell
然后就可以使用shell命令了。如果你了解Linux的话,一定不会对Shell陌生,我们前面也说了,Android其实就是基于Linux开发的,所以这里出现Shell也不奇怪。在进入Shell之后,我们就可以使用很多Linux下的Shell命令。如下这些常用的Shell命令都可以使用。
- shell@t03gchn:/ $ ls | grep "data"
- ls | grep "data"
- data
- data_1
- data_2
- data_3
- shell@t03gchn:/ $ cd data
- cd data
2.3.2 ADB常用命令
下面我们来看一些ADB常用命令。
- 显示系统中全部Android平台
- C:\Users\Administrator>android list targets
- Available Android targets:
- ----------
- id: 1 or "android-19"
- Name: Android 4.4.2
- Type: Platform
- API level: 19
- Revision: 4
- Skins: HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800 (default),
- WVGA854, W
- XGA720, WXGA800, WXGA800-7in
- Tag/ABIs : default/armeabi-v7a, default/x86
- 安装Apk程序之Install
- adb install -r应用程序.apk
- C:\Users\Administrator>adb install -r F:\Test.apk
- 安装Apk程序之Push
- adb push <local> <remote>
- C:\Users\Administrator>adb push D:\Test.apk /system/app/
以上两种方法都可以安装上Apk,但是它们也有不同。Adb Install是将Apk安装到data/data目录下,作为普通的用户应用程序。而Adb Push则不是安装命令,它是将一个文件写入手机存储系统。因此,只要拥有相应的权限,就可以把任何Apk放到任何目录下,甚至是放到System目录下,成为一个系统应用程序。
从上面的分析我们可以看出,Adb Push不仅可以安装Apk,它最大的用处还是向手机写入文件。
- 向手机写入文件
- adb push <local> <remote>
- C:\Users\Administrator>adb push D:\file.txt /system/temp/
同理,我们也可以获取手机中的文件,上传到我们的电脑上。
- 从手机获取文件
- adb pull <remote> <local>
- C:\Users\Administrator>adb push /system/temp/ D:\file.txt
这样就可以把手机上的文件获取到本地了。其实这些东西,在Android的Android Device Monitor工具中都可以直接使用,如图2.38所示。
图2.38 Android Device Monitor
接下来,再来看看开发者是怎么使用ADB的。
通过Logcat来查看Log,Grep命令需要在Linux下使用。
- 查看Log
- C:\Users\Administrator>adb shell
- shell@t03gchn:/ $ logcat | grep "abc"
- 删除应用
- adb remount (重新挂载系统分区,使系统分区重新可写)。
- adb shell
- cd system/app rm *.apk
- 查看系统盘符
- C:\Users\Administrator>adb shell df
- Filesystem Size Used Free Blksize
- /dev 917.4M 40.0K 917.3M 4096
- /sys/fs/cgroup 917.4M 12.0K 917.4M 4096
- /mnt/asec 917.4M 0.0K 917.4M 4096
- /mnt/obb 917.4M 0.0K 917.4M 4096
- /system 827.8M 817.3M 10.5M 4096
- /cache 551.7M 9.8M 541.9M 4096
- /data 12.9G 2.9G 10.1G 4096
- /persist 15.8M 4.2M 11.6M 4096
- /firmware 64.0M 44.4M 19.5M 16384
- /mnt/shell/emulated 12.9G 2.9G 10.1G 4096
- 输出所有已经安装的应用
该命令同样可以在Linux下使用Grep来过滤结果。
- adb shell pm list packages –f
- 模拟按键输入
- adb shell input keyevent
- C:\Users\Administrator>adb shell input keyevent 3
最后面的数字就是要执行的Keyevent的Code,可以在网上查到对应的Code,这里列举一些常用的。
- input keyevent 82 menu
- input keyevent 3 home
- input keyevent 19 up
- input keyevent 20 down
- input keyevent 21 left
- input keyevent 22 right
- input keyevent 66 enter
- input keyevent 4 back
- 模拟滑动输入
- adb shell input touchscreen <x1> <y1> <x2> <y2>
- adb shell input touchscreen swipe 18 665 18 350
- 查看运行状态
可以列出很多运行状态,详细的命令大家可以查看API文档。
比如列出Activity的运行状态,同时过滤“tencent”关键字。
- adb shell dumpsys
- shell@t03gchn:/ $ dumpsys activity activities | grep "tencent"
- dumpsys activity activities | grep "tencent"
- * TaskRecord{44127db0 #8 A com.tencent.mm U 0}
- affinity=com.tencent.mm
- intent={act=android.intent.action.MAIN cat=[android.intent.category.
- LAUNCHER
- ] flg=0x10600000 cmp=com.tencent.mm/.ui.LauncherUI}
- realActivity=com.tencent.mm/.ui.LauncherUI
- * Hist #1: ActivityRecord{4408e7e0 u0 com.tencent.mm/.ui.LauncherUI}
- packageName=com.tencent.mm processName=com.tencent.mm
- app=ProcessRecord{447a9398 8134:com.tencent.mm/u0a10145}
- Intent { act=android.intent.action.MAIN cat=[android.intent.category.
- LAU
- NCHER] flg=0x10200000 cmp=com.tencent.mm/.ui.LauncherUI bnds=[10,752]
- [170,938] }
- frontOfTask=true task=TaskRecord{44127db0 #8 A com.tencent.mm U 0}
- taskAffinity=com.tencent.mm
- realActivity=com.tencent.mm/.ui.LauncherUI
- baseDir=/data/app/com.tencent.mm-1.apk
- dataDir=/data/data/com.tencent.mm
这里简单地grep了“tencent”的Activity信息。
- Package管理信息
PM命令和Dumpsys命令一样,非常强大、复杂,详细的命令大家可以查看API文档。
比如列出所有的Package。
- shell@t03gchn:/ $ pm list packages –f
- package:/system/app/SecVideoPlayer.apk=com.sec.android.app.videoplayer
- package:/system/app/DeepSea.apk=com.samsung.android.livewallpaper.deepsea
- package:/system/app/Keystring_DFT.apk=com.sec.android.app.DataCreate
- package:/data/app/com.sina.weibo-2.apk=com.sina.weibo
- package:/system/app/SuggestionService.apk=com.sec.android.app.
- SuggestionService
- package:/system/app/DualClockDigital.apk=com.sec.android.widgetapp.
- dualclockdigi
- tal
通过PM命令,可以看见Android中关于Package的各种相关信息。
- AM管理信息
这个命令依然很复杂,而且更强大。所以,详细的命令大家还是看看API文档吧。
这里举一个简单的例子——启动一个Activity。
- Adb shell am start -n包名/包名+类名
- 录制屏幕
- adb shell screenrecord /sdcard/demo.mp4
- 重新启动
- adb reboot
ADB的命令已经讲了不少了。不过,ADB的命令可远不止这么多,这里只是大致地让大家了解了ADB的一些常用功能及技巧,相信大家在使用的过程中一定会发现更多更有用的ADB命令。
2.3.3 ADB命令来源
最后,我们来看看这些命令都是怎么来的,打开如下两个目录,如图2.39和图2.40所示。
![]() | ![]() |
| 图2.39 CMD目录 | 图2.40 TOOLBOX目录 |
这两个目录下的\system\core\toolbox和\frameworks\base\cmds就是我们所有ADB命令和Shell命令的来源了。
ABD就像一根长长的纽带,手机在这头,电脑在那头。
