Android Adb 相关指令

记录Android开发中,我常用到的adb指令。
备注:grep默认是Linux系统指令,在Windows系统下,可以使用findstr替代。

Activity 启动时间

SplashActivity的目录结构:com.exp.ble.activity
项目包名:com.exp.ble
在命令行中输入:
adb shell am start -W com.exp.ble/.activity.SplashActivity

F:\CompanyProject\AppBle>adb shell am start -W com.exp.ble/.activity.SplashActivity
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.exp.ble/.activity.SplashActivity }
Status: ok
Activity: com.exp.ble/.activity.SplashActivity
ThisTime: 667
TotalTime: 667
WaitTime: 692
Complete

Android应用启动时间参数详解:ThisTime、TotalTime与WaitTime
​​1. ThisTime​​
​​定义​​:表示 ​​最后一个启动的Activity的初始化耗时​​。例如,若应用启动流程中存在多个Activity(如先启动透明Activity再跳转主界面),ThisTime仅记录最终展示给用户的Activity(主界面)的启动时间。
​​典型场景​​:

冷启动时只有一个Activity(如Splash页):ThisTime与TotalTime相等。
热启动或存在多Activity跳转链时:ThisTime仅统计最后一个Activity的耗时。
​​优化方向​​:减少主界面onCreate()、onResume()中的耗时操作(如布局渲染、数据加载)
​​2. TotalTime​​
​​定义​​:表示 ​​应用自身从进程创建到首屏完全渲染的总耗时​​,包括以下阶段:

​​进程创建​​:系统分配内存并初始化进程。
​​Application初始化​​:执行Application.onCreate()中的代码(如SDK初始化)。
​​Activity生命周期​​:首个Activity的onCreate()到onWindowFocusChanged()完成。

​​3. WaitTime​​
​​定义​​:表示 ​​系统处理启动请求的总耗时​​,涵盖以下部分:

前一应用(如桌面)的onPause()耗时。
系统调度资源(如AMS)的时间。
应用自身的TotalTime。

Adb 串口授权

原因是该串口设备没有权限,通过adb shell 使用root权限给该设备添加可读可写权限后,打开串口成功,我输入的命令如下:

1. adb shell
2. su
3. chmod 666 /dev/ttyS1
4. setenforce 0

adb 操作sqlite3

1、adb connect ip    //首先连上Android设备;
2、adb shell   //进入指令;
3、cd /data/data/{package name}/databases;   //进入数据库;
4、sqlite3  {database name}     //打开某个数据库,既可以使用sql语句对该数据库内的表进行相关操作。

adb 导出sqlite3数据库

数据库名称:acd.db;
包名:com.exp.app
1、导出sqlite3到Android设备sd卡:

adb shell "run-as com.exp.app cat /data/data/com.exp.app/databases/lcd.db > /sdcard/acd.db"

2、将sd卡上的数据库导出到电脑,默认路径为cmd当前路径:

adb pull /sdcard/acd.db

通过无线连接ADB:

  • 插上手机输入命令:adb tcpip 5555
  • 输入连接命令:adb connect 172.16.7.204:5555

以root方式执行shell命令:

  • 先执行adb root

Read-only file system时以可读写方式执行:

  • adb remount

如果结果太长可以保存到文件中,如:

  • >新建或覆盖文件保存:adb shell pm list packages > installed_package.txt
  • >>往文件中追加结果: adb shell pm list packages >> installed_package.txt

设备连接操作:

adb关闭:

adb kill-server

adb开启:

adb start-server

adb设备查看:

adb devices

adb查看手机网络

adb shell ifconfig wlan0
adb shell netcfg

从电脑上传文件到手机上:

adb push /Users/ch/apk/BBox.apk /sdcard/BBox.apk

从手机上发送文件到电脑上:

adb pull /sdcard/xbd/BBox.apk /Users/ch/apk/BBox.apk

获取系统参数:

获取IMEI:

adb shell dumpsys iphonesubinfo

获取手机品牌:

adb shell getprop ro.product.brand

获取手机型号:

adb shell getprop ro.product.model

获取手机系统SDK版本号:

adb shell getprop ro.build.version.sdk

获取Android系统版本号:

adb shell getprop ro.build.version.release

获取手机分辨率:

adb shell wm size

修改手机分辨率:

adb shell wm size 1080*1920

获取手机dpi:

adb shell wm density 

修改手机dpi:

adb shell wm density 480

获取手机cpu架构:

