adb命令丨adb push命令大全_adb操控手机和指令

【ADB命令】adb push命令总结

adb push命令大全操控手机和指令

运行在 Android 设备上的adb后台进程

执行 adb shell ps | grep adbd ,可以找到该后台进程,windows 请使用 findstr 替代 grep

[xuxu:~]$ adb shell ps | grep adbd
root 23227 1 6672 832 ffffffff 00019bb4 S /sbin/adbd

adb连接手机进行调试有两种方式,一种使用USB线,一种使用无线WiFi。
第一种  使用USB线连接
1. 在手机上启用USB调试
2. CMD窗口输入adb devices,此时可以看到自己的设备。
【注】:无法看到自己设备时,查看手机USB调试是否打开;PC端是否安装手机驱动。
1. 硬件状态正常。
包括 Android 设备处于正常开机状态,USB 连接线和各种接口完好。
2. Android 设备的开发者选项和 USB 调试模式已开启。
可以到「设置」-「开发者选项」-「Android 调试」查看。
如果在设置里找不到开发者选项,那需要通过一个彩蛋来让它显示出来:在「设置」-「关于手机」连续点击「版本号」7 次。
3. 设备驱动状态正常。
这一点在 Linux 和 Mac OS X 下基本不用操心,在 Windows 下有可能遇到需要安装驱动的情况,确认这一点可以右键「计算机」-「属性」,到「设备管理器」里查看相关设备上是否有黄色感叹号或问号,如果没有就说明驱动状态已经好了。否则可以下载一个手机助手类程序来安装驱动先。
第二种  使用无线WiFi连接
首先先了解一点底层的知识:
Android系统底层运行着一个服务(adbd),用于响应和管理大家在电脑端的adb命令连接,这个服务在启动时会根据手机的配置监听USB连接或网络其中之一。配置的属性为:service.adb.tcp.port,也就是监听的网络端口
* 以上属性的值 > 0:adbd将监听网络对应的端口(一般为5555)
* 以上属性的值 <=-1:adbd将监听USB
【注】:
1、 将 Android 设备与要运行 adb 的电脑连接到同一个局域网,比如连到同一个 WiFi。
2、将设备与电脑通过 USB 线连接,可通过命令 adb devices 查看是否连接成功
3、 让设备在 5555 端口监听 TCP/IP 连接:
adb tcpip 5555
4、断开 USB 连接。
5、找到设备的 IP 地址。
一般能在「设置」-「关于手机」-「状态信息」-「IP地址」找到,也可以使用命令查看;
adb shell ifconfig | grep Mask
或者
adb shell ifconfig wlan0
【注】:如果一开始没有USB连接线,Android设备中没有开启adbd服务怎么办?
1、在 Android 设备上安装一个终端模拟器。
已经安装过的设备可以跳过此步。终端模拟器下载地址是: Terminal Emulator for Android Downloads
2、 将 Android 设备与要运行 adb 的电脑连接到同一个局域网,比如连到同一个 WiFi。
3、 打开 Android 设备上的终端模拟器,在里面依次运行命令:
su
setprop service.adb.tcp.port 5555
4、在电脑上通过adb和Android设备的IP地址连接Android设备。
adb connect IP地址:端口号
【注】:有的设备,需要在第四步执行之前,需要重启adbd服务,可以执行下面命令:
restart adbd
#如果该命令无效,尝试以下命令:
adbd stop
adbd start---------------------------------------------------------------------------------------------------
常用命令总结:
(1)adb设置全局代{过}{滤}理
// 设置代{过}{滤}理
adb shell settings put global http_proxy IP地址:端口号
// 移除代{过}{滤}理
adb shell settings delete global http_proxy
adb shell settings delete global global_http_proxy_host
adb shell settings delete global global_http_proxy_port
(2)查看是否可以找到设备
adb devices
【注】:查看设备连接状态   adb devices -l
(3)将apk安装到手机中,或者将apk卸载(前提:手机连接上电脑)
adb install  xxx.apk;
adb uninstall xxx.apk;
【注】:adb uninstall +apk的包名,报错:
Failure [DELETE_FAILED_INTERNAL_ERROR]
首先,安装后进入到shell中,pm path 包名,找到该包的位置,
然后,去掉“.apk”这个文件后缀,还需要去掉“-1”,因为“-1”它不是包名的一部分,而多次重复安装时Android系统自动加上的,然后执行命令:adb uninstall  包名,就可以成功了。
安装/卸载设备中的应用:(前提:adb shell先进入到设备中)
pm  install /sdcard/xxx.apk
pm uninstall [packagename]
清空指定包名应用的数据:
pm clear [packagename]
(4)指定adb server的网络端口
adb -P <port> start-server
【注】:ADB的默认端口为 5037;
(5)将某内容写入到文件中
adb shell echo "1233" >> /data/local/tmp/xxx.config
(6)查看Android设备的CPU架构信息
adb shell  cat /proc/cpuinfo

