adb 命令收集

列出设备列表

adb devices 

输出示例

List of devices attached
PBV7N16913007233        device 

PBV7N16913007233 为设备序列号,在连接多台设备时可用序列号指定设备
安装应用

adb install + 文件路径        //adb install D:\微信.apk

指定某个设备安装应用(当电脑连接多个设备时)

adb -s 设备序列号 install     + 文件路径        //adb -s PBV7N16913007233 install 文件路径 

保存原apk数据并安装应用

adb install -r + 文件路径            //adb install -r D:\微信.apk

强行停止某应用

adb shell am force-stop [pgk]    //adb shell am force-stop com.coolapk.market

卸载应用

adb uninstall + 应用包名            //adb uninstall com.tencent.mobileqq

重启设备

adb reboot  

设备关机

adb reboot -p  
sleep 10 && reboot -p  // 延时10s后关机

开启adb服务

adb start-server

关闭adb服务

adb kill-server

文件操作

复制手机文件到电脑

adb pull sdcard/360 d:\log        //将SD卡上名为360的文件夹复制到电脑 D盘下的log文件夹,文件同理

复制电脑文件到手机

adb push d:\log\a.txt sdcard   //将电脑D盘下log文件夹下的a.txt文件复制到SD卡,文件夹同理

进入设备

adb shell

切换到当前目录的子目录

cd sdcard             //切换到sdcard

列出当前目录下的所有文件

ls                

切换到上一层目录

cd ..

切换到根目录

cd /

删除文件

rm 文件路径            //rm sdcard/a.log  删除SD卡名为a.log的文件

强制删除文件

rm -f 文件路径           //rm sdcard/1/a.txt        强制删除SD卡文件夹1下的a.txt文件

创建文件

touch sdcard/1/b.md            //在SD卡1文件夹下创建b.md文件
echo> sdcard/1/c.txt        //在SD卡1文件夹下创建c.txt文件

查看文件内容

cat casdrd/1/c.txt            //查看c.txt的内容并输出到控制台

重定向写入文件

echo "new text" > sdcard/1/c.txt    //清空c.txt里面的内容并写入新内容 new text

追加写入文件

echo "another new text" > sdcard/1/c.txt    //在c.txt的末尾另起一行追加写入another new text

删除空文件夹

rmdir 文件夹名称        //rmdir sdcard/1   删除SD卡上名为1的空文件夹

删除文件夹及该文件夹下的所有文件

rm -r 文件夹名称        //rm sdcard/2       删除SD卡下名为2的文件夹及该文件夹下的所有文件

创建文件夹

mkdir 文件夹名称            //mkdir sdcard/2       在SD卡上创建名为2的文件夹

移动文件

mv sdcard/360/a.jpg sdcard/2            //将SD卡360文件夹下的a.jpg移动到SD卡名为2的文件夹下

移动文件并改名

mv sdcard/360/a.jpg sdcard/2/b.png        //将SD卡360文件夹下的a.jpg移动到SD卡名为2的文件夹下并改名为b.png

移动文件夹

mv sdcard/2 sdcard/360/        //将SD卡名为2的文件夹移动到360文件夹下

复制文件

cp sdcard/360/aa.jpg sdcard/2/            //将SD卡360文件夹下的aa.jpg复制到SD卡名为2的文件夹下

文件重命名

rename 2/a.png 2/ c.png            //将文件夹2下名为 a.png的文件重命名为 c.png

手机截屏

1.保存到手机

screencap -p sdcard/a.png                        //进入设备后(adb shell)的操作,保存截屏到SD卡并命名为a.png
adb shell screencap -p sdcard/a.png                //截取当前屏幕并保存到SD卡并命名为a.png
adb shell system/bin/screencap -p sdcard/a.png        //截取当前屏幕并保存到SD卡并命名为a.png

2.保存到电脑
在电脑D盘新建文件并命名为 cap.bat的批处理文件,将以下代码拷贝到文件并保存,双击运行批处理文件,就会截取当前屏幕并保存到批处理文件所在文件夹

@echo off
set year=%date:~0,4%
set month=%date:~5,2%
set day=%date:~8,2%
set hour=%time:~0,2%
set min=%time:~3,2%
set sec=%time:~6,2%
set name=%year%%month%%day%_%hour%%min%%sec%.png
rem 下面是输出语句
::echo %name%
adb shell screencap -p /sdcard/1/%name%
adb pull /sdcard/1/%name%
adb shell rm /sdcard/1/%name%
::pause >nul

