什么是adb(Android debug bridge)
Android 调试桥 (adb) 是一种功能多样的命令行工具,可让您与设备进行通信。
备注:adb 只能操作Android
开启开发者选项
常用命令
adb 也可以连接手机。手机需要开启开发者选项,以及usb调试功能。
adb devices 查看连接的设备
adb devices

结果中有 127.0.0.1:62001 表示设备的串号。
- device 表示连接成功。
adb shell 进入手机

在手机中可以执行一些常用的Linux命令,android 系统内核是Linux系统。所以支持部分Linux命令。
exit 可以退出adb shell
adb push电脑文件上传到手机
adb push C:\Users\zengy\Desktop\01.png /sdcard/DCIM
- C:\Users\zengy\Desktop\01.png 电脑上的文件路径
- /sdcard/DCIM 手机上的文件路径
adb pull 从手机里下载文件到电脑
adb pull /sdcard/DCIM C:\Users\zengy\Desktop
adb install 安装app
adb install C:\Users\zengy\Desktop\app-release.apk
查看手机上安装的所有软件
adb shell pm list packages

默认会把本机安装的app已经自己安装的第三方app信息都会显示出来。
查看第三方app
adb shell pm list packages -3
卸载app
adb shell pm uninstall 包名

monkey 测试
monkey可以模拟当app 被胡乱操作的时候的场景。
adb shell monkey -p org.cnodejs.android.md 10000
- -p 指定运行app
- 10000 随机操作10000个事件
monkey测试主要测试app的稳定性,monkey执行的时候会做很多随机的动作,如果应用在胡乱操作的时候闪退或者崩溃。所以需要提测。
monkey运行出错

当app出现闪退的时候,app会报错。
adb shell monkey -p com.fanmao.crashtest 1000// CRASH: com.fanmao.crashtest (pid 9796)// Short Msg: android.content.ActivityNotFoundException// Long Msg: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=com.example.app.mainactivity2 }// Build Label: samsung/dream2qltezh/dream2qltechn:7.1/N2G48H/G9550ZHU1AQEE:user/release-keys// Build Changelist: 700210421// Build Time: 1619015543000// android.content.ActivityNotFoundException: No Activity found to handle Intent { act=com.example.app.mainactivity2 }// at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1809)// at android.app.Instrumentation.execStartActivity(Instrumentation.java:1523)// at android.app.Activity.startActivityForResult(Activity.java:4238)// at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:675)// at android.app.Activity.startActivityForResult(Activity.java:4196)// at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:662)// at android.app.Activity.startActivity(Activity.java:4535)// at android.app.Activity.startActivity(Activity.java:4503)// at com.fanmao.crashtest.MainActivity$1.onClick(MainActivity.java:22)// at android.view.View.performClick(View.java:5638)// at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:992)// at android.view.View$PerformClick.run(View.java:22430)// at android.os.Handler.handleCallback(Handler.java:751)// at android.os.Handler.dispatchMessage(Handler.java:95)// at android.os.Looper.loop(Looper.java:154)// at android.app.ActivityThread.main(ActivityThread.java:6198)// at java.lang.reflect.Method.invoke(Native Method)// at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:891)// at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:781)//** Monkey aborted due to error.Events injected: 70## Network stats: elapsed time=796ms (0ms mobile, 0ms wifi, 796ms not connected)** System appears to have crashed at event 70 of 1000 using seed 1634205140279
上面就是报错信息,只需将报错信息发给开发即可。
常用的monkey命令参数
adb shell monkey -s 1634159219306 --throttle 500 -p org.cnodejs.android.md -vv 100
—throttle 500 每两个事件中间的延迟时间未500毫秒
-s 1634159219306 种子值,保证每次生成的序列一样
-p org.cnodejs.android.md 运行的app
-vv 显示详细的日志
100 运行次数
更多adb命令
面试问题
手机端你们平时是怎么测试的?
平时最主要的还是做手工功能测试。以功能为主,
也会使用monkey 跑一下Android app的稳定性。
(注意:monkey 不能跑IOS)。