(3)对程序进行调试
adb shell am start -D -n [包名]/[包名].[活动activity名称]
【注】:-D 的意思是用Debug方式启动应用;
(3)启动一个应用/服务/发送一个广播
adb shell am start -n [包名]/[包名].[活动activity名称]
adb shell am startservice -n [包(package)名]/[包名].[服务(service)名]
adb shell am broadcast -a [广播动作]
例:adb shell am broadcast -a com.android.captureCamera.CaptureCameraService  //启动nubia手机的抓拍功能
(4)查看是否能连接手机,进入到shell窗口
adb shell(注: 为了进入手机或模拟器的shell内核)
获取用root权限:su
如果root用户切换到普通用户:su shell
查看当前目录下的所有文件,包含隐藏文件:ls -al
创建目录/删除目录:mkdir xxx / rmdir xxx
新建文件/删除文件:
(4)adb logcat
<1>打印指定Tag的日志信息:
adb logcat -s tag
【注】:“-s”选项 : 设置默认的过滤器,
例如:想要输出 “System.out” 标签的信息, 就可以使用如下命令
adb logcat -s System.out
<2>打印当前某个应用的日志信息
adb logcat |findstr pname/pid/keyword
【补充】:在运行adb shell后,也可以:logcat |grep 某个应用的名;
<3>打印日志重定向到某个文件中
adb shell logcat >D:/123/logcat.log
adb shell logcat  //持续输出日志,直到Ctrl+C
adb shell logcat -d    //一次性输出日志缓存,不会阻塞
adb shell logcat -c    //清空日志缓存
(5)adb push E:/burpnew.cer /sdcard/Download
(6)如果有多个设备,连接到某个设备/模拟器:
adb -s xxx(设备的名称) shell
adb -s emulator-5554 shell
(7)adb pull/adb push
注:当我们执行默认adb命令时(adb pull或adb push等),都是以shell身份在执行,而非root身份,此时对于命令中的目录权限就要特别注意,当访问的目录需要root权限,或只有程序自身才有访问权限的目录时(典型的如/data/data下的目录),虽然目录和文件都在,但命令仍然是无法访问的,提示remote object does not exist或permission denied。
1、将电脑上的文件上传到手机中
adb push E:/123/xx.txt  /data/local/tmp;
如果在执行命令时报错,需要查看一下/data/local/tmp文件夹的读写权限定义;

