玩转Android adb命令(adb降级)

2024-06-07 23:32
文章标签 android 命令 adb 玩转 降级

本文主要是介绍玩转Android adb命令(adb降级),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文链接

玩转Android adb命令(adb降级)

1.adb简介

adb具有安装卸载apk、拷贝推送文件、查看设备硬件信息、查看应用程序占用资源、在设备执行shell命令等功能。

图片

在Android SDK安装目录的platform-tools目录下找到adb工具。

图片

adb在某种程度上有很大权限的,因为adb的设计初衷是为了方便开发人员调试,因此必然需要暴露一些权限以外的接口,利用这个特性可以绕开权限机制在非Root非定制机上做一些操作。

2.adb架构

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

(1).运行在pc端的adb client

命令行程序”adb”用于从shell或脚本中运行adb命令。首先,“adb”程序尝试定位主机上的adb服务器,如果找不到adb服务器,“adb”程序自动启动一个adb服务器。接下来,当设备的adbd和pc端的adb server建立连接后,adb client就可以向adb servcer发送服务请求;

(2).运行在pc端的adb server

adb Server是运行在主机上的一个后台进程。它的作用在于检测USB端口感知设备的连接和拔除,以及模拟器实例的启动或停止,adb Server还需要将adb client的请求通过usb或者tcp的方式发送到对应的adbd上;

(3)运行在设备端的常驻进程adb demon(adbd)

程序“adbd”作为一个后台进程在Android设备或模拟器系统中运行。它的作用是连接adb服务器,并且为运行在主机上的客户端提供一些服务;

3.adb端口被占用

5037为adb默认端口,若5037端口被占用的解决方法

(1).找到使用该端口的进程pid

netstat -aon|findstr 5037

(2).通过pid找到对应的进程名(便于定位,可以跳过)

tasklist /fi "pid eq 5162"

(3).使用命令终止该命令的运行

taskkill /pid 5162 /f

4.基本用法

为命令指定目标设备

如果有多个设备/模拟器连接,则需要为命令指定目标设备

图片

adb devicesadb -s 10.92.164.26:5555 install test.apk

启动adb server命令

adb start-server

停止adb server命令

adb kill-server

查看adb版本

adb version

以root权限运行adbd

adb的运行原理是PC端的adb server与手机端的守护进程adbd建立连接,然后PC端的adb client通过adb server转发命令,adbd接收命令后解析运行。

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

adb root

有些手机root后也无法通过adb root命令让adbd以root权限执行

adbd cannot run as root in production builds

先安装

adbd Insecure

然后

adb root

指定adb server的网络端口

adb -P <port> start-server

让设备在5555端口监听TCP/IP连接

adb tcpip 5555

通过IP地址连接设备

adb connect <device-ip-address>

断开无线连接

adb disconnect <device-ip-address>

无线连接(无需借助USB线)

需要root权限

susetprop service.adb.tcp.port 5555

找到Android设备的IP地址

restart adbdstop adbdstart adbd

5.应用管理

查看应用列表

adb shell pm list packages [-f] [-d] [-e] [-s] [-3] [-i] [-u] [--user USER_ID] [FILTER]

adb shell pm list packages的基础上可以加一些参数进行过滤查看不同的列表,支持的过滤参数,如下所示:

图片

所有应用

adb shell pm list packages

系统应用

adb shell pm list packages -s

第三方应用

adb shell pm list packages -3

安装apk

adb install [-lrtsdg] <path_to_apk>

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

图片

图片

图片

图片

常见安装失败输出代码、含义及可能的解决办法,如下所示:

图片

图片

图片

图片

卸载应用

adb uninstall [-k] <packagename>

清除应用数据与缓存

adb shell pm clear <packagename>

查看前台Activity

adb shell dumpsys activity activities | grep mFocusedActivity

查看正在运行的Services

adb shell dumpsys activity services [<packagename>]

查看应用详细信息

adb shell dumpsys package <packagename>

6.与应用交互

主要是使用am <command>命令,常用的<command>