参考:https://stackoverflow.com/questions/1192476/format-date-and-time-in-a-windows-batch-script

手机录屏,支持MP4及avi格式(部分手机不支持),默认180s,不录制声音,按Ctrl + C停止录屏

输入 adb shell screenrecord --help 查看参数配置如下

Options:
--size WIDTHxHEIGHT
Set the video size, e.g. "1280x720".  Default is the device's mai
display resolution (if supported), 1280x720 if not.  For best res
use a size supported by the AVC encoder.
--bit-rate RATE
Set the video bit rate, in megabits per second.  Default 4Mbps.
--time-limit TIME
Set the maximum recording time, in seconds.  Default / maximum is
--rotate
Rotate the output 90 degrees.
--verbose
Display interesting information on stdout.
--help
Show this message.
Recording continues until Ctrl-C is hit or the time limit is reached.

adb shell screenrecord sdcard/1/a.mp4        //手机录屏并保存到SD卡的1文件夹下名为a.mp4

指定录制时间(支持 1 ~ 180 s),如果不指定,默认180s

adb shell screenrecord --time-limit 10 sdcard/1/b.mp4    //手机录屏10s并保存到SD卡的1文件夹下名为b.mp4

指定录制分辨率

adb shell screenrecord --size 2560x1440 sdcard/1/c.mp4

指定录制时间跟分辨率

adb shell screenrecord --time-limit 5 --size 2560x1440 sdcard/1/d.mp4

指定码率

adb shell screenrecord --bit-rate 5000000 sdcard/1/g.mp4

日志输出

解决控制台输出乱码问题

  • 方法一

在控制台执行命令

chcp 65001          // 将当前控制台输出窗口编码设置为utf-8  
chcp 936        // 将当前控制台输出窗口编码设置为简体中文(GBK)

以上只是临时的方法,要永久解决控制台乱码问题,需要在注册表添加一项
在运行中输入regedit进入注册表,找到 HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe 点击右键->新建 DWORD(32-位)值命名为CodePage ,点击右键->修改,选择十进制输入65001,然后确定即可

  • 方法二
    将以下代码粘贴到一个文本文件中,命名为utf-8.reg 并保存,然后双击即可
Windows Registry Editor Version 5.00  
[HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe]
"CodePage"=dword:0000fde9
"FontFamily"=dword:00000036
"FontWeight"=dword:00000190
"FaceName"="Consolas"
"ScreenBufferSize"=dword:232900d2
"WindowSize"=dword:002b00d2

参考https://blog.csdn.net/taoshujian/article/details/60325996
参考https://www.cnblogs.com/lion-zheng/p/7663735.html

输出日志到控制台
adb logcat *:d //打印debug级别日志到控制台
日志输出到文件

adb logcat -d time > D:\log.txt        //将debug级别日志输出到D盘log.txt文件

过滤指定tag的日志并输出到控制台

adb logcat -s tag        //过滤tag日志并输出到控制台

过滤指定tag的日志并输出到控制台并用findstr 命令找到自己想要的关键字

adb logcat -s tag |findstr aa        //过滤tag日志并输出到控制台
// 比如打印日志  
Log.d("ccc","hahahahha");      // 命令 adb logcat -s ccc |findstr haha  可在众多的log里找到自己关注的信息

将log过滤标志为TAG的日志输出到文件

adb logcat -s tag time > d:\log\a.log

关于过滤包名的我试了下没成功,可参考链接

模拟操作设备

模拟点击屏幕

adb shell input tap 1000 500     //模拟点击屏幕上坐标为(1000,500)的点

模拟滑动屏幕

adb shell input swipe 500 500 1000 500        //模拟从点(500,500)滑动到点(1000,500)

模拟按下按键,常用几个keycode 3:为home键 4:back键 24:音量+ 25:音量- 26:电源键
更多keycode请参考:https://testerhome.com/topics/1386

adb shell input keyevent keycode    //adb shell input keyevent 3  模拟按下hone键

获取设备信息

设备信息保存在/system/build.prop文件下,通过adb命令

adb shell cat /system/build.prop

输出如下