adb shell getprop ro.product.cpu.abilist(Android5.0系统之后)    
adb shell getprop ro.product.cpu.abi(Android5.0系统之前)

系统设置相关:

获取屏幕休眠时间:

adb shell settings get system screen_off_timeout

查看默认短信应用:

adb shell settings get secure sms_default_application

修改默认短信应用:

adb shell settings put secure sms_default_application com.carlos.sms

获取屏幕熄灭状态:

adb shell "dumpsys window policy | grep mScreenOnFully"
adb shell dumpsys power | findstr "Display Power:state="

性能相关:

冷热启动耗时时间:

adb shell am start      
    -W: wait for launch to complete    
    -S: force stop the target app before starting the activity 

adb shell am start -W com.UCMobile/com.uc.browser.InnerUCMobile
在AS中可过滤displayed输出的启动日志

应用cpu占用率:

adb shell dumpsys cpuinfo com.exp.box

应用memory:

adb shell dumpsys meminfo -a com.exp.box
adb shell dumpsys meminfo -d com.exp.box

通过包名获取pid:

adb shell "ps | grep com.aspire.agent"

得到结果第二列的值为pid

通过pid获取uid:

adb shell cat /proc/6094/status

通过uid获取上行流量:

adb shell "cat /proc/uid_stat/10189/tcp_snd"

通过uid获取下行流量:

adb shell "cat /proc/uid_stat/11110/tcp_rcv"

导出crash日志:

adb shell dumpsys dropbox --print >>crashlog_$(date +%Y%m%d%H%M).txt

查看meminfo内容

adb shell cat /proc/meminfo

应用相关:

显示已安装应用:

adb shell pm list packages [-com.carlos.bbox]

清除应用数据:

adb shell pm clear com.carlos.bbox

卸载应用:

adb uninstall com.carlos.bbox

卸载系统应用

adb shell pm uninstall -k --user 0 com.carlos.test

显式安装应用:

adb install (-r强制安装) /Users/ch/apk/Box.apk

隐式安装应用:

adb shell pm install (-r) /sdcard/Box.apk

无弹框安装应用:

adb install-multiple -r /Users/ch/apk/Box.apk

发送广播:

adb shell am broadcast -a com.cs.box -e port 8888

启动服务:

adb shell am startservice com.cs.box/com.cs.box.MyService 

启动应用:

adb shell am start -n com.cs.box/.MainActivity

停止应用:

adb shell am froce-stop com.cs.bbox

查看顶层Activity类名:

  • 8.0以下命令
adb shell dumpsys activity | grep "mFocusedActivity"
  • 8.0以上命令
adb shell dumpsys activity | grep "mResumedActivity"

查看当前界面的信息

adb shell dumpsys window | grep mCurrentFocus

Activity信息和View Hierarchy:

adb shell dumpsys activity top  

查看是否已安装该应用

adb sehll pm list packages | grep "com.carlos.test"

查看已经安装的包名对应的apk路径:

adb shell pm path com.carlos.grabredenvelope

导出已安装的APK:

adb pull /data/app/com.example.carlos.myapplication–y9EFnP-__j34XhQxIwXvA==/base.apk(找到的apk路径)

当前栈顶的Activity信息输出到文件

adb shell dumpsys activity top > info.txt

Monkey相关:

点击应用1000次:

adb shell monkey -p com.codemao.dan -v 1000

每隔1s点一次:

adb shell monkey -p com.codemao.dan --throttle 1000 20

操控手机相关:

点击坐标点:

adb shell input tap 250 250

输入文本

adb shell input text hello world

截图:

adb shell screencap -p /sdcard/a.png

录屏

adb shell screenrecord /sdcard/test.mp4

调试相关

日志

输出日志

adb logcat -v time > log.txt

清空日志

adb logcat -c

TV抓包

Charles抓包,针对Lancher未提供设置网络代理和打开浏览器功能,使用adb来打开原生设置网络代理安装证书

  • 启动设置
adb shell am start com.android.settings/com.android.settings.Settings
  • 连接网络,输入代理,TV按键操作打字不方便,可以用adb,如:
adb shell input text 172.17.5.166
  • 代理设置好后打开浏览器
adb shell am start com.android.browser/com.android.browser.BrowserActivity
  • 输入chls.pro/ssl安装证书
adb shell input text chls.pro/ssl

找到了更加快捷的做法,直接adb设置代理,如:

adb shell settings put global http_proxy 127.0.0.1:8888

Charles清除代理三种方式

TV抓包

模拟按键上下

adb shell input keyevent KEYCODE_DPAD_UP
adb shell input keyevent KEYCODE_DPAD_DOWN

