1. 通过包名获取apk路径:
adb shell pm path com.huanhailiuxin.jet2020
2. 通过包名获取apk版本
adb shell dumpsys package a.b.c | grep version
adb shell dumpsys package a.b.c | grep version
3. 获取当前显示的Activity:
adb shell dumpsys activity activities | findstr mCurrentFocus
D:\***>adb shell dumpsys activity activities | findstr mCurrentFocus
mCurrentFocus=Window{687e9a6 u0 android/com.android.internal.app.ResolverActivity}
android是包名
com.android.internal.app.ResolverActivity是Activity的具体路径
如果提示 findstr找不到命令,使用 grep 替代:
adb shell dumpsys activity activities | grep mCurrentFocus
adb shell dumpsys window | findstr mCurrentFocus
C:\Users\***>adb shell dumpsys window | findstr mCurrentFocus
mCurrentFocus=Window{c392414 u0 Application Error: com.huanhailiuxin.jet2020}
mCurrentFocus=Window{aec97 u0 com.android.settings/com.**.***.TargetActivity}
4. 修改手机分辨率
- adb shell dumpsys window displays
- adb shell dumpsys window visible-apps
- adb shell wm size 1080x1920
- adb shell wm density 480
- //wm size reset
- //wm density reset
5. 进程
-
查看指定进程 adb shell ps -ef | grep com.huanhailiuxin.jet2020 实例: 1|gsi_arm64:/ # ps -ef | grep 包名
UID PID PPID CPU的占用率(2%) root 6964 18315 2 10:34:39 pts/0 00:00:00 grep 包名 -
杀死指定进程
- adb shell kill 进程ID
- adb shell am force-stop 包名
-
查看指定进程oom_adj值 cat /proc/进程id/oom_adj
6. adb命令/shell命令 可以设置为具体为哪个用户执行
示例:
adb install --user 10 test.apk
adb shell
settings put --user 10 global device_provisioned 0
settings put --user 10 secure user_setup_complete 0
pm enable --user 10 **/**.activity.Activity1
pm enable --user 10 **/**.activity.Activity2
sync
exit
7. logcat
- 查看指定TAG的log
只指定TAG输出 : 只看TAG为HelloTag
adb shell
logcat -s HelloTag
2. 过滤包含指定内容的log
只看包含 HelloAdb 的log
adb shell
logcat | grep "HelloAdb"
3. 将log保存到指定文件
adb logcat *** > 文件路径 注:不要执行 adb shell, 否则提示: /system/bin/sh: can't create ***testlog.txt: Read-only file system
adb logcat -s KeyguardStatusView > C:\Users\***\Desktop\testlog.txt
4. 只看级别 >=X 的日志
adb logcat *:E 仅仅看ERROR及ERROR以上级别的日志
adb logcat *:E
- V — 明细 verbose(最低优先级)
- D — 调试 debug
- I — 信息 info
- W — 警告 warn
- E — 错误 error
- F — 严重错误 fatal
- S — 无记载 silent
- logcat 缓冲区大小设置
adb logcat -G 10M
6. logcat 缓冲区大小查看
adb logcat -g
D:\***>adb shell logcat -g
main: ring buffer is 256 KiB (253 KiB consumed), max entry is 5120 B, max payload is 4068 B
system: ring buffer is 256 KiB (253 KiB consumed), max entry is 5120 B, max payload is 4068 B
crash: ring buffer is 256 KiB (0 B consumed), max entry is 5120 B, max payload is 4068 B
kernel: ring buffer is 256 KiB (0 B consumed), max entry is 5120 B, max payload is 4068 B
D:***>adb shell logcat -G 20M
D:***>adb shell logcat -g
main: ring buffer is 20 MiB (256 KiB consumed), max entry is 5120 B, max payload is 4068 B
system: ring buffer is 20 MiB (236 KiB consumed), max entry is 5120 B, max payload is 4068 B
crash: ring buffer is 20 MiB (0 B consumed), max entry is 5120 B, max payload is 4068 B
kernel: ring buffer is 20 MiB (0 B consumed), max entry is 5120 B, max payload is 4068 B
8. install
adb install -r -d -t C:\Users\***\Desktop\demo.apk
- adb install -r 替换已存在的应用程序,也就是说强制安装
- adb install -l 锁定该应用程序
- adb install -t 允许测试包
- adb install -s 把应用程序安装到sd卡上
- adb install -d 允许进行将见状,也就是安装的比手机上带的版本低
- adb install -g 为应用程序授予所有运行时的权限
9. 内存
- adb shell dumpsys meminfo 包名/进程id
- Pss Total 指占用了真实的物理内存的空间.一般用这个值表示APP实际内存占用.
- Objects是统计App内部组件对象个数,其中Views、ViewRootImpl以及Activities个数,在Activity onDestroy后应该都会回收清零,如果onDestroy调用后这几个对象个数没有清零,就可能发生了内存泄漏。
- android程序内存被分为2部分:native和dalvik,dalvik就是java堆,普通java对象是在java堆分配,而bitmap是直接在native上分配,对于内存的限制是 native+dalvik 不能超过最大限制。
- Native Heap:Native代码分配的内存,虚拟机和Android框架分配内存。
- Dalvik Heap:Java对象分配的占据内存
- Dalvik Other:类数据结构和索引占据内存
- Stack:栈内存
- Ashmem:不以dalvik- 开头的内存区域,匿名共享内存用来提供共享内存通过分配一个多个进程可以共享的带名称的内存块。匿名共享内存(Anonymous Shared Memory-Ashmem。Android匿名共享内存是基于Linux共享内存的,都是在tmpfs文件系统上新建文件,并将其映射到不同的进程空间,从而达到共享内存的目的,只是,Android在Linux的基础上进行了改造,并借助Binder+fd文件描述符实现了共享内存的传递。
- Other dev:内部driver占用的内存
- .so mmap: C库代码占用的内存
- .jar mmap: java文件代码占用的内存
- .apk mmap: apk代码占用的内存
- .ttf mmap: ttf文件代码占用的内存
- .dex mmap: dex文件代码占用内存。类函数的代码和常量占用的内存,dex mmap是映射classex.dex文件,Dalvik虚拟机从dex文件加载类信息和字符串常量等。Dex文件有索引区和Data区
- Other mmap: 其它文件占用的内存
- App Summary下:
- Java Heap: java内存占用
- Native Heap: native内存占用
- Code: 代码段内存占用
- Stack: 栈内存占用
- Graphics: Graphics/GL内存占用
- Private Other: 其他私有数据内存占用
- System: 共享内存的PSS占用
Pss Private Private SwapPss Rss Heap Heap Heap
Total Dirty Clean Dirty Total Size Alloc Free
------ ------ ------ ------ ------ ------ ------ ------
Native Heap 24324 24288 0 36 25228 36056 26521 5482
Dalvik Heap 6184 6080 0 34 6944 29386 4810 24576
Dalvik Other 8625 3148 0 0 14532
Stack 1596 1596 0 0 1604
Ashmem 6 0 0 0 24
Other dev 34 4 28 0 420
.so mmap 9856 284 2852 41 60120
.jar mmap 4458 0 1408 0 33012
.apk mmap 1618 0 276 0 21048
.ttf mmap 52 0 0 0 292
.dex mmap 14180 14048 44 0 14440
.oat mmap 128 0 0 0 2760
.art mmap 9311 8748 28 50 18064
Other mmap 851 4 0 0 5552
EGL mtrack 6043 6043 0 0 6043
GL mtrack 18592 18592 0 0 18592
Unknown 548 516 0 4 1088
TOTAL 106571 83351 4636 165 106571 65442 31331 30058
App Summary
Pss(KB) Rss(KB)
------ ------
Java Heap: 14856 25008
Native Heap: 24288 25228
Code: 18912 142656
Stack: 1596 1604
Graphics: 24635 24635
Private Other: 3700
System: 18584
Unknown: 10632
TOTAL PSS: 106571 TOTAL RSS: 229763 TOTAL SWAP PSS: 165
Objects
Views: 17 ViewRootImpl: 1
AppContexts: 6 Activities: 1
Assets: 22 AssetManagers: 0
Local Binders: 1137 Proxy Binders: 39
Parcel memory: 14 Parcel count: 59
Death Recipients: 0 OpenSSL Sockets: 0
WebViews: 0
10. adb shell dumpsys ***
- 内存 adb shell dumpsys meminfo
- CPU adb shell dumpsys cpuinfo
- 帧率 adb shell dumpsys gfxinfo
- 显示 adb shell dumpsys display
- 电源 adb shell dumpsys power
- 电池状态 adb shell dumpsys batterystats
- 电池 adb shell dumpsys battery
- 闹钟 adb shell dumpsys alarm
- 位置 adb shell dumpsys location
11. 启动和关闭ADB服务
每次打开Android Studio,都执行一下2个命令,可以使手机连接更稳定
- adb kill-server
- adb start-server
12. 启动特定Activity
adb shell am start -n com.jet.app1/com.jet.app1.activity.Func1Activity
13.获取系统 Android版本号及API级别
- adb shell getprop ro.build.version.release
- adb shell getprop ro.build.version.sdk
***> adb shell getprop ro.build.version.release
11
***> adb shell getprop ro.build.version.sdk
30
14. 读写Settings值
- 读Settings值
adb shell settings get secure ***
adb shell settings get global ***
adb shell settings get system ***
- 写Settings值
adb shell settings put secure key1 value1
adb shell settings put global key1 value1
adb shell settings put system key1 value1
15. android权限
- 查看某APP的权限
adb shell dumpsys package [包名] | findstr permission
- declared permissions。该应用自己声明(即自定义)的权限,这里显示了权限名,权限等级,以及在什么时候获取该权限(INSTALLED 表示安装的时候就会授予该权限)。
- requested permissions。这里列出的是AndroidManifest.xml文件中所有request的权限,可以看出这里面包含了动态申请的权限和安装时申请的权限。
- install permissions:安装的时候就赋予的权限。可以和requested permissions对比一下,这里面少了一"android.permission.CAMERA"权限,该权限为动态申请权限。该列表中还展示了权限对应的授予情况,如granted所示,true表示已经被授予了权限。
- runtime permissions。这里显示的是运行时才需要申请的权限,即dangerous permission。
- 查看权限的声明者和使用者
adb shell dumpsys package permission <权限名>
3. 移除指定权限
adb shell pm revoke [packageName] [permissionName]
4. 授予指定权限
adb shell pm grant [packageName] [permissionName]
16. 截屏
adb shell /system/bin/screencap -p /sdcard/1.png
17. 使用wifi连接设备调试
- 首先用USB连接设备,获取设备IP,其中wlan0下的inet addr即为当前设备的IP地址
adb shell "ifconfig"
PS C:\Users\***> adb shell "ifconfig"
tcam1 *****
tcam3 *****
wlan0 Link encap:Ethernet HWaddr b2:1a:cb:35:97:44 Driver cnss_pci
inet addr:10.88.153.167 Bcast:10.88.153.255 Mask:255.255.254.0
inet6 addr: fe80::b01a:cbff:fe35:9744/64 Scope: Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:215288 errors:0 dropped:0 overruns:0 frame:0
TX packets:120440 errors:0 dropped:39 overruns:0 carrier:0
collisions:0 txqueuelen:3000
RX bytes:39134433 TX bytes:33189364
- 断开USB连接,直接在WIFI下连接设备
adb connect 10.88.153.167