图片

<INTENT>参数很灵活,和写Android程序时代码里的Intent相对应。

用于决定intent对象的选项如下:

图片

<INTENT>里还能带数据,就像写代码时的Bundle一样

图片

调起Activity

adb shell am start [options] <INTENT>adb shell am start -n com.tx.mm/.ui.LauncherUIadb shell am start -n org.mazhuang.boottimemeasure/.MainActivity --es "toast" "hello, world"

调起Service​​​​​​​

adb shell am startservice [options] <INTENT>adb shell am startservice -n com.tx.mm/.plugin.accountsync.model.AccountAuthenticatorService

发送广播​​​​​​​

adb shell am broadcast -a android.intent.action.BOOT_COMPLETEDadb shell am broadcast -a android.intent.action.BOOT_COMPLETED -n org.mazhuang.boottimemeasure/.BootCompletedReceiver

图片

图片

强制停止应用​​​​​​​

adb shell am force-stop <packagename>adb shell am force-stop com.tx.mobilesafe

禁用应用和启动​​​​​​​

adb shell pm disable-user <packagename>adb shell pm disable <packagename>adb shell pm enable <packagename>

撤消应用程序的权限

(1).向应用授予权限。只能授予应用程序声明的可选权限​​​​​​​

adb shell pm grant <packagename> <PACKAGE_PERMISSION>adb -d shell pm grant packageName android.permission.BATTERY_STATS

(2).取消应用授权

adb shell pm revoke <packagename> <PACKAGE_PERMISSION>

选项--user user_id要禁用的用户

滑动解锁

adb shell input swipe 300 1000 300 500

7.查看日志

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

图片

按tag和级别过滤日志​​​​​​​

adb logcat ActivityManager:I MyApp:D *:Sadb logcat -v long ActivityManager:I *:S

清空日志

adb logcat -c

内核日志

adb shell dmesg

8.查看设备信息

型号

adb shell getprop ro.product.model

电池状况

adb shell dumpsys battery

屏幕分辨率

adb shell wm size

屏幕密度

adb shell wm density

显示屏参数

adb shell dumpsys window displays

android_id

adb shell settings get secure android_id

IMEI

adb shell dumpsys iphonesubinfo

Android系统版本

adb shell getprop ro.build.version.release

IP地址

adb shell ifconfig "| grep Mask"

Mac地址

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

CPU信息

adb shell cat /proc/cpuinfo

内存信息

adb shell cat /proc/meminfo

更多硬件与系统属性

adb shell cat /system/build.prop

可通过adb shell getprop <属性名>命令单独查看

图片

adb shell cat /system/build.prop | grep ro.product.cpu.abi

修改设置

修改设置之后,运行恢复命令有可能显示仍然不太正常,可以运行adb reboot重启设备,或手动重启。

修改设置的原理主要是通过settings命令修改如下路径里存放的设置值

/data/data/com.android.providers.settings/databases/settings.db

关闭USB调试模式

adb shell settings put global adb_enabled 0

状态栏和导航栏的显示隐藏

adb shell settings put global policy_control <key-values>

图片

表示设置在所有界面下都同时隐藏状态栏和导航栏

adb shell settings put global policy_control immersive.full=*

表示设置在包名为com.package1和com.package2的应用里隐藏状态栏,在除了包名为com.package3的所有应用里隐藏导航栏

adb shell settings put global policy_control immersive.status=com.package1,com.package2:immersive.navigation=apps,-com.package3

恢复正常模式

adb shell settings put global policy_control null

屏幕截图

adb shell screencap -p /sdcard/sc.png

Linux和Windows

adb shell screencap -p | sed "s/\r$//" > sc.png

Mac OS X

adb shell screencap -p | gsed "s/\r$//" > sc.png

录制屏幕

adb shell screenrecord /sdcard/filename.mp4

重新挂载system分区为可写​​​​​​​

adb shellsumount

重新挂载

mount -o remount,rw -t yaffs2 /dev/block/platform/msm_sdcc.1/by-name/system /system