# begin build properties
# autogenerated by buildinfo.sh
ro.build.id=LMY47X
ro.build.display.id=LMY47X.G9200ZCU2COJA
ro.build.version.incremental=G9200ZCU2COJA
ro.build.version.sdk=22
ro.build.version.codename=REL
ro.build.version.all_codenames=REL
ro.build.version.release=5.1.1
ro.build.date=Thu Oct 22 19:33:32 KST 2015
ro.build.date.utc=1445510012
ro.build.type=user
ro.build.user=dpi
ro.build.host=SWDD5618
ro.build.tags=release-keys
ro.build.flavor=zerofltezc-user
ro.product.model=SM-G9200
ro.product.brand=samsung
ro.product.name=zerofltezc
ro.product.device=zerofltechn
ro.product.board=universal7420
# ro.product.cpu.abi and ro.product.cpu.abi2 are obsolete,
# use ro.product.cpu.abilist instead.
ro.product.cpu.abi=arm64-v8a
ro.product.cpu.abilist=arm64-v8a,armeabi-v7a,armeabi
ro.product.cpu.abilist32=armeabi-v7a,armeabi
ro.product.cpu.abilist64=arm64-v8a
ro.product.manufacturer=samsung
ro.product.locale.language=zh
ro.product.locale.region=CN
ro.wifi.channels=
ro.board.platform=exynos5
# ro.build.product is obsolete; use ro.product.device
ro.build.product=zerofltechn
# Do not try to parse description, fingerprint, or thumbprint
ro.build.description=zerofltezc-user 5.1.1 LMY47X G9200ZCU2COJA release-keys
ro.build.fingerprint=samsung/zerofltezc/zerofltechn:5.1.1/LMY47X/G9200ZCU2COJA:u
ser/release-keys
ro.build.characteristics=phone china_wlan
# Samsung Specific Properties
ro.build.PDA=G9200ZCU2COJA
ro.build.hidden_ver=G9200ZCU2COJA
ro.config.rm_preload_enabled=0
ro.build.changelist=5685365
ro.product_ship=true
ro.chipname=exynos7420
# end build properties

可通过如下命令获取该文件的信息,比如
获取设备型号

adb shell getprop ro.product.model        //会输出如 SM-G9200

获取设备品牌

adb shell getprop ro.product.brand        //输出如samsung

获取系统版本描述

adb shell getprop ro.build.description    //输出 zerofltezc-user 5.1.1 LMY47X G9200ZCU2COJA release-keys

获取处理器芯片名称

adb shell getprop ro.chipname    //输出exynos7420
  • 获取设备其他参数

获取屏幕分辨率

adb shell wm size

获取屏幕密度

adb shell wm density

获取屏幕参数

adb shell dumpsys window displays

三星S6输出如下

WINDOW MANAGER DISPLAY CONTENTS (dumpsys window displays)
Display: mDisplayId=0
init=1440x2560 640dpi cur=1440x2560 app=1440x2560 rng=1440x1340-2560x2460
deferred=false layoutNeeded=false

华为P9展示虚拟导航栏时输出如下,虚拟导航栏会占用部分屏幕空间

Display: mDisplayId=0
init=1080x1920 480dpi cur=1920x1080 app=1794x1080 rng=1080x1008-1794x1722
deferred=false layoutNeeded=false

华为P9隐藏虚拟导航栏时输出如下:

Display: mDisplayId=0
init=1080x1920 480dpi cur=1920x1080 app=1920x1080 rng=1080x1008-1920x1848
deferred=false layoutNeeded=false

获取CPU信息

adb shell cat /proc/cpuinfo

输出示例

Processor       : AArch64 Processor rev 2 (aarch64)
processor       : 0
Features        : fp asimd aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: AArch64
CPU variant     : 0x0
CPU part        : 0xd03
CPU revision    : 2

Hardware        : SAMSUNG Exynos7420

获取电池状况信息

adb shell dumpsys battery

输出示例

Current Battery Service state:
AC powered: false
USB powered: true
Wireless powered: false
status: 2
health: 2
present: true
level: 73
scale: 100
voltage: 3959
temperature: 301
technology: Li-ion
LED Charging: true
LED Low Battery: true
current now: -232
Adaptive Fast Charging Settings: true
SUPPORT_LOG_BATTERY_USAGE: true
isTablet: false
mBatteryMaxTemp: 479
mBatteryMaxCurrent: 2625
mBatteryAsocEfs: 88
mBatteryAsocNow: 90
FEATURE_SAVE_BATTERY_CYCLE: false
USE_FAKE_BATTERY: false

