adb命令专题

AndroidDevTools - Android开发工具 Android SDK下载 Android Studio下载 Gradle下载 SDK Tools下载

adb命令大全

  1. https://github.com/mzlogin/awesome-adb
  2. ADB 操作命令详解及用法大全_Lucas__liu的博客-CSDN博客_adb命令
  3. ADB Commands - Android ADB Shell Commands Manual
  4. adb命令模拟按键:adb命令模拟按键事件KeyCode - #天羽Owl - 博客园
  5. 最全的ADB命令合集_启航风起时的博客-CSDN博客
  6. Android 查看app当前运行的线程

 

1、AAPT 查看APK 包名 版本号

 查看应用列表
adb shell pm list packages // 查看手机上所有的应用程序的包名 

adb uninstall <包名>   //卸载

首先需要找到Android SDK所在的目录。然后找到build-tools下对应版本.

如: D:\Android\androidsdk\build-tools\28.0.3

目录下会有一个aapt.ext的程序.

D:\Android\androidsdk\build-tools\28.0.3\aapt dump badging xxx.apk

也可以把D:\Android\androidsdk\build-tools\28.0.3配置到环境变量中去,直接用

aapt dump badging xxx.apk

2、adb查看当前顶层activity信息

adb kill-server

adb start-server

adb shell ps//查看所有进程
adb shell ps | grep appbrand0//查看appbrand0进程

adb shell cat /proc/net/unix | grep webview//过滤出webview
adb shell ps | grep xxxx.yy//过滤某个app的进程 

adb shell dumpsys activity top

adb shell dumpsys activity activities

#adb shell dumpsys activity | findstr "mFocusedActivity"
adb shell dumpsys window | findstr mCurrentFocus  

adb shell dumpsys window windows | findstr mFocusedApp    

adb shell dumpsys window w  |findstr   \/   |findstr    name=  

adb命令专题_第1张图片

adb命令专题_第2张图片

adb shell pm clear 

3、adb获取应用的版本号信息

windows:

真机打开目标应用连接电脑,查看应用信息

adb shell pm dump com.xxxx.xxx
adb shell pm dump com.xxxx.xxx | findstr "versionName"
	versionName=1.8.2

如果是应用已经安装在手机上:

adb shell 
>>>  dumpsys package  | grep version

或者

adb shell dumpsys package  | findstr version

linux: 

adb shell pm dump com.xxxxxx.xx| grep "versionName"

4、adb查看安装包的apk路径

  adb shell pm path com.tencent.mm : 获取手机里面原版本待测试的安装包的路径。

adb shell pm path 

 5、adb清除安装包数据与缓存

adb shell pm clear 

6、将手机安装的apk pull到桌面(手机上没有安装包的情况下)

adb shell pm path   //包名例如 com.Template.cn,查看安装路径

// 通过安装路径把它pull出来
adb pull /data/app/com.aa.bb.cc.dd-fdasjfkl21jj32rej3==/base.apk C:\Users\Admin\Desktop\abc.apk

7、使用adb命令输入中文

adb输入中文问题:向聚焦的文本框中输入内容,adb不支持unicode字符,只支持ASICC字符,对于UTF-8的字符是无法输入的(无法输入中文)

用法:adb shell input text  " "

解决方案:

7.1 下载ADBKeyBoard.apk

github源码:https://github.com/senzhk/ADBKeyBoard

百度网盘:https://pan.baidu.com/s/1zTH4V2iwF9PZKtEu_ICz6w  提取码:tnw7

7.2 安装ADBKeyBoard.apk

adb install com.android.adbkeyboard

7.3 切换成adb输入法

adb -s udid shell ime set com.android.adbkeyboard/.AdbIME
adb -s udid shell settings put secure default_input_method 

7.4 切换回原来的输入法

adb shell ime set com.nuance.swype.dtc/com.nuance.swype.input.IME  

7.5 检验你的输入法是否有效

adb shell ime list -a  

7.6 查看手机的安装程序是否含有,用来检查是否安装输入法


windows:
C:\Users\Admin>adb shell pm list packages | findstr 
package:

C:\Users\Admin>adb shell pm list packages | grep 
'grep' 不是内部或外部命令,也不是可运行的程序
或批处理文件。


adb shell:
Phone:/ $ pm list packages | grep 
package:

Phone:/ $ pm list packages | findstr 
/system/bin/sh: findstr: not found

