ADB原理,常用命令汇总及示例

news2024/10/6 11:36:12

 

. ADB简介

ADB,即 Android Debug Bridge 是一种允许模拟器或已连接的 Android 设备进行通信的命令行工具,它可为各种设备操作提供便利,如安装和调试应用,并提供对 Unix shell(可用来在模拟器或连接的设备上运行各种命令)的访问。可以在Android SDK/platform-tools中找到 adb 工具或下载 ADB Kits 

二.ADB的作用和原理

ADB  Android SDK 里的一个工具, 用这个工具可以直接操作管理Android模拟器或者真实的Android设备。它的主要功能有:

  1. 在设备上运行Shell命令; 将本地APK软件安装至模拟器或Android设备;
  2. 管理设备或手机模拟器上的预定端口;
  3. 在设备或手机模拟器上复制或粘贴文件。

ADB是一个C/S架构的应用程序,由三部分组成

  1. 运行在pc端的adb client:首先,“adb”程序尝试定位主机上的ADB服务器,如果找不到ADB服务器,“adb”程序自动启动一个ADB服务器。接下来,当设备的adbd和pc端的adb server建立连接后,adb client就可以向ADB servcer发送服务请求;
  2. 运行在pc端的adb server:该组件是后台进程。它的作用在于检测USB端口感知设备的连接和拔除,以及模拟器实例的启动或停止,ADB Server还需要将adb client的请求通过usb或者tcp的方式发送到对应的adbd上;运行在设备端的常驻进程adb daemon (adbd):程序“adbd”作为一个后台进程在Android设备或模拟器系统中运行。它的作用是连接ADB服务器,并

 

且为运行在主机上的客户端提供一些服务;

 

总结来说,adb-clientadb-server发送一条指令,然后adb-server会转发给adbd,让adbd来执行指令。其中stetho-server是app启的一个Thread用来接收客户端的连接请求

三.基本用法

 3.1 命令语法

adb命令的基本语法:

adb [-d|-e|-s ]

如果只有一个设备/模拟器连接时,可以省略掉 [-d|-e|-s] 这一部分,直接使用 adb

如果有多个设备/模拟器连接,则需要为命令指定目标设备,下表是指定目标设备的命令选项:

参数

含义

-d

指定当前唯一通过 USB 连接的 Android 设备为命令目标

-e

指定当前唯一运行的模拟器为命令目标

-s

<serial-number> 指定相应设备序列号的设备/模拟器为命令目标

在多个设备/模拟器连接的情况下较常用的是 -s <serial-number> 参数,serial-number是指设备的设备序列号,可以通过 adb devices 命令获取。

3.2 启动和停止

启动 adb server 命令:

adb start-server

一般无需手动执行此命令,在运行 adb 命令时若发现 adb server 没有启动会自动调起。

停止 adb server 命令:

adb kill-server

3.3 查看 adb 版本

adb version

3.4以 root 权限运行 adbd

如果 adbd 以普通权限执行,有些需要 root 权限才能执行的命令无法直接用 adb xxx 执行。这时可以让 adbd 以 root 权限执行,这个就能随意执行高权限命令。

adb root

如果要恢复 adbd 为非 root 权限的话,可以使用 adb unroot 命令。


 如果要恢复 adbd 为非 root 权限的话,可以使用 adb unroot 命令。

3.5 查询已连接的设备/模拟器列表

adb devices

 

输出格式为 [serialNumber] [state],serialNumber 即我们常说的 SN,state 有如下几种:

offline —— 表示设备未连接成功或无响应。

device —— 设备已连接。注意这个状态并不能标识 Android 系统已经完全启动和可操作,在设备启动过程中设备实例就可连接到 adb,但启动完毕后系统才处于可操作状态。

no device —— 没有设备/模拟器连接。

四.应用管理

4.1 查看应用列表

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

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

包含已卸载应用

<FILTER>

包名包含 <FILTER> 字符串

显示第三方应用:

 4.2 安装apk

命令格式:

adb install [-lrtsdg] <path_to_apk>

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

参数

含义

-l

将应用安装到保护目录 /mnt/asec

-r

允许覆盖安装

-t

允许安装 AndroidManifest.xml 里 application 指定 android:testOnly="true" 的应用

-s

将应用安装到 sdcard