查看连接过的WiFi密码​​​​​​​

adb shellsucat /data/misc/wifi/*.conf

重启手机

adb reboot

检测设备是否已root​​​​​​​

adb shellsu

使用Monkey进行压力测试

adb shell monkey -p <packagename> -v 500

开启WiFi​​​​​​​

adb rootadb shell svc wifi enable

关闭WiFi​​​​​​​

adb rootadb shell svc wifi disable

设置wifi优先,有网络和wifi情况下优先使用wifi

adb shell svc wifi prefer

开启/关闭数据流量​​​​​​​

svc data disableadb shell svc data enable adb shell svc data prefer

9.刷机相关命令

重启到Recovery模式

adb reboot recovery

从Recovery重启到Android

adb reboot

重启到Fastboot模式

adb reboot bootloader

查看进程

adb shell ps

图片

查看实时资源占用情况

adb shell top

图片

查看进程UID

adb shell dumpsys package <packagename> | grep userId=

图片

10.安全相关

启用SELinux​​​​​​​

adb rootadb shell setenforce 1

禁用SELinux​​​​​​​

adb rootadb shell setenforce 0

启用dm_verity​​​​​​​

adb rootadb enable-verity

禁用dm_verity​​​​​​​

adb rootadb disable-verity

11.常见问题

启动adb server失败

adb server进程想使用的5037端口被占用​​​​​​​

netstat -ano | findstr LISTENINGtaskkill /PID 12418

重启adb

推荐文章

Android系统run-as命令原理(权限访问)

Android系统中run-as和su命令的源码解析(升降权限)

图片

这篇关于玩转Android adb命令(adb降级)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1040610

相关文章

Linux join命令的使用及说明

《Linuxjoin命令的使用及说明》`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`jo... 目录一. 基本语法二. 数据准备三. 指定文件的连接key四.-a输出指定文件的所有行五.-o指定输出

Linux jq命令的使用解读

《Linuxjq命令的使用解读》jq是一个强大的命令行工具,用于处理JSON数据,它可以用来查看、过滤、修改、格式化JSON数据,通过使用各种选项和过滤器,可以实现复杂的JSON处理任务... 目录一. 简介二. 选项2.1.2.2-c2.3-r2.4-R三. 字段提取3.1 普通字段3.2 数组字段四.

java中ssh2执行多条命令的四种方法

《java中ssh2执行多条命令的四种方法》本文主要介绍了java中ssh2执行多条命令的四种方法,包括分号分隔、管道分隔、EOF块、脚本调用,可确保环境配置生效,提升操作效率,具有一定的参考价值,感... 目录1 使用分号隔开2 使用管道符号隔开3 使用写EOF的方式4 使用脚本的方式大家平时有没有遇到自

Linux命令rm如何删除名字以“-”开头的文件

《Linux命令rm如何删除名字以“-”开头的文件》Linux中,命令的解析机制非常灵活,它会根据命令的开头字符来判断是否需要执行命令选项,对于文件操作命令(如rm、ls等),系统默认会将命令开头的某... 目录先搞懂:为啥“-”开头的文件删不掉?两种超简单的删除方法(小白也能学会)方法1:用“--”分隔命

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

在Android中使用WebView在线查看PDF文件的方法示例

《在Android中使用WebView在线查看PDF文件的方法示例》在Android应用开发中,有时我们需要在客户端展示PDF文件,以便用户可以阅读或交互,:本文主要介绍在Android中使用We... 目录简介:1. WebView组件介绍2. 在androidManifest.XML中添加Interne

Redis 的 SUBSCRIBE命令详解

《Redis的SUBSCRIBE命令详解》Redis的SUBSCRIBE命令用于订阅一个或多个频道,以便接收发送到这些频道的消息,本文给大家介绍Redis的SUBSCRIBE命令,感兴趣的朋友跟随... 目录基本语法工作原理示例消息格式相关命令python 示例Redis 的 SUBSCRIBE 命令用于订

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手