7.7 过滤grep 和findstr

在windows上直接使用findstr来过滤你想要的信息

这个命令找出手机上正在运行并且这个名字或者说是包名,其中包含baidu的进程

//下面的写法也对
adb shell ps baidu
adb shell ps|findstr baidu    //cmd下搜索包名为baidu的进程
adb shell ps|findstr -i baidu //cmd下搜索包名为baidu的进程
adb shell ps|findstr /i baidu //cmd下搜索包名为baidu的进程 

对应的android或者linux中的shell命令是grep

ps|gerp  baidu
ps|grep "com.linux.test"

提示 :有的手机上没有grep命令,这时候可以采用findstr;或者往手机里放一个busybox文件,然后使用busybox grep命令,效果一样

高版本上需要加-A否则命令无效

adb shell ps -A|grep baidu

7.8 使用adb命令发送一个文本试试

adb shell am broadcast -a ADB_INPUT_TEXT --es msg '你好嗎? Hello?'

7.9  ADB如何实现模拟双击?

db shell input tap x y && db shell input tap x y

8.adb swipe

前四个数为坐标点,后面是滑动的时间duration(单位毫秒)

adb shell input swipe  

adb shell input swipe   Duration

adb shell input swipe 500 1900 500 100 

9. 指定设备

如果有多个设备/模拟器连接,则需要为命令指定目标设备。

参数 含义
-d 指定当前唯一通过 USB 连接的 Android 设备为命令目标
-e 指定当前唯一运行的模拟器为命令目标
-s 指定相应 serialNumber 号的设备/模拟器为命令目标
adb -s emulator-5554 shell   // 表示选择5554的模拟器进入shell

比如这时想指定 cf264b8f 这个设备来运行 adb 命令获取屏幕分辨率:

adb -s cf264b8f shell wm size

又如想给 10.129.164.6:5555 这个设备安装应用(这种形式的 serialNumber 格式为 :,一般为无线连接的设备或 Genymotion 等第三方 Android 模拟器):

adb -s 10.129.164.6:5555 install test.apk

10.指定 adb server 的网络端口

命令:

adb -P  start-server

默认端口为 5037。

11. 无线连接方式

无线连接(Android11 及以上)

操作步骤:

  1. 更新到最新版本的 SDK 平台工具(至少30.0.0)。

  2. 将 Android 设备与要运行 adb 的电脑连接到同一个局域网,比如连到同一个 WiFi。

  3. 在开发者选项中启用无线调试

  4. 在询问要允许在此网络上进行无线调试吗?的对话框中,点击允许。

  5. 选择使用配对码配对设备,使用弹窗中的 IP 地址和端口号。

adb pair ipaddr:port
  1. 提示Enter pairing code: 时输入弹窗中的配对码,成功后会显示Successfully paired to ...

  2. 使用无线调试下的 IP 地址和端口

adb connect ipaddr:port
  1. 确认连接状态。

    adb devices

    如果能看到

    ipaddr:port device

说明连接成功。

前提:已经通过USB设备线连接过电脑,并成功安装驱动。

adb连接手机进行调试有两种方式,一种是使用USB线,另一种是使用无线WiFi。

Android系统底层运行着一个服务(adbd),用于响应和管理大家在电脑端的adb命令连接,这个服务在启动时会根据手机的配置监听USB连接或网络其中之一。配置的属性为:service.adb.tcp.port,也就是监听的网络端口

以上属性的值 > 0:adbd将监听网络对应的端口(一般为5555)
以上属性的值 <=-1:adbd将监听USB 

接下来是连接步骤:

命令行输入:adb connect (ip):5555

提示:unable to connect to (ip):5555

解决办法:

   1)手机与PC相连,执行以下命令:adb tcpip 5555

     成功提示:restarting in TCP mode port 5555   

   然后断开USB

     错误提示:error:device not found

     查看手机USB调试是否打开;PC端是否安装手机驱动。

   2)接着执行adb connect (ip):5555,这时候应该就能连接成功了

     成功提示:connected to (ip):5555

调试完成之后,输入如下的命令断开连接:

adb disconnect (ip):5555 
 

adb.exe shell
setprop service.adb.tcp.port 5555
exit
adb.exe tcpip 5555
adb.exe connect 

一. 有usb线,手机没有root,连接后不用usb线
先用usb连接到手机服务器,配置手机服务器接受tcpip连接