-d

允许降级覆盖安装

-g

授予所有运行时权限

安装应用宝:

 

adb install 实际是分三步完成:

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

所以,必要的时候也可以根据这个步骤,手动分步执行安装过程。

4.3 卸载apk

命令:

adb uninstall [-k] <packagename>

<packagename> 表示应用的包名,-k 参数可选,表示卸载应用但保留数据和缓存目录。

卸载应用宝:

4.4 清除应用数据与缓存 

命令:

adb shell pm clear <packagename>

这条命令的效果相当于在设置里的应用信息界面点击了「清除缓存」和「清除数据」。

清除应用宝缓存数据:

adb shell pm clear com.tencent.android.qqdownloader

五.查看日志

Android 系统的日志分为两部分,底层的 Linux 内核日志输出到 /proc/kmsg,Android 的日志输出到 /dev/log。

​​​​​​5.1Android 日志

命令格式:

[adb] logcat [<option>] ... [<filter-spec>] ...

常用用法如按级别过滤日志

Android 的日志分为如下几个优先级(priority):

  1. V —— Verbose(最低,输出得最多)
  2. D —— Debug
  3. I —— Info
  4. W —— Warning
  5. E —— Error
  6. F—— Fatal
  7. S —— Silent(最高,啥也不输出)

按某级别过滤日志则会将该级别及以上的日志输出。

比如,命令:

adb logcat *:W

会将 Warning、Error、Fatal 和 Silent 日志输出。

 

日志格式:

可以用 adb logcat -v <format> 选项指定日志输出格式。format可以是:briefprocesstagtime

抓取日志到D盘log文件夹下的log.txt文件中。Ctrl+c结束日志抓取。

清空日志

adb logcat -c

5.2内核日志

命令:

adb shell dmesg

 

中括号里的 [91021.469501] 代表内核开始启动后的时间,单位为秒。

通过内核日志我们可以做一些事情,比如衡量内核启动时间:在系统启动完毕后的内核日志里找到 Freeing init memory 那一行前面的时间。

六.命令汇总

常用:

  1. adb devices 查看手机设备
  2. adb install packsge(包路径)安装包
  3. adb install -r packages(保留数据及缓存文件安装新包)
  4. adb uninstall package (卸载包)
  5. adb kill-server 关闭adb服务
  6. adb start-server 启动adb服务
  7. adb shell pm list packages 查看手机里面所有包名
  8. adb shell pm list packages -3查看手机里面所有第三方包名
  9. adb shell /system/bin/screencap -p /sdcard/xx.png 截频并保存文件在手机上为xx.Png
  10. adb pull /sdcard/xx.png D:/xx.png 将手机xx.png文件保存到D盘文件下
  11. adb push D:/xx.text /adcard/xx.text 将电脑文件导入手机
  12. adb shell pm clear com.ablesky.ui.activity 清除缓存数据
  13. adb shell am start -n  com.ablesky.ui.activity/com.ablesky.activity.SplashActivity 启动应用
  14. adb shell am force-stop com.ablesky.simpleness.activity 强制停止运行程序
  15. adb logcat 查看日志
  16. adb logcat > D:\log.txt 将日志打印到电脑上
  17. netstat -aon|findstr "5037" 查看被占用端口对应的PID
  18. tasklist /fi “PID eq PID号” 查看端口号对应的进程
  19. taskkill /pid 2027 /f  杀掉某进程
  20. adb shell ps查看进程列表
  21. 查看进程列表:adb shell ps
  22. adb shell ps -x [PID] 查看指定进程状态
  23. adb shell service list 查看后台services信息
  24. am start -a android.intent.action.VIEW -d 联想_lenovo笔记本电脑_平板电脑_手机_台式机_服务器_外设数码_联想官网 启动一个activity去打开网站
  25. adb shell monkey -p 包名 100    指定APP产生随机事件100次
  26. adb shell monkey -p 包名 -v -v 100    指定APP产生随机事件100次并发送详细的activity信息

进阶:

  1. 获取手机系统信息( CPU,厂商名称等)

adb shell "cat /system/build.prop | grep "product""

  1. 获取手机系统版本

adb shell getprop ro.build.version.release

  1. 获取手机系统api版本

adb shell getprop ro.build.version.sdk

  1. 获取手机设备型号

