玩转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

相关文章

基于Python实现一个Windows Tree命令工具

《基于Python实现一个WindowsTree命令工具》今天想要在Windows平台的CMD命令终端窗口中使用像Linux下的tree命令,打印一下目录结构层级树,然而还真有tree命令,但是发现... 目录引言实现代码使用说明可用选项示例用法功能特点添加到环境变量方法一:创建批处理文件并添加到PATH1

Java -jar命令如何运行外部依赖JAR包

《Java-jar命令如何运行外部依赖JAR包》在Java应用部署中,java-jar命令是启动可执行JAR包的标准方式,但当应用需要依赖外部JAR文件时,直接使用java-jar会面临类加载困... 目录引言:外部依赖JAR的必要性一、问题本质:类加载机制的限制1. Java -jar的默认行为2. 类加

git stash命令基本用法详解

《gitstash命令基本用法详解》gitstash是Git中一个非常有用的命令,它可以临时保存当前工作区的修改,让你可以切换到其他分支或者处理其他任务,而不需要提交这些还未完成的修改,这篇文章主要... 目录一、基本用法1. 保存当前修改(包括暂存区和工作区的内容)2. 查看保存了哪些 stash3. 恢

java -jar命令运行 jar包时运行外部依赖jar包的场景分析

《java-jar命令运行jar包时运行外部依赖jar包的场景分析》:本文主要介绍java-jar命令运行jar包时运行外部依赖jar包的场景分析,本文给大家介绍的非常详细,对大家的学习或工作... 目录Java -jar命令运行 jar包时如何运行外部依赖jar包场景:解决:方法一、启动参数添加: -Xb

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Linux基础命令@grep、wc、管道符的使用详解

《Linux基础命令@grep、wc、管道符的使用详解》:本文主要介绍Linux基础命令@grep、wc、管道符的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录grep概念语法作用演示一演示二演示三,带选项 -nwc概念语法作用wc,不带选项-c,统计字节数-

MySQL的ALTER TABLE命令的使用解读

《MySQL的ALTERTABLE命令的使用解读》:本文主要介绍MySQL的ALTERTABLE命令的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、查看所建表的编China编程码格式2、修改表的编码格式3、修改列队数据类型4、添加列5、修改列的位置5.1、把列

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四

Android与iOS设备MAC地址生成原理及Java实现详解

《Android与iOS设备MAC地址生成原理及Java实现详解》在无线网络通信中,MAC(MediaAccessControl)地址是设备的唯一网络标识符,本文主要介绍了Android与iOS设备M... 目录引言1. MAC地址基础1.1 MAC地址的组成1.2 MAC地址的分类2. android与I

Android 实现一个隐私弹窗功能

《Android实现一个隐私弹窗功能》:本文主要介绍Android实现一个隐私弹窗功能,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 效果图如下:1. 设置同意、退出、点击用户协议、点击隐私协议的函数参数2. 《用户协议》、《隐私政策》设置成可点击的,且颜色要区分出来res/l