2.3 ADB命令使用技巧

虽然手机在我们的世界里扮演着越来越重要的角色,但是电脑就像一位母亲一样,随时守候着我们的手机,而连接手机和电脑的“脐带”,就是ADB——Android Debug Bridge。借助这样一个工具,我们可以用电脑来操纵手机,不仅是开发者需要,普通的用户也会需要,下面我们就来看看Android ADB。

2.3.1 ADB基础

ADB工具位于SDK的platform-tools目录下,因此在命令行中使用ABD的时候,需要通过cd命令,切换到该目录下,或者将platform-tools的路径添加到系统环境变量中,这样就可以直接使用了。配置好后,在命令行中输入以下命令。

  1. C:\Users\Administrator>adb version

如果显示如下内容,就说明配置成功了。

  1. Android Debug Bridge version 1.0.32

如果是Windows系统,则还需要下载对应的手机驱动。Linux系统则不需要下载。手机驱动一般在手机品牌的官网上可以找到。这里介绍一种更简单的方法,那就是靠各种手机助手来帮忙,像豌豆荚、91、QQ手机助手等,都可以帮我们下载到相应的手机驱动。通过USB端口连接手机后,只要开启这些手机助手,就会自动识别手机并下载相应驱动,这是不是很方便呢?其实,这些手机助手也是使用ADB来实现它的功能的,由此可见ADB的功能是多么强大。

下面我们再来设置一下手机端,这里Google也是为了安全而设计了一套机制。

首先进入Setting,选择“about my phone”,通过不断单击“内部版本号”来激活开发者选项。进入开发者选项后,就可以选择“USB Debug”了。这时候,如果你的手机连接了电脑,那么手机界面上会显示“是否需要对这台电脑授权”的选项,选择“OK”后,电脑就通过ADB连接上了这台手机。

接着,在命令行中输入如下命令。

  1. C:\Users\Administrator>adb shell

然后就可以使用shell命令了。如果你了解Linux的话,一定不会对Shell陌生,我们前面也说了,Android其实就是基于Linux开发的,所以这里出现Shell也不奇怪。在进入Shell之后,我们就可以使用很多Linux下的Shell命令。如下这些常用的Shell命令都可以使用。

  1. shell@t03gchn:/ $ ls | grep "data"
  2.  
  3. ls | grep "data"
  4. data
  5. data_1
  6. data_2
  7. data_3
  8. shell@t03gchn:/ $ cd data
  9. cd data

2.3.2 ADB常用命令

下面我们来看一些ADB常用命令。

  • 显示系统中全部Android平台
  1. C:\Users\Administrator>android list targets
  2. Available Android targets:
  3. ----------
  4. id: 1 or "android-19"
  5. Name: Android 4.4.2
  6. Type: Platform
  7. API level: 19
  8. Revision: 4
  9. Skins: HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800 (default),
  10. WVGA854, W
  11. XGA720, WXGA800, WXGA800-7in
  12. Tag/ABIs : default/armeabi-v7a, default/x86
  • 安装Apk程序之Install
  1. adb install -r应用程序.apk
  2. C:\Users\Administrator>adb install -r F:\Test.apk
  • 安装Apk程序之Push
  1. adb push <local> <remote>
  2. C:\Users\Administrator>adb push D:\Test.apk /system/app/

以上两种方法都可以安装上Apk,但是它们也有不同。Adb Install是将Apk安装到data/data目录下,作为普通的用户应用程序。而Adb Push则不是安装命令,它是将一个文件写入手机存储系统。因此,只要拥有相应的权限,就可以把任何Apk放到任何目录下,甚至是放到System目录下,成为一个系统应用程序。

从上面的分析我们可以看出,Adb Push不仅可以安装Apk,它最大的用处还是向手机写入文件。

  • 向手机写入文件
  1. adb push <local> <remote>
  2. C:\Users\Administrator>adb push D:\file.txt /system/temp/

同理,我们也可以获取手机中的文件,上传到我们的电脑上。

  • 从手机获取文件
  1. adb pull <remote> <local>
  2. C:\Users\Administrator>adb push /system/temp/ D:\file.txt

这样就可以把手机上的文件获取到本地了。其实这些东西,在Android的Android Device Monitor工具中都可以直接使用,如图2.38所示。

2.3 ADB命令使用技巧 - 图1 图2.38 Android Device Monitor

接下来,再来看看开发者是怎么使用ADB的。

通过Logcat来查看Log,Grep命令需要在Linux下使用。

  • 查看Log
  1. C:\Users\Administrator>adb shell
  2. shell@t03gchn:/ $ logcat | grep "abc"
  • 删除应用
  1. adb remount (重新挂载系统分区,使系统分区重新可写)。
  2. adb shell
  3. cd system/app rm *.apk
  • 查看系统盘符
  1. C:\Users\Administrator>adb shell df
  2. Filesystem Size Used Free Blksize
  3. /dev 917.4M 40.0K 917.3M 4096
  4. /sys/fs/cgroup 917.4M 12.0K 917.4M 4096
  5. /mnt/asec 917.4M 0.0K 917.4M 4096
  6. /mnt/obb 917.4M 0.0K 917.4M 4096
  7. /system 827.8M 817.3M 10.5M 4096
  8. /cache 551.7M 9.8M 541.9M 4096
  9. /data 12.9G 2.9G 10.1G 4096
  10. /persist 15.8M 4.2M 11.6M 4096
  11. /firmware 64.0M 44.4M 19.5M 16384
  12. /mnt/shell/emulated 12.9G 2.9G 10.1G 4096
  • 输出所有已经安装的应用