具体步骤:

1、手机、电脑确保连在同一个局域网,手机已开启开发者-调试模式
2、adb  tcpip 6666// 可根据情况自由设置,比如666
3、将手机的服务器设置接受tcpip连接(此后可以断开usb连接了,部分手机在拔掉连线后,USB调试会自动关闭,请在拔线后检查USB调试状态,若发现关闭,请手动再次开启USB调试,且已知华为系统还需要将USB连接模式设置为媒体文件方式),在PC执行命令adb disconnect(目的是彻底断开刚才的有线连接,以便进行无线连接);
4、在PC上ping手机的IP,查看是否能通
5、在PC执行
        adb connect 10.8.70.143:6666(此处IP和端口为例子,请以实际为准)
        或
        adb connect IP   # IP替换自己手机的IP,可以通过wifi设置中查看
6、在PC执行adb devices,查看到手机的连接信息,证明已adb无线连接成功;

注意:

1、手机重启后,需要重新执行上述步骤!如非必要,可不重启手机。

2、无线连接的IP在设备重启或开关WIFI后,可能发生变更,请仔细检查。
 

adb kill-server 关闭adb服务

adb start-server 开启adb服务

adb reconnect offline // 将offline/unauthorized状态设备重新连接

二. 无usb线,手机需root

在root过的手机上装一个shell终端(网上下载一个),设置手机服务器接受tcpip连接
su   # 切换到超级管理员
setprop service.adb.tcp.port 5555 // 配置接受tcpip端口为5555, 若改为-1 即接受usb连接
stop adbd               // 关闭adbd服务  
start adbd               // 重启adbd服务,使其配置生效

adb connect    // IP替换自己手机的IP,可以通过wifi设置中查看,如(192.168.0.111)
总结:

默认adbd接受usb连接,
关键一步就是,将adbd接受tcpip连接。
用usb连接后修改,或手机root直接修改都可以。

WLAN 连接(需要 USB 线)
借助 USB 通过 WiFi 连接来正常使用 adb 需要以下步骤:
操作步骤:

将 Android 设备与要运行 adb 的电脑连接到同一个 WiFi。
将设备与电脑通过 USB 线连接(可通过 adb devices 命令查看设备连接情况)。
通过 adb tcpip 5555 命令让设备在 5555 端口监听 TCP/IP 连接。
断开 USB 连接。
找到设备的 IP 地址(可以在「设置」-「关于手机」-「状态信息」-「IP地址」查看 IP 地址)。
通过 adb connect 命令使用 IP 地址将 Android 设备与电脑连接。
通过 adb devices 命令查看设备连接情况。
使用完毕后可通过 adb disconnect 命令断开无线连接。

 

WLAN 连接(无需借助 USB 线)
注:需要 root 权限。不借助 USB 通过 WiFi 连接来正常使用 adb 需要以下步骤:

在 Android 设备上安装一个终端模拟器(可通过Terminal Emulator for Android Downloads下载)。

将 Android 设备与要运行 adb 的电脑连接到同一个 WiFi。

打开 Android 设备上的终端模拟器,在里面依次运行命令:

su
setprop service.adb.tcp.port 5555

找到设备的 IP 地址(可以在「设置」-「关于手机」-「状态信息」-「IP地址」查看 IP 地址)。

通过 adb connect 命令使用 IP 地址将 Android 设备与电脑连接。

通过 adb devices 命令查看设备连接情况。
 

WiFi 连接转为 USB 连接

通过adb usb命令以USB模式重新启动ADB:

adb usb


————————————————
版权声明:本文为CSDN博主「Lucas__liu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lb245557472/article/details/84068519

12 adb 安装应用

adb install xxxx.apk

adb -s   xxxxx.apk

adb -s    install -r xxxx.apk   // 替换安装,已登录的账户安装完不用重新登录

adb install -r 替换已存在的应用程序,也就是说强制安装

adb install -l 锁定该应用程序

adb install -t 允许测试包

adb install -s 把应用程序安装到sd卡上

adb install -d 允许进行将见状,也就是安装的比手机上带的版本低

adb install -g 为应用程序授予所有运行时的权限

13 adb 卸载应用

https://blog.csdn.net/c19344881x/article/details/121400095

一般方法卸载:

可能无法卸载,有时需要获取root权限,删除指定文件下的apk。 

