抓取系统log 1 手机拨号界面输入: '*#*# 284 #*#*' #小米手机支持
系统会自动提示:“正在生成bug报告,大概需要1分钟”,文件再sdcard下。包含bugreport内容
错误报告获取 1 adb bugreport <parh> #导出到指定路径
导出后是一个zip文件,包含data/anr信息
获取设备信息 查询手机发货地址 1 adb shell getprop ro.hw.country #查询手机发货地址
查询CPU位数 1 adb shell getprop ro.product.cpu.abi #查询CPU是32位还是64位
查询EMUI版本 1 adb shell getprop ro.build.version.emui #查询EMUI版本
查询设备制造商 1 adb shell getprop ro.product.manufacturer #查询设备制造商
查询手机品牌 1 adb shell getprop ro.product.brand #查询手机品牌
查询手机内部代号 1 adb shell getprop ro.product.model #查询手机内部代号
查询设备名称 1 adb shell getprop ro.product.name #查询设备名称
查询设备序列号 1 adb shell getprop ro.serialno #查询设备序列号
获取CPU序列号 1 adb shell cat /proc/cpuinfo
获取CPU核数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 adb shell cat /proc/cpuinfo processor : 0 BogoMIPS : 38.40 Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp uscat ilrcpc flagm CPU implementer : 0x41 CPU architecture: 8 CPU variant : 0x0 CPU part : 0xd4c CPU revision : 0 processor : 1 BogoMIPS : 38.40 Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp uscat ilrcpc flagm CPU implementer : 0x41 CPU architecture: 8 CPU variant : 0x0 CPU part : 0xd4c CPU revision : 0
获取应用CPU负载率 1 2 3 4 5 6 7 8 9 10 11 12 13 14 adb shell top #查看对应进程cpu负载率,除以核数。(127 / 700 = 18.1%) Tasks: 384 total, 2 running, 382 sleeping, 0 stopped, 0 zombie Mem: 10785M total, 10367M used, 418M free, 21M buffers Swap: 4095M total, 0M used, 4095M free, 3409M cached 700% cpu 153%user 3%nice 131%sys 357%idle 32%iow 16%irq 9%sirq 0%host PID USER PR NI VIRT RES SHR S[%CPU] %MEM TIME+ ARGS 7443 u10_a94 20 0 15G 188M 84M S 127 1.7 77:34.03 com.car.guard.sentry 3712 u10_system 20 0 15G 184M 52M S 37.0 1.7 37:00.36 com.xiao.wakeupservice 284 logd 30 10 10G 15M 3.3M S 20.3 0.1 13:28.24 logd 864 cameraserver 20 0 11G 28M 24M S 11.6 0.2 7:09.09 cameraserver 1205 u10_a43 20 0 16G 395M 295M S 8.6 3.6 9:09.33 com.car.map
获取android_id 1 adb shell settings get secure android_id
查询Android系统版本 1 adb shell getprop ro.build.version.release #查询手机Android系统版本
查询设备分辨率 1 adb shell dumpsys window displays
查看设备屏幕密度
查看显示屏参数 1 2 3 4 5 6 adb shell dumpsys window displays WINDOW MANAGER DISPLAY CONTENTS (dumpsys window displays) Display: mDisplayId=0 init=1080x1920 420dpi cur=1080x1920 app=1080x1794 rng=1080x1017-1810x1731 deferred=false layoutNeeded=false
其中 mDisplayId
为 显示屏编号,init
是初始分辨率和屏幕密度,app
的高度比 init
里的要小,表示屏幕底部有虚拟按键,高度为 1920 - 1794 = 126px 合 42dp。
查看UI绘制的各个层级信息 1 adb shell dumpsys SurfaceFlinger
显示wifi信息
磁盘相关信息 1 adb shell dumpsys diskstats
电池相关信息 1 adb shell dumpsys battery
显示accounts信息: 1 adb shell dumpsys account
SELinux运行模式切换 SELinux是Security Enhanced Linux的缩写,是安全强化的Linux,它是由美国国家安全局 (NSA) 开发的,整合到Linux核心的一个模块,是对于强制访问控制(MAC)的实现,是 Linux历史上最杰出的新安全子系统,提供了比传统的UNIX权限更好的访问控制。在SELinux的访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。
java.io.FileNotFoundException: /data/user/10/[package]/files/Movies/localvideo.mp4: open failed: EACCES (Permission denied)
1 2 3 4 5 # 进入adb shell下,修改为宽容模式,解决权限问题 adb shell setenforce 0 #转成 Permissive 宽容模式 adb shell setenforce 1 #转成 Enforcing 强制模式 adb shell getenforce #获取当前模式
adb切换屏幕方向 1 2 adb shell settings put system accelerometer_rotation 0 adb shell settings put system user_rotation 1 # 1 / 3
常用命令 显示当前栈顶Activity信息 1 adb shell dumpsys activity top
显示当前Activity调用栈信息 1 2 3 adb shell dumpsys activity activities | grep '* ActivityRecord{' adb shell dumpsys window | grep mCurrentFocus
当前与用户交互的activity 1 2 3 4 5 # 方法一 adb shell dumpsys activity activities | sed -En -e '/Running activities/,/Run #0/p' # 方法二 adb shell dumpsys activity | grep -i run
显示已安装应用列表 1 adb shell pm list package | grep live
显示包详情信息 1 adb shell dumpsys package <packagename> #adb shell dumpsys package com.brooks.live
显示APK版本信息 1 2 3 4 5 6 7 8 9 10 11 # 已安装情况下 adb shell dumpsys package com.brooks.live | grep version versionCode=1000004 minSdk=30 targetSdk=31 versionName=1.0.4 signatures=PackageSignatures{85fc893 version:2, signatures:[b4addb29], past signatures:[]} # 未安装情况下 aapt dump badging live.apk
显示app内部目录 1 2 3 4 5 6 7 8 9 10 11 adb shell run-as <package> ls app_libs app_textures app_webview cache databases files lib lib-main shared_prefs
文件导入导出 1 2 3 4 5 adb push [path] [device path] #导入 adb pull [device path] [path] #导出 # adb push ~/work/test.log /sdcard # adb pull /sdcard/tracker.txt ~/work
Monkey 压力测试 1 2 3 4 adb shell monkey -p <packagename> -s 200 --throttle 50 --monitor-native-crashes -v -v 5000 adb shell monkey -p <packagename> -s 500 --ignore-crashes --ignore-timeouts --monitor-native-crashes -v -v 10000 > ./java_monkey_log.txt
生成签名 1 2 # cmd:生成签名: keytool -genkey -alias android.keystore -keyalg RSA -validity 20000 -keystore android.keystore
标准hprof-conv文件转换 1 2 # Android studio 转换 hprof-conv文件 hprof-conv.exe com.brooks.car.hprof convert.hprof
设备总内存获取 内存不足时:会出现异常,卡顿、触发LMK杀死应用,【IO流 读取 /proc/meminfo文件信息 第一行就是】
1 2 3 4 5 6 7 8 $ cat proc/meminfo MemTotal: 1530888 kB MemFree: 292248 kB MemAvailable: 614972 kB Buffers: 4192 kB Cached: 368056 kB SwapCached: 0 kB Active: 885152 kB
获取应用内存占用 1 2 3 4 5 6 7 adb shell procrank #查看PPS数值 PID Vss Rss Pss Uss Swap PSwap USwap ZSwap cmdline 1205 17113044K 407852K 294355K 288540K 0K 0K 0K 0K com.car.map 790 18023492K 362496K 210291K 189340K 0K 0K 0K 0K system_server 3712 15599836K 192076K 105658K 103276K 0K 0K 0K 0K com.iv.wakeupservice 7443 16020644K 186840K 89517K 83484K 0K 0K 0K 0K com.car.guard.sentry
Dvm最大可用内存: 1 adb shell getprop | grep dalvik.vm.heapsize
单个程序限制最大可用内存: 1 adb shell getprop|grep heapgrowthlimit
强制关闭一个应用程序: 1 2 3 adb shell ps -ef | grep <packagename> #查看应用进程 adb shell am force-stop <packagename> #杀死应用进程
查看占用内存前6的app
截屏命令: 1 2 3 adb shell screencap -p /sdcard/screen.png adb pull /sdcard/screen.png adb shell rm /sdcard/screen.png
输入文本 在焦点处于某文本框时,可以通过 input
命令来输入文本。
1 adb shell input text hello #hello会出现在文本框中
获取指定App启动耗时 1、查看Logcat
在Android Studio Logcat中过滤关键字“Displayed” ,可以看到对应的冷启动耗时日志。
2、adb shell
1 2 3 4 5 6 7 8 9 adb shell am start -W [packageName]/[MainActivity] # ThisTime 最后一个Activity启动耗时。 # TotalTime 所有Activity启动耗时。 # WaitTime AMS启动Activity的总耗时。
一般来说,只需查看得到的TotalTime ,即应用的启动时间,其包括 创建进程 + Application初始化 + Activity初始化到界面显示 的过程。
获取指定App内存信息 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 adb shell dumpsys meminfo <pid> #输出指定pid的某一进程 adb shell dumpsys meminfo --package <packagename> #输出指定包名的进程,可能包含多个进程 $ adb shell dumpsys meminfo com.brooks.test Applications Memory Usage (in Kilobytes): Uptime: 68996621 Realtime: 68996621 ** MEMINFO in pid 7916 [com.brooks.test] ** Pss Private Private Swap Rss Heap Heap Heap Total Dirty Clean Dirty Total Size Alloc Free ------ ------ ------ ------ ------ ------ ------ ------ Native Heap 10890 10848 0 0 14292 18160 16525 1634 Dalvik Heap 2545 2348 0 0 17612 6568 3284 3284 Dalvik Other 10825 10728 0 0 17180 ...... App Summary Pss(KB) Rss(KB) ------ ------ Java Heap: 4132 21992 Native Heap: 10848 14292 Code: 10340 118912 Stack: 552 564 Graphics: 49668 49668 Private Other: 11256 System: 7404 Unknown: 21904 [TOTAL PSS: 94200] TOTAL RSS: 227332 TOTAL SWAP (KB): 0 .....
获取指定App帧率 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 adb shell dumpsys gfxinfo <package> framestats $ adb shell dumpsys gfxinfo com.brooks.test framestats Applications Graphics Acceleration Info: Uptime: 12617763 Realtime: 12617763 ** Graphics info for pid 10930 [com.brooks.test] ** Stats since: 10906446516775ns Total frames rendered: 33 Janky frames: 5 (15.15%) ##帧率 50th percentile: 5ms 90th percentile: 22ms 95th percentile: 44ms 99th percentile: 61ms .......
修改设备分辨率 1 2 3 4 5 adb shell wm size #查看当前分辨率 adb shell wm size 1920x1280 #修改分辨率 adb shell wm density #查看dpi adb shell wm density 320 #修改dpi
修改设备时间 1 2 3 adb root adb shell date "052513302022.0" #5月25号,下午1点30分
修改日志缓存区大小 1 2 3 4 5 adb logcat -g #命令进行查看缓冲区 adb logcat -G 5M #$修改大小,临时生效 adb shell setprop persist.logd.size 5M #永久生效,需重启
修改日志缓存区大小 1 2 3 4 5 adb logcat -g #命令进行查看缓冲区 adb logcat -G 5M #$修改大小,临时生效 adb shell setprop persist.logd.size 5M #永久生效,需重启
adb Logcat 查看webview log
导出Log 1 2 3 adb logcat -s *:V > ./live.log #全量log adb logcat -s *:E > ./live.log #Error级别log adb logcat -s *:F > ./live.log #Fatal级别log
过滤Log 1 2 3 4 5 adb logcat | grep PK adb logcat | grep -i PK #忽略大小写 # 获取指定包名的log adb logcat --pid=$(adb shell pidof -s com.mi.XXX)
adb无线调试 1 2 3 4 5 6 7 8 $ adb connect <手机ip>:5555 # 如果重复以上步骤还是Offline的话,使用USB 线将设备与电脑连接。应确保连接成功(可运行 adb devices 看是否能列出该设备)。让设备在 5555 端口监听 TCP/IP 连接,PC端命令行输入: $ adb tcpip 5555 # 断开连接 adb disconnect <手机ip>:5555
adb shell prop 需要root, 设置属性值,便于调试
1 2 3 adb shell setprop propname propvalue $ adb shell setprop live.open.check false
adb 启动 启动activity 1 2 adb shell am start -n {package}/{全类名activity} adb shell am start -a { Action名称 } -d {参数}
启动浏览器 1 2 adb shell am start -n com.android.browser/com.android.browser.BrowserActivity #启动浏览器 adb shell am start -a android.intent.action.VIEW -d http://www.baidu.com #启动浏览器并打开指定网页
启动 Camera 1 adb shell am start -n com.android.camera/com.android.camera.Camera
拨打电话 1 adb shell am start -a android.intent.action.CALL -d tel:10086
启动 google map 直接定位到北京 1 adb shell am start -a android.intent.action.VIEW geo:0,0?q=beijing
启动activity通过scheme 1 adb shell am start -d autocat://findcar
关闭activity 1 2 3 4 adb shell am force-stop {package} # 如:关闭浏览器 adb shell am force-stop com.android.browser
启动service 1 2 3 4 5 6 7 adb shell am startservice -n {包名}/{包名}.{服务名} # 启动应用中一个service adb shell am startservice -n com.android.traffic/com.android.traffic.maniservice # 启动service,传入int参数 adb shell am startservice -a{action} --ei type 1
关闭service 1 2 3 adb shell am stop-service -a {action} adb shell am stop-service -n {包名}/{包名}.{服务名}
卸载应用程序: 1 2 3 4 adb uninstall{package} # 如:卸载浏览器 adb uninstall com.android.browser
发送broadcast: 1 2 3 4 5 6 7 8 adb shell am broadcast -a <广播动作> # 如:发送一个网络变化的广播 adb shell am broadcast -a android.net.conn.CONNECTIVITY_CHANGE # 静态注册,必须加-p指定包名 adb shell am broadcast -a "com.brooks.auto.status" -p com.brooks.car -e topic "brooks" adb shell am broadcast -a "com.brooks.auto.status" -p com.brooks.car --es topic "brooks"
端口转发 1 2 3 adb shell am broadcast -a NotifyServiceStop adb forward tcp:12580 tcp:10086 adb shell am broadcast -a NotifyServiceStart
1 echo 111 > a.txt (向 aa.txt写入 “111”) 只第一行用">" ,换行用">>"