adb常用命令

一、adb介绍

1.1 adb简介

  • Android Debug Bridge(Android调试桥)简称adb;
  • Android sdk中提供的用于管理模拟器或真机状态的工具;
  • 命令行工具。

1.2 adb操作手机设备

  1. 打开应用:adb shell am start -n com.tencent.wework/.launch.LaunchSplashActivity
  2. 传输文件;
  3. 点击,输入,滑动等;
  4. 硬件操作:返回,回到首页;
  5. 性能指标。

1.3 adb工作原理

  • 采用了客户端-服务器(C/S)模型,包括三个部分:
    • 客户端 client
    • 服务端 server
    • 守护进程 daemon

1.4 adb环境搭建

1.4.1 Java环境安装与配置

下载地址

配置Java环境变量

  • JAVA_HOME:jdk 安装根目录
  • PATH:
    • %JAVA_HOME%
    • %JAVA_HOME%\bin
    • %JAVA_HOME%\jre\bin
  • 验证环境: java -version

参考文档

1.4.2 Android SDK环境安装

下载地址

环境配置

ANDROID_HOME   D:\adt-bundle-mac-x86_64-20140702\sdk   
PATH   %ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools

1.4.3 检查是否安装成功

adb回车(或者adb shell)

二、adb与设备交互

2.1 adb连接手机设备

2.1.1 Android模拟器种类

  • Android Studio emulator(官方);
  • Genymotion(依赖网络);
  • mumu,雷神,夜神,逍遥等第三方模拟器(推荐)。

2.1.2 连接模拟器(mumu为例)

  • Windows:
    • adb connect 127.0.0.1:7555
    • adb devices
  • mac:
    • adb kill-server
    • adb devices

image

2.1.3 连接真机(Android手机)设备

  1. 手机端:让手机处于调试模式;
  2. 电脑端安装手机驱动。

2.2 查看设备状态

2.2.1 查看手机状态

  • adb devices
  • adb get-state
    image

2.2.2 设备状态种类

  • devices:正常;
  • offline:连接出现异常,设备无响应;
  • unauthorized:未授权。

2.3 adb安装卸载应用

2.3.1 adb命令格式

  • 格式:
    • adb [-d | -e | -s <serialNumber>]<command>
  • -d:指定当前唯一通过USB连接的Android设备为命令目标(了解);
  • -e:指定当前唯一运行的模拟器为命令目标(了解);
  • -s:指定响应的设备为命令目标(重点)。

2.3.2 安装

  • 普通安装:adb install <apk路径>
  • 覆盖安装/代替安装:adb install -r <apk路径>

2.3.3 卸载

  • 卸载应用:adb uninstall 包名
  • 卸载应用(不删除配置文件,保存数据缓存信息):adb uninstall -k 包名

2.4 adb命令启动页面

2.4.1 包和Activity(活动页)的概念

  • package包:是Android应用的唯一标志。
  • Activity活动页:Android应用页面,一个页面就是一个Activity。

2.4.2 获取当前的页面名

  1. 打开手机APP应用的某个页面;
  2. 打开命令行工具,执行命令:adb shell "dumpsys window | grep mCurrentFocus"

2.4.3 获取启动页面的activity

  • Win:adb logcat ActivityManager:I | findstr "cmp"
  • mac:adb logcat ActivityManager:I | grep "cmp"

2.4.4 启动页面

  • adb shell am start -n <包名>/<activity名>

2.5 adb文件传输

  • adb push 电脑路径 设备路径
  • adb pull 设备路径 电脑路径
    image

2.6 adb日志

2.6.1 日志的级别

级别 详情
V 明细verbose(最低优先级)
D 调试debug
I 信息info
W 警告warn
E 错误error
F 严重错误fatal
S 无记载silent(最高优先级,绝不会输出任何内容)

2.6.2 adb命令查看日志

  • adb logcat

2.6.3 查看日志常用的参数

  • 参数1:
adb logcat --help
adb logcat [TAG:LEVEL ] [TAG:LEVEL]...
  • 参数2:
adb logcat 打印默认日志数据
adb logcat -v time 打印时间
adb logcat -v color 使用不同的颜色,来显示每个优先级
adb logcat -f <filename> 将日志输出到文件
adb logcat > log.log 将日志保存到PC上
adb logcat -c 清理已存在的日志

2.6.4 根据条件过滤日志

adb logcat -v time "*:W" 打印Warning及以上级别的日志
adb logcat ActivityManager:D "*:S" 过滤tag为ActivityManager、level为Debug及以上级别的日志

2.6.5 常见问题

FATAL EXCEPTION: main
12-09 09:20:14.689: E/AndroidRuntime(31223): java.lang.IllegalStateException: Activity has been destroyed
12-09 09:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1365)
12-09 09:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595)
12-09 09:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:574)
12-09 09:20:14.689: E/AndroidRuntime(31223): at cn.com.topsky.community.tfd.DongTaiFragment.init(DongTaiFragment.java:209)
12-09 09:20:14.689: E/AndroidRuntime(31223): at cn.com.topsky.community.tfd.DongTaiFragment.onCreateView(DongTaiFragment.java:68)
12-09 09:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1500)
12-09 09:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927)
12-09 09:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
12-09 09:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
12-09 09:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467)
12-09 09:20:14.689: E/AndroidRuntime(31223): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:440)
12-09 09:20:14.689: E/AndroidRuntime(31223): at android.os.Handler.handleCallback(Handler.java:605)
12-09 09:20:14.689: E/AndroidRuntime(31223): at android.os.Handler.dispatchMessage(Handler.java:92)
12-09 09:20:14.689: E/AndroidRuntime(31223): at android.os.Looper.loop(Looper.java:154)
12-09 09:20:14.689: E/AndroidRuntime(31223): at android.app.ActivityThread.main(ActivityThread.java:4624)
12-09 09:20:14.689: E/AndroidRuntime(31223): at java.lang.reflect.Method.invokeNative(Native Method)
12-09 09:20:14.689: E/AndroidRuntime(31223): at java.lang.reflect.Method.invoke(Method.java:511)
12-09 09:20:14.689: E/AndroidRuntime(31223): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809)
12-09 09:20:14.689: E/AndroidRuntime(31223): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576)
12-09 09:20:14.689: E/AndroidRuntime(31223): at dalvik.system.NativeStart.main(Native Method)

2.7 adb命令清缓存

2.7.1 理解Android系统

2.7.2 adb shell 应用

  • 应用1:

    • 查看目录结构:adb shell ls
    • 查看系统当前日期:adb shell date
    • 查看系统CPU使用情况:adb shell cat /proc/cpuinfo
    • 查看系统内存使用情况:adb shell cat /prop/meminfo
  • 应用2:查看应用列表

    • 查看所有应用:adb shell pm list package
    • 显示系统自带应用:adb shell pm list package -s
    • 显示第三方应用:adb shell pm list package -3
  • 应用3:

    • 查看当前的页面名:adb shell "dumpsys window |grep mCurrentFocus

2.7.3 清除应用数据及缓存

  • adb shell pm clear <包名>