获取 WLAN 的 MAC 地址

adb shell cat /sys/class/net/wlan0/address        //输出 90:b6:86:d0:85:b4

Monkey测试

adb shell monkey -p your.package.name -v 500             //向指定包名发送500次的模拟点击事件
adb shell monkey -p com.tencent.mobileqq -v 500        //对qq做500次的monkey测试

更改adb端口

进入环境变量–>新建–>变量名填入 ANDROID_ADB_SERVER_PORT ,变量值填入一个端口号,如5080,确定,退出

使用PackageManage查看软件

列出所有安装的软件

adb shell pm list packages

列出所有系统软件

adb shell pm list packages -s

列出所有disan第三方软件

adb shell pm list packages -3  

可以用该命令在应用中获取安装的应用列表包名,代码如下(应该在子线程中操作,因为安装的应用多的话会比较耗时)

try {
    Process process = Runtime.getRuntime().exec("pm list packages -3");
    BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
    String line;
    while ((line = reader.readLine()) != null) {
        Logger.d("line:" + line);
    }
    reader.close();
    process.destroy();
} catch (IOException e) {
    e.printStackTrace()

打印的日志如下

line:package:com.weico.international
line:package:com.quark.browser
......

不推荐用这种方式获取,因为比较耗时,经测试mi5s(骁龙821)安装93个三方应用,用上述方法获取耗时约1.5~3s,而用pm.getInstalledPackages(0)获取再用flag判断是否三方应用耗时约30ms,有着几十到一百倍的差距,但是现在手机权限管理得越来越严格,有些用户可能不让你获取应用列表,这时候就可以尝试上述方法了

更多pm命令可参考 Android 调试桥

更多adb命令参考 adb shell 常用命令

用adb刷入手机刷机包

adb reboot bootloader
fastboot flash recovery twrp.img
fastboot reboot

####查看手机占用内存

adb -s 2ddaec60 shell    
dumpsys meminfo com.qianbajin.qiniu

输出如下:

Applications Memory Usage (in Kilobytes):
Uptime: 362074860 Realtime: 719391988

MEMINFO in pid 29187 [com.qianbajin.qiniu] 
               Pss  Private  Private  SwapPss     Heap     Heap     Heap
             Total    Dirty    Clean    Dirty     Size    Alloc     Free
            ------   ------   ------   ------   ------   ------   ------
Native Heap    12190    12148       12        0    20480    16000     4479
Dalvik Heap     5766     5712        0        0    12963     7778     5185
Dalvik Other     2131     2108        0        5
    Stack      476      476        0        0
   Ashmem        4        4        0        0
  Gfx dev     4148     4116        8        0
Other dev        4        0        4        0
 .so mmap     1855      128      388      160
.jar mmap        2        0        0        0
.apk mmap      585        0      176        0
.ttf mmap       61        0       16        0
.dex mmap     3865        4     3764        0
.oat mmap     5050        0     1896        0
.art mmap     2104      996      176       13
Other mmap      544        4      148        0
EGL mtrack    25836    25836        0        0
GL mtrack     3824     3824        0        0
  Unknown      857      820        8       25
    TOTAL    69505    56176     6596      203    33443    23778     9664

App Summary
                   Pss(KB)
                    ------
       Java Heap:     6884
     Native Heap:    12148
            Code:     6372
           Stack:      476
        Graphics:    33784
   Private Other:     3108
          System:     6733

           TOTAL:    69505       TOTAL SWAP PSS:      203

Objects
           Views:      399         ViewRootImpl:        6
     AppContexts:        5           Activities:        4
          Assets:        3        AssetManagers:        2
   Local Binders:       13        Proxy Binders:       16
   Parcel memory:        3         Parcel count:       13
Death Recipients:        0      OpenSSL Sockets:        0
        WebViews:        0

SQL
     MEMORY_USED:       94
PAGECACHE_OVERFLOW:       14          MALLOC_SIZE:       62

DATABASES
  pgsz     dbsz   Lookaside(b)          cache  Dbname
     4       36             12         0/15/1  /data/user/0/com.qianbajin.qi
niu/databases/qiniu.db