adb shell pm list packages // 查看手机上所有的应用程序的包名 

adb uninstall <包名>   //卸载
root式卸载

1)通过包名获取apk路径(包名地址):

adb shell pm path {包名}

2)root权限:

adb root

3)读写权限

adb remount

4)删除apk:

adb shell rm {包名地址}

5)重启root:

adb reboot

shell式卸载:

adb root
adb remount

adb shell

pm list packages // 查看所有包名

pm path 



cd /system/app/*** // 进入apk所在目录



rm -rf xxx.apk // 彻底删除apk

reboot // 重启

查看目录结构 :adb shell ls
查看系统当前日期 :adb shell date
查看系统 CPU 使用情况 :adb shell cat /proc/cpuinfo
查看系统内存使用情况 :adb shell cat /proc/meminfo
显示所有应用 :adb shell pm list packages
显示系统自带应用 :adb shell pm list packages -s
显示第 3 方应用 :adb shell pm list packages -3
查看当前页面名:
MAC: adb shell "dumpsys window |grep mCurrentFocus"
Windows: adb shell "dumpsys window |findstr mCurrentFocus"
清除应用数据以及缓存:adb shell pm clear <包名>
拓展:

am:activity manager
pm:packages manager

14 kill 干掉进程

adb shell am force-stop // 强制关闭一个应用程序 

                                                                  // adb shell am force-stop比使用 kill -9 要方便

14.1 查看手机正在运行的程序

命令查看:

ps

ps -ef

ps -aux

使用"读取proc的方式"获取正在运行的进程

// 1,遍历"/proc"文件夹下面的文件夹,其中有些"文件夹名称"就是进程id(PID)
ls /proc
// 2,cat命令获取对应进程的名字(cat /proc/PID/cmdline)
cat /proc/1/cmdline 得到结果/init

cat /proc/12073/maps 查看进程的文件结构
cat /proc/12073/status 查看进程的状态
(实例:12073是要查看的进程的PID)

14.2 查找对应程序的pid

ps -ef | grep baidu

pgrep baidu

pidof  <进程全名> // 返回进程的pid

如果没有grep命令,可以放置一个busybox工具到手机
查看360对应的程序是否在运行: ps | busybox grep m.qihoo*

14.3 杀死进程

---
cmd.exe /c 
/bin/bash -c 

adb -s udid  shell pkill -f io.appium.uiautomator2.server.test // 关闭appium的附加进程
---

kill -s 9 // -s 9 传递给进程的信号是9,即强制、尽快终止进程
例如:使用kill -s 9 134,就可以干掉 PID =134. PID =10608. PID =10755三个进程。(这里pid=134是父进程)

adb命令专题_第3张图片

14.4 查看进程优先级

假设要查看程序com.test.app.a的进程优先级
adb shell(进入shell)
ps|grep com.test.app.a(列出这个进程)

u0_a37    28155 164   909516 36900 ffffffff b75baa27 S com.test.app.a
1
cat /proc/28155/oom_adj(获取这个进程的adj值)
adj值则在ProcessList中定义,adj的取值范围[-17,16],取值越大说明优先级越低。adj值的说明

14.5 Android 查看app当前运行的线程

背景

如何查看当前进程的线程数量。比如一个app发现ui线程的调度一直在Runnable(待调度执行)中,而不是出于Running,那么就要看这个时候CPU的每个核心在跑什么,频率怎么样。比如频率很高,每个核心吃满了,但是ui线程依然Runnable,那么就得看其他线程在干嘛了。

 adb shell
ps -A
//查看全部进程

拿到pid之后

ps -T -A | grep pid
//就是整个app的线程信息了。下面是例子。一个空工程 + 一个线程保存log到文件

ursa:/ $ ps -T -A | grep 26644
u0_a184      2664426644672531199613972000 S module_logutils
u0_a184      2664426650672531199613972000 S Jit thread pool
u0_a184      2664426655672531199613972000 S Signal Catcher
u0_a184      2664426661672531199613972000 S ADB-JDWP Connec
u0_a184      2664426663672531199613972000 S HeapTaskDaemon
u0_a184      2664426664672531199613972000 S ReferenceQueueD
u0_a184      2664426665672531199613972000 S FinalizerDaemon
u0_a184      2664426666672531199613972000 S FinalizerWatchd
u0_a184      2664426667672531199613972000 S Binder:26644_1
u0_a184      2664426668672531199613972000 S Binder:26644_2
u0_a184      2664426680672531199613972000 S Binder:26644_3
u0_a184      2664426693672531199613972000 S Profile Saver
u0_a184      2664426695672531199613972000 S RenderThread
u0_a184      2664426698672531199613972000 S Binder:intercep
u0_a184      2664426699672531199613972000 S magnifier pixel
u0_a184      2664426700672531199613972000 S chancesThread1
u0_a184      2664426701672531199613972000 S pool-2-thread-1
u0_a184      2664426704672531199613972000 S AsyncTask #1
u0_a184      2664427040672531199613972000 S chancesThread2
ursa:/ $

如果想一直观察当前app的线程数量,可以通过脚本来做。比如你已经知道进程的pid,还有他名字。

#!/bin/bash

for((i=1;i<=10000;i++));

do
##替换成需要做的动作
sleep 1 #睡眠一秒
adb shell ps -T | grep u0_a208 | wc -l
#我打印了命令,如果你不需要,可以忽略
#u0_a208 pid前面的user
echo 'adb shell ps -T | grep u0_a208 | wc -l'; 


done

这样就可以观察线程数目的变化了。比如你进入某个页面的时候,看看线程有没有变化。通过这样的简单观察,如果发现线程数目一直增加,那么就是有问题。长时间下去可能会oom。即使不oom也有可能产生卡顿或者ANR。因为线程越来越多,就意味着CPU到时候忙不过来,调度自然跟不上了。

还有一个方式是,打开as,打开profiler,点击CPU,进去之后也可以实时看到线程数目,CPU使用率,等等详细信息。

有个头疼的事情,我怎么知道这些线程是哪里创建的或者触发的,比如进入某个页面后,我怎么快速定位线程的创建和调用呢,找到线程的使用者呢。如果你知道,赶紧来评论区告诉我。

如果我有方法,我会补充这个文章。这一篇属于残次品。

 

15 通过packages.xml文件查看app安装信息 


在/data/system/packages.xml文件中,找到你应用相关内容
使用cat /data/system/packages.xml命令得到以下数据


       .....
   

 

name就是包名,codePath就是安装的路径

16 设置系统属性值后免重启

在调试的过程中,经常遇到需要修改系统属性值:setprop xxx.xxx.xxx,但是修改后,如果重启就没效啦。
而且如果没重启,会遇到属性值在代码中不生效,重启后,属性值又还原的矛盾;
且有时候又确实需要修改属性值后重启机器的需求,如修改了setenforce的值但是又想系统重启下重启则值会还原。
那怎么办呢?
使用下面两个命令来解决这个烦恼吧~可以打开新世界哦~
adb shell stop;
adb shell start;
使用setprop xxx.xxx.xxx后,再使用adb shell stop;adb shell start;就可以啦~
 

17 dumpsys 查看内存,cpu,电量信息

dumpsys meminfo // 查看所有内存信息

cat /proc/meminfo //看手机内存信息

dumpsys pkg_name // 查看某个包的内存信息

dumpsys meminfo 应用包名 // 查看应用的内存信息

adb shell dumpsys cpuinfo // 查看CPU使用情况、查看你的应用占了多少CPU

adb shell getprop ro.product.cpu.abi // 查看android cpu是32位还是64位

dumpsys battery // 查看电量信息

--------

adb shell dumpsys activity | findstr "mFocusedActivity" // 查看最上层activity名字

9.0以上高版本也可以:

adb shell dumpsys activity | findstr ResumedActivity
adb shell dumpsys activity | grep ResumedActivity

--------

adb shell dumpsys window windows | findstr  mCurrent // 查看最上层窗口信息
adb shell dumpsys activity | findstr your.package.name // 万能方法 
adb shell dumpsys activity activities | findstr your.package.name // 查看activity栈
adb shell dumpsys activity your.package.name // 栈顶Fragment

--------

adb 查看安卓手机版本信息

查看android版本:

adb shell getprop ro.build.version.release

查看sdk版本:

adb shell getprop ro.build.version.sdk

18 查看端口

显示已连接的端口:netstat -ntup
显示正监听的端口:netstat -ntupl
查询端口进程应关系cat /proc/net/tcp6

19 查看手机IP地址

网络上已经有很多教程关于如何利用adb获取手机的WIFI ip地址,但是大多数方法在如今的高版本安卓系统中,因为权限或是命令不存在等,好多是无效的,如adb shell netcfg、adb shell ifconfig wlan0等等。

还有的方法是需要手机root安装busybox,通过扩展更多的Linux命令来获取ip地址,比较繁琐。
adb shell ip addr show wlan0 // 不需要任何特殊权限,可以直接获取到wlan0,也就是无线网卡WIFI的IP地址。

adb shell netstat // 找到localaddress

手机root 安装busybox
 adb shell ifconfig

然后从adb命令结果中提取出IP地址的方法:
利用正则表达式可以很方便的匹配。根据本文第一个截图中的adb命令结果,在字符串inet后,子网掩码/24前是我们要的IP地址。

我们得到如下正则表达式:inet\s(\d+?\.\d+?\.\d+?\.\d+?)/\d+

其中括号前和inet之间有一个空格,我们用\s匹配上。括号后是斜线/加子网掩码,我们用/\d+匹配上。括号内就是我们要的IP地址。

public static String exec(String cmd) {
    try {
        StringBuilder sb = new StringBuilder();
        Process process = Runtime.getRuntime().exec(cmd);
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        String line;
        while ((line = bufferedReader.readLine()) != null) {
            sb.append(line).append("\n");
        }
        bufferedReader.close();
        process.destroy();
        return sb.toString();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}

public static String grabIP(String content) {
    String reg = "inet\\s(\\d+?\\.\\d+?\\.\\d+?\\.\\d+?)/\\d+";
    Pattern pattern = Pattern.compile(reg);
    Matcher matcher = pattern.matcher(content);
    if (!matcher.find()) {
        return null;
    }
    return matcher.group(1);
}

public static void main(String[] args) {
    String result = exec(" adb shell ip addr show wlan0");
    String ip = grabIP(result);
    System.out.println(ip);
}
1、获取手机系统信息( CPU,厂商名称等)
adb shell "cat /system/build.prop | grep "product""

2、获取手机系统版本
adb shell getprop ro.build.version.release

3、获取手机系统api版本
adb shell getprop ro.build.version.sdk

4、获取手机设备型号
adb -d shell getprop ro.product.model

5、获取手机厂商名称
adb -d shell getprop ro.product.brand

6、获取手机的序列号
有两种方式
    6.1 adb get-serialno

    6.2 adb shell getprop ro.serialno


 

7、获取手机的IMEI,有三种方式,由于手机和系统的限制,不一定获取到

    7.1 adb shell dumpsys iphonesubinfo    其中Device ID即为IMEI号

    7.2 adb shell getprop gsm.baseband.imei

    7.3 service call iphonesubinfo 1     此种方式,需要自己处理获取的信息得到

8、获取手机mac地址

adb shell cat /sys/class/net/wlan0/address

9、获取手机内存信息
adb shell cat /proc/meminfo

10、获取手机存储信息
        adb shell df

    获取手机内部存储信息:

    魅族手机: adb shell df /mnt/shell/emulated

    其他: adb shell df /data

    获取sdcard存储信息:

    adb shell df /storage/sdcard

11、获取手机分辨率
adb shell "dumpsys window | grep mUnrestrictedScreen"

12、获取手机物理密度
adb shell wm density

13、输入一个字符串,只支持英文数字和部分符号
当需要为一个控件输入内容时,需要先保证输入框正片处于焦点
adb shell input text


14、判断当前屏幕状态
adb shell dumpsys activty | grep -i mSleeping





15、获取手机cpu信息
    15.1 adb shell top -s cpu
    15.2 adb shell dumpsys cpuinfo




16、发送一个广播,使用-a来指定Action,-d指定数据
adb shell am broadcast

adb shell am broadcast -a 'com.icechao.broadcast'

17、强制停止一个应用
adb shell am am force-stop packageName






18、打印logcat
adb logcat -v time -d


19、文件系统的磁盘空间占用情况
adb shell df


20、手机截屏
adb shell /system/bin/screencap -p /sdcard/screenshot.png


21、录制屏幕
adb shell screenrecord --time-limit 10 /sdcard/demo.mp4


22、获取手机ip地址(我试了试不行)
adb shell getprop dhcp.wlan0.ipaddress


23、获取手机Cpu最小频率
cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq


24、获取手机Cpu最大频率
cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq


25、获取手机cpu核数
cat /sys/devices/system/cpu/cpu0/cpufreq/kernel_max


26、获取手机屏幕策略,windows中需要不能使用grep命令筛选信息
adb shell dumpsys window policy | grep mScreenOnFully


27、判断当前手机是否是锁屏状态
adb shell dumpsys window policy | grep mShowingLockscreen


28、打开手机wifi,实测部份三星手机不支持些方法
adb shell svc wifi enable/disable

29、能过monkey植入事件为app进行压力测试
adb shell monkey



30、使用adb shell curl命令,可以让设备发送GET或POST请求,可以返回响应正文。
    30.1
        chcp 65001
        adb -s 72593cd4 shell curl -s  'https://ip.cn/api/index?ip=^&type=0'
    30.2 设置多个协议头,并设置超时时间15秒:
        adb -s 72593cd4 shell curl -s -H 'Accept: */*' -H 'Referer: http://xx.nstool.netease.com/' -H 'Accept-Language: zh-cn' --connect-timeout 15 'https://ip.cn/api/index?ip=^&type=0'
    30.3 以POST方式访问
        adb -s 72593cd4 shell curl -s 'https://ip.cn/api/index?ip=^&type=0' -d 'postData'
        


