adb命令大全
查看应用列表
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
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 shell pm clear
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"
adb shell pm path com.tencent.mm : 获取手机里面原版本待测试的安装包的路径。
adb shell pm path
adb shell pm clear
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
adb输入中文问题:向聚焦的文本框中输入内容,adb不支持unicode字符,只支持ASICC字符,对于UTF-8的字符是无法输入的(无法输入中文)
用法:adb shell input text "
解决方案:
github源码:https://github.com/senzhk/ADBKeyBoard
百度网盘:https://pan.baidu.com/s/1zTH4V2iwF9PZKtEu_ICz6w 提取码:tnw7
adb install com.android.adbkeyboard
adb -s udid shell ime set com.android.adbkeyboard/.AdbIME
adb -s udid shell settings put secure default_input_method
adb shell ime set com.nuance.swype.dtc/com.nuance.swype.input.IME
adb shell ime list -a
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
在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
adb shell am broadcast -a ADB_INPUT_TEXT --es msg '你好嗎? Hello?'
db shell input tap x y && db shell input tap x y
前四个数为坐标点,后面是滑动的时间duration(单位毫秒)
adb shell input swipe
adb shell input swipe
adb shell input swipe 500 1900 500 100
如果有多个设备/模拟器连接,则需要为命令指定目标设备。
参数 | 含义 |
---|---|
-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
命令:
adb -P start-server
默认端口为 5037。
无线连接(Android11 及以上)
操作步骤:
更新到最新版本的 SDK 平台工具(至少30.0.0)。
将 Android 设备与要运行 adb 的电脑连接到同一个局域网,比如连到同一个 WiFi。
在开发者选项中启用无线调试。
在询问要允许在此网络上进行无线调试吗?的对话框中,点击允许。
选择使用配对码配对设备,使用弹窗中的 IP 地址和端口号。
adb pair ipaddr:port
提示
Enter pairing code:
时输入弹窗中的配对码,成功后会显示Successfully paired to ...
。使用无线调试下的 IP 地址和端口。
adb connect ipaddr:port
确认连接状态。
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
adb install xxxx.apk
adb -s
adb -s
adb install -r 替换已存在的应用程序,也就是说强制安装
adb install -l 锁定该应用程序
adb install -t 允许测试包
adb install -s 把应用程序安装到sd卡上
adb install -d 允许进行将见状,也就是安装的比手机上带的版本低
adb install -g 为应用程序授予所有运行时的权限
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
adb shell am force-stop
// adb shell am force-stop比使用 kill -9 要方便
命令查看:
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)
ps -ef | grep baidu
pgrep baidu
pidof <进程全名> // 返回进程的pid
如果没有grep命令,可以放置一个busybox工具到手机
查看360对应的程序是否在运行: ps | busybox grep m.qihoo*
--- cmd.exe /c /bin/bash -c adb -s udid shell pkill -f io.appium.uiautomator2.server.test // 关闭appium的附加进程 ---
kill -s 9
例如:使用kill -s 9 134,就可以干掉 PID =134. PID =10608. PID =10755三个进程。(这里pid=134是父进程)
假设要查看程序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值的说明
背景
如何查看当前进程的线程数量。比如一个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使用率,等等详细信息。
有个头疼的事情,我怎么知道这些线程是哪里创建的或者触发的,比如进入某个页面后,我怎么快速定位线程的创建和调用呢,找到线程的使用者呢。如果你知道,赶紧来评论区告诉我。
如果我有方法,我会补充这个文章。这一篇属于残次品。
在/data/system/packages.xml文件中,找到你应用相关内容
使用cat /data/system/packages.xml命令得到以下数据
.....
name就是包名,codePath就是安装的路径
在调试的过程中,经常遇到需要修改系统属性值:setprop xxx.xxx.xxx,但是修改后,如果重启就没效啦。
而且如果没重启,会遇到属性值在代码中不生效,重启后,属性值又还原的矛盾;
且有时候又确实需要修改属性值后重启机器的需求,如修改了setenforce的值但是又想系统重启下重启则值会还原。
那怎么办呢?
使用下面两个命令来解决这个烦恼吧~可以打开新世界哦~
adb shell stop;
adb shell start;
使用setprop xxx.xxx.xxx后,再使用adb shell stop;adb shell start;就可以啦~
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
--------
查看android版本:
adb shell getprop ro.build.version.release
查看sdk版本:
adb shell getprop ro.build.version.sdk
显示已连接的端口:netstat -ntup
显示正监听的端口:netstat -ntupl
查询端口进程应关系cat /proc/net/tcp6
网络上已经有很多教程关于如何利用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'
adb reconnect offline
查看应用列表的基本命令格式是:
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
安装应用的基本命令格式是:
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 | 授予所有运行时权限 |
运行命令后可以看到输出内容,包含安装进度和状态,安装状态如下:
adb install
实际是分三步完成:
push apk
文件到 /data/local/tmp
。pm install
安装。/data/local/tmp
下的对应 apk 文件。卸载应用的基本命令格式是:
adb uninstall [-k] // 表示应用的包名,-k 参数可选,表示卸载应用但保留数据和缓存目录。
adb shell pm clear // 表示应用名包,这条命令的效果相当于在设置里的应用信息界面点击了「清除缓存」和「清除数据」。
adb shell dumpsys activity activities | grep mFocusedActivity
adb shell dumpsys activity services []
adb shell dumpsys package
adb shell pm path
与应用交互主要是使用 am
command 用途
start [options]
startservice [options]
broadcast [options]
force-stop
参数很灵活,和写 Android 程序时代码里的 Intent 相对应。
用于决定 intent 对象的选项如下:
参数 含义
-a
-c
-n
里还能带数据,就像写代码时的 Bundle 一样:
参数 含义
--esn
`-e –es `
--ez
--ei
--el
--ef
--eu
--ecn
--eia
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
adb shell am startservice [options]
一个典型的用例是如果设备上原本应该显示虚拟按键但是没有显示,可以试试这个:
adb shell am startservice -n com.android.systemui/.SystemUIService
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
参数说明:
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