可以看到该目录的拥有者和所属组有的属于shell,有的属于root,shell和root具有读写执行的权限,但第三个权限位为--x,即意味着除root和shell用户外,其它用户一律没有读写的权限。但我们在运行该app时,默认的用户却是该进程本身,并非root或shell,所以此时是没有办法写入任何文件到/data/local/tmp的。要想这样做必须先通过代码动态改变当前用户模式到root模式,才能继续往下操作。
解决办法:改变/data/local/tmp/的权限,例如设置:chmod 777 /data/local/tmp/*
2、将手机中的文件下拉到电脑中
使用场景:测试app本地敏感数据时,一般把/data/data/中的文件,从手机中下拉到电脑上进行查看;
adb pull /data/data/包名/xxx  E:/123/
【注】:目录/data/data/包名/是程序自身目录,不能直接下拉到电脑中,可以进入到shell后,修改/data/data/包名/xx/的权限,例如:chmod 777 xxx,然后将相应的目录复制到/data/local/tmp目录中,cp -r /data/data/包名/xxx/.  /data/local/tmp;然后,退出shell,以root用户进行adb,adb root,然后再执行下拉命令。

(8)检查adb的版本
注:安卓在4.x上的版本都要求adb版本必须在1.0.31版本及以上
adb version
查看adb的端口是什么?(注:一般adb端口是5037)
adb nodaemon server
判断端口
netstat -ano|findstr "5037"
关闭/重启adb
adb kill-server
adb start-server
(8)获取设备列表及设备的状态
adb devices

(8)截屏操作
adb shell screencap -p 截图文件路径
例:adb shell screencap  -p /sdcard/tmp.png
(8)输入文本内容
adb shell input text 【需要输入文本框内容】
(8)设备的端口转发

【用法】:adb forward[(远程端)协议:端口号][(设备端)协议:端口号]
例如:
adb forward tcp:23946  tcp:23946
adb forward tcp:8700 jdwp:1786
【注】: JDWP(Java Debug Wire Protocol)是一个为 Java 调试而设计的一个通讯交互协议,它定义了调试器和被调试程序之间传递的信息的格式。在JPDA(Java Platform Debugger Architecture)中,它定义了调试器(debugger)和被调试的 Java 虚拟机(target vm)之间的通信协议。
(8)查看设备中可以被调试的应用的进程号
adb jdwp
(8)非root设备中查看指定debug模式的包名应用沙盒数据
run-as [package name]
(8)查看设备的ip地址(查看设备的网络连接情况)
adb shell netcfg
(8)查看设备的端口号信息
adb shell netstat
(8)查看当前应用的CPU消耗信息
top

(8)操作apk命令
<1> 查看aapt中的信息以及编辑apk程序包
【用法】:aapt dump xmltree [apk包][需要查看的资源文件xml]
例如: aapt dump xmltree demo.apk AndroidManifest.xml
【注】:也可以重定向把输出信息保存到文件中
aapt dump xmltree demo.apk AndroidManifest.xml>D:/123/456.txt
<2> 用dexdump查看dex文件的详细信息
【用法】:dexdump [dex文件路径]
(8)进程命令
<1> 查看当前进程的内存加载情况
ps -ef|grep 应用名         //查看某个应用的运行情况
cat /proc/[pid]/maps | grep 应用名   //查看当前进程的内存映射信息,比如加载了哪些so文件、dex文件等
<2>查看进程的状态信息
cat /proc/[pid]/status
(9)adb shell dumpsys命令
adb shell dumpsys,默认打印出当前系统所有service信息,在后面可加上具体的服务名
查看当前运行应用、进程的包名与Activity名,可运行:
adb shell dumpsys window | findstr mCurrentFocus

zhihu.com/people/wangsicong520

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

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

相关文章

Unity 性能优化五:渲染模块压力

CPU压力 Batching 在GPU渲染前&#xff0c;CPU会把数据按batch发送给GPU&#xff0c;每发送一次&#xff0c;都是一个drawcall&#xff0c;GPU在渲染每个batch的时候&#xff0c;会切换渲染状态&#xff0c;这里的渲染状态指的是&#xff1a;影响对象在屏幕上的外观的渲染属性…

【Python机器学习】实验05 贝叶斯推理

文章目录 朴素贝叶斯推理贝叶斯推理的基本概念1 数据读取--文件获取&#xff0c;可视化2 数据读取--训练集和测试集的划分3 数据读取--准备好每个类别各自的数据4 定义数据的均值和方差5 定义概率密度函数6 对于每个类别计算均值和方差7 定义每个类别的先验概率8 定义概率密度函…

(1)Gymnasium--安装和测试

1、官方地址 Gymnasium Documentation 2、参考教程 Gymnasium环境搭建与使用 - 知乎 3、安装 #conda 创建和使用环境 conda create -n gym_cp310 python3.10 conda activate gym_cp310#安装相关包 pip install "Gymnasium[all]" 4、报错Failed to build box2…

深入学习java虚拟机||JVM内存结构五大模型

目录 程序计数器 栈 虚拟机栈 垃圾回收是否涉及栈内存&#xff1f; 栈内存分配越大越好吗&#xff1f; 方法内的局部变量是否线程安全&#xff1f; 栈内存溢出 本地方法栈 堆 方法区 先看内存图总览 程序计数器 定义&#xff1a;全称P r o g r a m C o u n t e r R e …

windows下配置vue开发环境

安装nodejs&#xff0c;配置npm 1.下载安装包&#xff1a;下载地址&#xff1a;https://nodejs.org/en/download 2.安装node&#xff1a;下载完成后进行安装&#xff0c;记住安装的文件夹。本人安装路径为 D:\Program Files\nodejs 3.配置环境变量&#xff1a; ①安装完成后…

基于传统检测算法hog+svm实现图像多分类

直接上效果图&#xff1a; 代码仓库和视频演示b站视频005期&#xff1a; 到此一游7758258的个人空间-到此一游7758258个人主页-哔哩哔哩视频 代码展示&#xff1a; 数据集在datasets文件夹下 运行01train.py即可训练 训练结束后会保存模型在本地 运行02pyqt.py会有一个可视化…

某信用中心之加速乐实战分析

某信用中心之加速乐实战分析 某信用中心之加速乐实战分析声明逆向目标逆向分析第一层cookie获取第二层cookie获取调试分析JS文件 模拟执行致谢 某信用中心之加速乐实战分析 声明 本文章中所有内容仅供学习交流&#xff0c;抓包内容、敏感网址、数据接口均已做脱敏处理&#x…

QTday2信号和槽

点击登录按钮,关闭Widget登录窗口,打开QQList窗口 widget.cpp #include "widget.h"void my_setupUI(Widget *w);Widget::Widget(QWidget *parent): QWidget(parent) {my_setupUI(this); }Widget::~Widget() { }void Widget::login_slots() {//fixemit jump_signal(…

CAN学习笔记1:计算机网络

计算机网络 1 概述 计算机网络就是把多种形式的计算机用通信线路连接起来&#xff0c;并使其能够互相进行交换的系统。实际上&#xff0c;计算机网络包括了计算机、各种硬件、各种软件、组成网络的体系结构、网络传输介质和网络通信计数。因此&#xff0c;计算机网络是计算机…

Kotlin筑基

Kotlin筑基 本文链接 核心思路&#xff1a;每个知识点都要和源码结合起来讲。 文章目录 Kotlin筑基编译时常量基本类型range访问权修饰符UnitNothing反引号函数内联函数引用具名函数判空和安全调用断言操作、空合并异常处理先决条件subStringsplit解构高级技巧partition repl…

SpringBoot整合RedisTemplate操作Redis数据库详解(提供Gitee源码)

前言&#xff1a;简单分享一下我在实际开发当中如何使用SpringBoot操作Redis数据库的技术分享&#xff0c;完整的代码我都提供了出来&#xff0c;大家按需复制使用即可&#xff01; 目录 一、导入pom依赖 二、yml配置文件 三、使用FastJson序列化 四、核心配置类 五、工具…

SpringCloudAlibaba之Ribbon

Ribbon是nacos自带的负载均衡器&#xff0c;属于客户端的负载均衡 但是在Spring高级版本中让LoadBalancer替代了 本人用的是2.1.0的nacos&#xff0c;ribbon还没有被替换。 使用&#xff1a; 在配置类中&#xff1a;LoadBalanced BeanLoadBalancedpublic RestTemplate restT…

【点云处理教程】05-Python 中的点云分割

一、说明 这是我的“点云处理”教程的第 5 篇文章。“点云处理”教程对初学者友好&#xff0c;我们将在其中简单地介绍从数据准备到数据分割和分类的点云处理管道。 在上一教程中&#xff0c;我们看到了如何过滤点云以减少噪声或其密度。在本教程中&#xff0c;我们将应用一些聚…

Redis(五)—— Redis进阶部分

一、Redis配置文件详解 注意这是Redis服务本身的配置文件&#xff0c;相当于maven的settings.xml&#xff0c;而不是我们在springboot去配置Redis的那个application.yml。 核心部分include 引入其他redis配置文件&#xff0c;相当于spring的<import>bind 设置IP&#xf…

浅谈数据库分库分表

目录 1.分库分表是什么2.为什么进行分库分表3.有哪些解决方案4.总结 本文主要介绍数据库分库分表相关的基础知识&#xff0c;包括分库分表是什么&#xff0c;为什么要分库分表&#xff0c;以及有哪些解决方案。 1.分库分表是什么 数据库分库分表&#xff0c;用英文表示是&quo…

Elasticsearch:通过动态修剪实现更快的基数聚合

作者&#xff1a;Adrien Grand Elasticsearch 8.9 通过支持动态修剪&#xff08;dynamic pruning&#xff09;引入了基数聚合加速。 这种优化需要满足特定的条件才能生效&#xff0c;但一旦实现&#xff0c;通常会产生惊人的结果。 我们观察到&#xff0c;通过此更改&#xff0…

SpringBoot单机限流

文章目录 如何实现单机限流谷歌的 RateLimiter 介绍使用 AOP 实现单机限流Controller切面 如何实现单机限流 谷歌的 RateLimiter 介绍 使用谷歌的 guava 包中 RateLimiter 类来实现&#xff0c;先来介绍一个这个类&#xff1a; RateLimiter 是一个频率限制器&#xff0c;通过…

C语言指针应该这么学?

数组名的意义&#xff1a; 1. sizeof(数组名)&#xff0c;这里的数组名表示整个数组&#xff0c;计算的是整个数组的大小。 2. &数组名&#xff0c;这里的数组名表示整个数组&#xff0c;取出的是整个数组的地址。 3. 除此之外所有的数组名都表示首元素的地址。 根据以上数…

C++代码格式化工具clang-format详细介绍

文章目录 clang-format思考代码风格指南生成您的配置运行 clang-format禁用一段代码的格式设置clang-format的设置预览 clang-format 我曾在许多编程团队工作过&#xff0c;这些团队名义上都有“编程风格指南”。该指南经常被写下来并放置在开发人员很少查看的地方。几乎在每种…

网络编程 IO多路复用 [select版] (TCP网络聊天室)

//head.h 头文件 //TcpGrpSer.c 服务器端 //TcpGrpUsr.c 客户端 select函数 功能&#xff1a;阻塞函数&#xff0c;让内核去监测集合中的文件描述符是否准备就绪&#xff0c;若准备就绪则解除阻塞。 原型&#xff1a; #include <sys/select.…