adb -d shell getprop ro.product.model

  1. 获取手机厂商名称

adb -d shell getprop ro.product.brand

  1. 获取手机的序列号,有两种方式

adb get-serialno

adb shell getprop ro.serialno

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

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

adb shell getprop gsm.baseband.imei

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

  1. 获取手机mac地址

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

  1. 获取手机内存信息

adb shell cat /proc/meminfo

获取手机存储信息

adb shell df

  1. 获取手机内部存储信息:

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

其他: adb shell df /data

获取sdcard存储信息:

adb shell df /storage/sdcard

  1. 获取手机分辨率

adb shell "dumpsys window | grep mUnrestrictedScreen"

  1. 获取手机物理密度

adb shell wm density

  1. 获取手机包名

查看指定apk的包名:aapt dump badging +包的全路径

查看所有apk包名:adb shell pm list package -f

  1. 控制系统的默认设置

adb shell settings get <System, Secure, Global>

adb shell settings get system screen_brightness 获取当前亮度

adb shell settings put system screen_brightness 150 修改系统亮度

adb shell settings get secure default_input_method 获取系统默认输入法

adb shell settings get global auto_time 获取是否允许自动获取网络时间

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/706073.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Java+SpringBoot+vue的食品安全管理系统设计与实现

博主介绍&#xff1a;✌擅长Java、微信小程序、Python、Android等&#xff0c;专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb; 不然下次找不到哟 Java项目精品实战案…

基于Java+Vue前后端分离网络教学平台设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

Ubuntu连不上网,在windows安装docker后

在windows上安装docker后&#xff0c;会依赖于virtualbox虚拟机&#xff0c;并且有虚拟网络&#xff0c;与ubuntu虚拟机网络产生冲突。 解决办法&#xff0c;打开网络适配器&#xff0c;禁用VirtualBox网络 这个时候就可以了。 ubuntu上使用docker pull镜像的时候&#xff0c…

线性代数克莱姆法则的几何含义

以二元一次方程组的求解为例&#xff1a; { a c a 1 b c b 1 c 1 a c a 2 b c b 2 c 2 \left\{\begin{array}{l} a_{c}a_{1} b_{c}b_{1} c_{1} \\ a_{c}a_{2} b_cb_{2} c_{2} \end{array}\right. {ac​a1​bc​b1​c1​ac​a2​bc​b2​c2​​ 其中 a c a_c ac​和 b c b_…

【Lua】ZeroBrane Studio免费专业IDE使用详解

▒ 目录 ▒ &#x1f6eb; 问题描述环境 1️⃣ IDE界面说明项目目录编辑器控制台窗口输出窗口选择解释器堆栈窗口监视窗口大纲窗口 2️⃣ 调试程序3️⃣ 自定义lua解释器编译自己的lua解释器增加interpreters配置文件重启IDE 4️⃣ 其它IDE比较Lua EditorVSCode &#x1f6ec; …

精密电阻的丝印识别方法

在PCB上经常会出现一些精密的电阻丝印和普通的电阻的丝印识别方式不太一样&#xff0c;比如图1所示。 图1 这种电阻的丝印主要是由两部分组成&#xff0c;第一部分是两个数字&#xff0c;第二部分是一个字母&#xff0c;电阻的阻值的计算就是根据这这个丝印编码。例如图2中的丝…

css中鼠标悬停和点击触发样式变换(:hover和:active)