该命令同样可以在Linux下使用Grep来过滤结果。

  1. adb shell pm list packages f
  • 模拟按键输入
  1. adb shell input keyevent
  2. C:\Users\Administrator>adb shell input keyevent 3

最后面的数字就是要执行的Keyevent的Code,可以在网上查到对应的Code,这里列举一些常用的。

  1. input keyevent 82 menu
  2. input keyevent 3 home
  3. input keyevent 19 up
  4. input keyevent 20 down
  5. input keyevent 21 left
  6. input keyevent 22 right
  7. input keyevent 66 enter
  8. input keyevent 4 back
  • 模拟滑动输入
  1. adb shell input touchscreen <x1> <y1> <x2> <y2>
  2. adb shell input touchscreen swipe 18 665 18 350
  • 查看运行状态

可以列出很多运行状态,详细的命令大家可以查看API文档。

比如列出Activity的运行状态,同时过滤“tencent”关键字。

  1. adb shell dumpsys
  2. shell@t03gchn:/ $ dumpsys activity activities | grep "tencent"
  3. dumpsys activity activities | grep "tencent"
  4. * TaskRecord{44127db0 #8 A com.tencent.mm U 0}
  5. affinity=com.tencent.mm
  6. intent={act=android.intent.action.MAIN cat=[android.intent.category.
  7. LAUNCHER
  8. ] flg=0x10600000 cmp=com.tencent.mm/.ui.LauncherUI}
  9. realActivity=com.tencent.mm/.ui.LauncherUI
  10. * Hist #1: ActivityRecord{4408e7e0 u0 com.tencent.mm/.ui.LauncherUI}
  11. packageName=com.tencent.mm processName=com.tencent.mm
  12. app=ProcessRecord{447a9398 8134:com.tencent.mm/u0a10145}
  13.  
  14. Intent { act=android.intent.action.MAIN cat=[android.intent.category.
  15. LAU
  16. NCHER] flg=0x10200000 cmp=com.tencent.mm/.ui.LauncherUI bnds=[10,752]
  17. [170,938] }
  18.  
  19. frontOfTask=true task=TaskRecord{44127db0 #8 A com.tencent.mm U 0}
  20. taskAffinity=com.tencent.mm
  21. realActivity=com.tencent.mm/.ui.LauncherUI
  22. baseDir=/data/app/com.tencent.mm-1.apk
  23. dataDir=/data/data/com.tencent.mm

这里简单地grep了“tencent”的Activity信息。

  • Package管理信息

PM命令和Dumpsys命令一样,非常强大、复杂,详细的命令大家可以查看API文档。

比如列出所有的Package。

  1. shell@t03gchn:/ $ pm list packages f
  2. package:/system/app/SecVideoPlayer.apk=com.sec.android.app.videoplayer
  3. package:/system/app/DeepSea.apk=com.samsung.android.livewallpaper.deepsea
  4. package:/system/app/Keystring_DFT.apk=com.sec.android.app.DataCreate
  5. package:/data/app/com.sina.weibo-2.apk=com.sina.weibo
  6. package:/system/app/SuggestionService.apk=com.sec.android.app.
  7. SuggestionService
  8. package:/system/app/DualClockDigital.apk=com.sec.android.widgetapp.
  9. dualclockdigi
  10. tal

通过PM命令,可以看见Android中关于Package的各种相关信息。

  • AM管理信息

这个命令依然很复杂,而且更强大。所以,详细的命令大家还是看看API文档吧。

这里举一个简单的例子——启动一个Activity。

  1. Adb shell am start -n包名/包名+类名
  • 录制屏幕
  1. adb shell screenrecord /sdcard/demo.mp4
  • 重新启动
  1. adb reboot

ADB的命令已经讲了不少了。不过,ADB的命令可远不止这么多,这里只是大致地让大家了解了ADB的一些常用功能及技巧,相信大家在使用的过程中一定会发现更多更有用的ADB命令。

2.3.3 ADB命令来源

最后,我们来看看这些命令都是怎么来的,打开如下两个目录,如图2.39和图2.40所示。

2.3 ADB命令使用技巧 - 图2 2.3 ADB命令使用技巧 - 图3
图2.39 CMD目录 图2.40 TOOLBOX目录

这两个目录下的\system\core\toolbox和\frameworks\base\cmds就是我们所有ADB命令和Shell命令的来源了。

ABD就像一根长长的纽带,手机在这头,电脑在那头。