开发者选项

打开/关闭布局边界
adb shell setprop debug.layout true 
adb shell setprop debug.layout false 

View Server

查看是否开启命令:

adb shell service call window 3

返回值是:Result: Parcel(00000000 00000000 ‘…’)" 说明View Server处于关闭状态

返回值是:Result: Parcel(00000000 00000001 ‘…’)" 说明View Server处于开启状态

打开View Server:

adb shell service call window 1 i32 4939

关闭View Server:

adb shell service call window 2 i32 4939

Android工程模式拨号指令

进入工程模式选项

  • ##2846579##
  • ##6484##
  • ##6130##
  • ##4636##
  • ##14789632##
  • ##1673495##

查看设备信息

查询手机串号(IMEI)

*#06#

其他

首先进入操作系统的拨号界面,输入指令码即可快速进入Android的工程测试模式。

常见机型进入工程模式的指令码是:

  • 华为:##121314##
  • 努比亚:*#8604#。
  • 魅族:##3646633##
  • 小米:##6484####64663##
  • 三星:#0#、HTC:##3424##
  • 联想:####1111#。
  • 中兴:9833640#。
  • 索尼:##7378423##
  • vivo:*#558#。
  • OPPO:*#36446337#。
  • 一加:*#36446337#。
  • 乐视:##3646633##
  • ZUK:##1111##
  • Moto:##372##
  • LG:3485#*手机型号#。
  • 酷派:*20060606#。
  • 360手机:*20121220#。

各种手机日志开启方法

  • vivo:拨号键盘输入*##112##*,Log开关——开
  • 华为:拨号键盘输入*##2846579##*,后台设置——AP LOG设置——打开

其他

列举可以被调试的pid(进程id)

adb jdwp

  • android之JDWP调试使用

其他问题

adb pull data/data下文件失败

在某些手机上进入到package文件夹下执行ls命令会出现以下问题,参考链接:opendir failed, Permission denied

opendir failed, Permission denied

此时,可先run-as your-package命令,如

run-as com.carlos.test

adb pull data/anr失败

 remote open failed: Permission denied

可用adb bugreport命令在当前路径下生成压缩包分析,参考链接:调试系列2:bugreport实战篇

adb端口占用

  • 然后查找5037端口:lsof -i tcp:5037
  • .杀掉这个进程:kill 1019

1.win+r cmd进入命令行
2.cd 进入[sdk]/platform-tools目录下
3.执行下面命令行,复制xxx.db到F:/dest
adb pull /data/data/[package name]/xxx.db F:\dest
4.是的,这一步正常来说就要报错了"failed to copy xxx.db to F:\dest\dest.db : Permission denied"
原因是权限不够
5.只能用shell命令进行系统里给xxx.db增加读权限了,执行下面命令
adb shell
su
cd data/data/[package name]/databases
chmod 664 xxx.db
ctrl+c
6.再次执行步骤3即可
不需要adb shell进入,直接使用下面的命令
adb pull /data/data/com.kdthe.app_multimediaalarm/databases F:\Sqlite

1、获取手机系统信息( CPU,厂商名称等)
adb shell "cat /system/build.prop | grep “product”"1
2、获取手机系统版本
adb shell getprop ro.build.version.release1
3、获取手机系统api版本
adb shell getprop ro.build.version.sdk1
4、获取手机设备型号
adb -d shell getprop ro.product.model1
5、获取手机厂商名称
adb -d shell getprop ro.product.brand1
6、获取手机的序列号
有两种方式
1、 adb get-serialno1
2、 adb shell getprop ro.serialno1
7、获取手机的IMEI
有三种方式,由于手机和系统的限制,不一定获取到
1、 adb shell dumpsys iphonesubinfo1
其中Device ID即为IMEI号
2、 adb shell getprop gsm.baseband.imei1
3、 service call iphonesubinfo 1 1
此种方式,需要自己处理获取的信息得到
8、获取手机mac地址

adb shell cat /sys/class/net/wlan0/address12
9、获取手机内存信息
adb shell cat /proc/meminfo1
10、获取手机存储信息
adb shell df1
获取手机内部存储信息:
魅族手机: adb shell df /mnt/shell/emulated1
其他: adb shell df /data1
获取sdcard存储信息:
adb shell df /storage/sdcard1
11、获取手机分辨率
adb shell "dumpsys window | grep mUnrestrictedScreen"1
12、获取手机物理密度
adb shell wm density

你可能感兴趣的:(android,adb)