效果 代码 /*hover--光标&#xff08;鼠标指针&#xff09;悬停在元素上时触发*/ .el-card:hover{background: #f5f5f6; } /*active--按下按键和松开按键之间的时间触发*/ .el-card:active{background: #e0dfdf; }

Linux--管道文件:|

作用&#xff1a; 传输资源&#xff0c;你现在可以单纯的把资源看作是数据 》管道的作用是传导数据 构成&#xff1a;入口与出口 存储&#xff1a; 内存级的文件&#xff0c;没有在磁盘上&#xff01;

Emacs之sr-speedbar替代neotree显示目录(一百一十六)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

【Linux进程】进程优先级和其他概念 {查看进程优先级,PRI和NI,修改进程优先级;竞争性,独立性,并发和并行,进程上下文}

进程优先级和其他概念 一、进程优先级 1.1 基本概念 什么是优先级&#xff1f; 进程的优先权&#xff08;priority&#xff09;就是用来确定CPU资源分配的先后顺序的。进程的优先级是调度器调度进程到CPU执行的重要指标。 为什么要存在优先级&#xff1f; 由于CPU资源有限…

注册登录账号系统

目录 前言 一、项目介绍 二、项目分析 1.框架介绍 框架流程图&#xff1a;​ 板块分析&#xff1a; 前提&#xff1a; &#xff08;1&#xff09;注册板块 &#xff08;2&#xff09;登录板块 &#xff08;3&#xff09;main方法主板块 2.实操展示 &#xff08;1&#x…

并发List:CopyOnWriteArrayList

CopyOnWriteArrayList 适合写多读少 介绍 JUC包中的并发List只有CopyOnWriteArrayList。CopyOnWriteArrayList是一个线程安全的ArrayList&#xff0c;使用了写时复制策略&#xff0c;对其进行的修改操作都是在底层的一个复制的数组上进行的。 CopyOnWriteList 实现的接口和 Ar…

async异步任务_同步任务选项

需要先看完上文&#xff1a;async创建异步任务_御坂美琴1的博客-CSDN博客 让类里面的一个成员函数当作线程的参数。 async里面有三个参数&#xff0c;一个是成员函数的地址&#xff0c;第二个是 类&#xff0c;第三个是传入的参数。 接下来介绍async的同步线程创建。 asy…

C++类Day2,作业思维

1.昨天的基础上完成运算符重载 #include <iostream> using namespace std;class Complex { private:int real;int vir; public://无参构造Complex(){cout << "无参构造" << endl;}//有参构造Complex(int a,int b):real(a),vir(b){cout << &q…

Ubuntu18.04本地部署Stable-Diffusion-webui绘画

记录Ubuntu下安装Stable-Diffusion-webui&#xff0c;比较简单,以供参考。 系统&#xff1a;Ubuntu 18.04.4 LTS 内存&#xff1a;40G 显卡&#xff1a;32G 硬盘&#xff1a;500G 一、安装cuda 支持安装的cuda版本可以用nvidia-smi命令查看&#xff1a; ----------------…

Tomcat的优化及多实例部署

文章目录 一.Tomcat的优化1.tomcat启动速度优化——random2.Tomcat配置文件参数优化2.1 常用的优化相关参数2.2 优化的配置文件 二.Tomcat多实例部署1.为什么会有tomcat多实例部署2.多实例部署图示3.多实例部署的配置3.1 安装JDK3.2 安装启动Tomcat3.3 配置 tomcat 环境变量3.4…

筹码分布图高级用法——历史换手衰减系数自动计算公式

在使用筹码分布图时&#xff0c;很多人习惯于采用软件的默认设置&#xff0c;然而默认设置不一定能满足我们的要求。今天将向大家介绍筹码分布图的高级用法——历史换手衰减系数&#xff0c;并编写历史换手衰减系数自动计算公式。有些网友认为通过修改衰减系数&#xff0c;可以…

【远程控制】向日葵连接Ubuntu黑屏

Ubuntu 远程黑屏 Ubuntu 22.04 方法 1&#xff1a;切换桌面工作模式方法 2&#xff1a;安装 lightdm 插件来渲染界面客服工单回答 Ubuntu 22.04 方法 1&#xff1a;切换桌面工作模式 进入到登录页 点击用户名 点击右下角&#xff0c;切换桌面工作模式为Ubuntu on xorg即可 …

基于Python+MySQL所写的音乐网管理系统

点击以下链接获取源码资源&#xff1a; https://download.csdn.net/download/qq_64505944/87971719?spm1001.2014.3001.5503 《甜橙音乐网》程序使用说明 在虚拟环境下输入命令“python manage.py runserver”启动项目&#xff0c;启动成功后&#xff0c;访问“http://127.0…

x264 deblock filter 代码解读

在x264源码里&#xff0c;void x264_frame_deblock_row( x264_t *h, int mb_y )函数中定义了如下的宏片段&#xff0c;这段代码旨在完成对MB的deblocking 操作&#xff0c;其中针对edge 取不同的值的时候&#xff0c;有的做deblocking&#xff0c; 有的不做&#xff0c;看这部分…