20 将offline/unauthorized状态设备重新连接

adb reconnect offline 

21 查看应用列表

查看应用列表的基本命令格式是:

adb shell pm list packages [-f] [-d] [-e] [-s] [-3] [-i] [-u] [--user USER_ID] [FILTER]

 adb shell pm list packages 后面可以跟一些可选参数进行过滤查看不同的列表,可用参数及含义如下:

参数 显示列表
所有应用
-f 显示应用关联的 apk 文件
-d 只显示 disabled 的应用
-e 只显示 enabled 的应用
-s 只显示系统应用
-3 只显示第三方应用
-i 显示应用的 installer
-u 包含已卸载应用
包名包含  字符串

查看所有应用

adb shell pm list packages

查看系统应用

adb shell pm list packages -s

查看第三方应用

adb shell pm list packages -3

包名包含某字符串的应用

比如要查看包名包含字符串 huawei 的应用列表,命令:

adb shell pm list packages huawei

22 安装应用

安装应用的基本命令格式是:

adb install [-l] [-r] [-t] [-s] [-d] [-g] 

adb install 后面可以跟一些可选参数来控制安装 APK 的行为,可用参数及含义如下: 

参数 含义
-l 将应用安装到保护目录 /mnt/asec
-r 允许覆盖安装
-t 允许安装 AndroidManifest.xml 里 application 指定 android:testOnly=“true” 的应用
-s 将应用安装到 sdcard
-d 允许降级覆盖安装
-g 授予所有运行时权限

运行命令后可以看到输出内容,包含安装进度和状态,安装状态如下:

  • Success:代表安装成功。
  • Failure:代表安装失败。APK 安装失败的情况有很多,Failure状态之后有安装失败输出代码。

adb install 实际是分三步完成:

  1. push apk 文件到 /data/local/tmp
  2. 调用 pm install 安装。
  3. 删除 /data/local/tmp 下的对应 apk 文件。

卸载应用

卸载应用的基本命令格式是:

adb uninstall [-k]  //  表示应用的包名,-k 参数可选,表示卸载应用但保留数据和缓存目录。

 清除应用数据与缓存

adb shell pm clear  //  表示应用名包,这条命令的效果相当于在设置里的应用信息界面点击了「清除缓存」和「清除数据」。

查看前台 Activity

adb shell dumpsys activity activities | grep mFocusedActivity

查看正在运行的 Services

参数不是必须的,指定 表示查看与某个包名相关的 Services,不指定表示查看所有 Services。
不一定要给出完整的包名,可以只给一部分,那么所给包名相关的 Services 都会列出来。

adb shell dumpsys activity services []

查看应用详细信息

adb shell dumpsys package 

查看应用安装路径

adb shell pm path 

23 与应用交互

与应用交互主要是使用 am 命令,常用的 如下:

command                                                  用途
start [options]                   启动 指定的 Activity
startservice [options]        启动 指定的 Service
broadcast [options]          发送 指定的广播
force-stop          停止 相关的进程

 

 参数很灵活,和写 Android 程序时代码里的 Intent 相对应。
用于决定 intent 对象的选项如下:

参数    含义
-a     指定 action,比如 android.intent.action.VIEW
-c     指定 category,比如 android.intent.category.APP_CONTACTS
-n     指定完整 component 名,用于明确指定启动哪个 Activity
 

 里还能带数据,就像写代码时的 Bundle 一样:

参数    含义
--esn     null 值(只有 key 名)
`-e    –es `
--ez     boolean 值
--ei                integer 值
--el             long 值
--ef             float 值
--eu               URI
--ecn                component name
--eia [, --ela [,  

启动应用/ 调起 Activity

adb shell am start [options] 

例如:

adb shell am start -a android.settings.SETTINGS                   # 打开系统设置页面
adb shell am start -a android.intent.action.DIAL -d tel:10086     # 打开拨号页面
adb shell am start -n com.android.mms/.ui.ConversationList        # 打开短信会话列表
 

options 是一些改变其行为的选项,支持的可选参数及含义如下:

选项    含义
-D    启用调试
-W    等待启动完成
–start-profiler file    启动分析器并将结果发送到 file
-P file    类似于 --start-profiler,但当应用进入空闲状态时分析停止
-R count    重复 Activity 启动次数
-S    启动 Activity 前强行停止目标应用
–opengl-trace    启用 OpenGL 函数的跟踪
–user user_id    current
 

24 调起 Service

adb shell am startservice [options] 

一个典型的用例是如果设备上原本应该显示虚拟按键但是没有显示,可以试试这个:

adb shell am startservice -n com.android.systemui/.SystemUIService

停止 Service

adb shell am stopservice [options] 

发送广播

adb shell am broadcast [options] 

可以向所有组件广播,也可以只向指定组件广播。
例如,向所有组件广播 BOOT_COMPLETED:

adb shell am broadcast -a android.intent.action.BOOT_COMPLETED

又例如,只向 com.android.receiver.test/.BootCompletedReceiver 广播 BOOT_COMPLETED:

adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -n com.android.receiver.test/.BootCompletedReceiver

这类用法在测试的时候很实用,比如某个广播的场景很难制造,可以考虑通过这种方式来发送广播。
既能发送系统预定义的广播,也能发送自定义广播。如下是部分系统预定义广播及正常触发时机:

action    触发时机
android.net.conn.CONNECTIVITY_CHANGE    网络连接发生变化
android.intent.action.SCREEN_ON    屏幕点亮
android.intent.action.SCREEN_OFF    屏幕熄灭
android.intent.action.BATTERY_LOW    电量低,会弹出电量低提示框
android.intent.action.BATTERY_OKAY    电量恢复了
android.intent.action.BOOT_COMPLETED    设备启动完毕
android.intent.action.DEVICE_STORAGE_LOW    存储空间过低
android.intent.action.DEVICE_STORAGE_OK    存储空间恢复
android.intent.action.PACKAGE_ADDED    安装了新的应用
android.net.wifi.STATE_CHANGE    WiFi连接状态发生变化
android.net.wifi.WIFI_STATE_CHANGED    WiFi状态变为启用/关闭/正在启动/正在关闭/未知
android.intent.action.BATTERY_CHANGED    电池电量发生变化
android.intent.action.INPUT_METHOD_CHANGED    系统输入法发生变化
android.intent.action.ACTION_POWER_CONNECTED    外部电源连接
android.intent.action.ACTION_POWER_DISCONNECTED    外部电源断开连接
android.intent.action.DREAMING_STARTED    系统开始休眠
android.intent.action.DREAMING_STOPPED    系统停止休眠
android.intent.action.WALLPAPER_CHANGED    壁纸发生变化
android.intent.action.HEADSET_PLUG    插入耳机
android.intent.action.MEDIA_UNMOUNTED    卸载外部介质
android.intent.action.MEDIA_MOUNTED    挂载外部介质
android.os.action.POWER_SAVE_MODE_CHANGED    省电模式开启

强制停止应用

adb shell am force-stop 

收紧内存

参数说明:

  • pid: 进程 ID
  • level:HIDDEN、RUNNING_MODERATE、BACKGROUND、RUNNING_LOW、MODERATE、RUNNING_CRITICAL、COMPLETE
adb shell am send-trim-memory   

25、剪切板

github

点击下载.APK

adb shell am startservice ca.zgrs.clipper/.ClipboardService

adb shell am broadcast -a clipper.set -e text “测试一波”

adb shell am broadcast -a clipper.get 

你可能感兴趣的:(Android开发,android,android,studio,java)