Android--刷机与adb

news2024/12/30 1:59:42

目录

一、Android设备启动流程

二、刷机模式介绍

三、Windows命令行

四、adb介绍与配置

五、常用的adb命令


一、Android设备启动流程

Android就是Linux内核(Kernel)+Java虚拟机(JVM)

Android设备启动就分为两个阶段:

  • Linux启动

1.启动电源以及系统启动:

当电源键按下时引导芯片代码从预定义的地方(固化在ROM)开始执行,加载引导程序BootLoader到RAM中,然后开始执行。

2.引导程序BootLoader:

引导程序(Bootloader)是位于Android操作系统启动之前的一个小程序,其主要作用是将系统操作系统加载到内存中并启动它的运行。

3、Linux内核启动

当内核启动时,设置缓存、被保护存储器、计划列表、加载驱动,当内核完成系统设置时,它首先在系统文件中寻找init.rc文件,并启动init进程。

  •  Android启动

4.init进程启动:

init进程是Android系统中用户空间的第一个进程,进程号是1。初始化和启动属性服务,并且启动Zygote进程。

5.Zygote进程:

创建Java虚拟机并为Java虚拟机注册JNI方法,创建服务器端Socket,启动SystemServer进程。

6.SystemServer进程启动:

启动Binder线程池和SystemServiceManager,并且启动各种系统服务。

7.Launcher启动:

被SystemServer进程启动的AMS会启动Launcher,Launcher启动后会将已安装应用的快捷图标显示到界面上。


二、刷机模式介绍

  • 线刷

BootLoader阶段,如果发现按键有特殊的组合,比如音量+键和电源键,就会进入fastboot模式:它是bootloader期间进入的一个特殊阶段,可以通过数据线与电脑连接,然后在电脑上执行一些命令,如刷系统镜像到手机上,fastboot可以理解为实现了一个简单的通信协议,接收命令并更新镜像文件,其它什么也干不了。这种刷机方式称为"线刷"。

  •  卡刷

如果没有按键进入fastboot,bootloader继续执行,如果又发现有特殊的按键组合,则会进入recovery模式:从某种意义来说,这就是一个小型操作系统,和正常启动进入的系统的kernel是一样的,只是init及之后干的事情不同。

在recovery模式下,会加载了部分文件系统,所以才可以读sdcard中update.zip进行刷机,当然,也可以清除cache和用户数据。这种刷机方式称为"卡刷"。

  • 进入fastboot(bootloader) 模式

1.大多数Android手机,可在关机状态下,然后同时按住[电源键]+[音量+]键,大约2-3s后,就可以进入fastboot模式;

2.作为开发者,在开机状态下可以用adb命令的方式进入:adb reboot bootloader,一般进入后会有"fastboot mode"相关字样。 

  • 在fastboot模式下刷机需要执行的命令 
# 命令格式:
fastboot flash xxx xxx.img
# 如下:
fastboot flash system system.img
fastboot flash boot boot.img
fastboot flash apdp apdp.img
fastboot reboot
  • recovery模式 

1.通过组合键进入recovery;

2.上层应用设置中执行安装/重置/清除缓存等操作进入recovery,OTA升级;

3.Android系统关键组件运行异常,反复重启等特殊情况会自动进入recovery模式。


三、Windows命令行

进入方式有以下两种:

  1. 快捷键(win+R),输入cmd后回车;
  2. 找到”命令提示符“程序。

常用命令:

#1.目录跳转
cd //(同Linux命令cd)
cd .. //进入上级目录
cd /d d: //进入上次d盘所在的目录(或者直接输入:d:)
cd /d d:\ //进入d盘根目录
#2.列出文件
dir //(同Linux命令ls)
#3.查找字符串
findstr //(同Linux命令grep)
#4.其它
md //创建目录(同Linux命令mkdir)
copy //拷贝文件(同Linux命令cp)
del //删除文件(同Linux命令rm)
rd //删除目录(同Linux命令rm -r)
move //移动文件(同Linux命令mv)


四、adb介绍与配置

        Android Debug Bridge,Android调试桥接器,简称ADB。

        ADB是一种功能多样的命令行工具,可让您与设备进行通信。adb 命令可用于执行各种设备操作(例如安装和调试应用)。是我们进行Android开发经常要用的调试工具,它的使用当然是我们Android开发者必须要掌握的;

  • adb命令是如何运行起来的呢? 

        它是一种客户端--服务器程序,包括以下三个组件:

        1.客户端:用于发送命令。客户端在开发机器上运行,可以通过发出adb命令从命令行终端调用客户端。

        2.守护程序(adbd):用于在设备上运行命令,守护程序在每个设备上作为后台进程运行。

        3.服务器:用于管理客户端与守护程序之间的通信,服务器在开发机器上作为后台进程运行。

  • adb环境变量配置分为三步:

        1.右键此电脑,选择属性,再选择系统高级设置;

        2.设置环境变量,在系统变量中双击Path,再点击新建,将adb的路径填写进去;

        3.点击确定后,接下来在cmd窗口中输入adb version进行验证,如下图所示。

  • 打开设备的adb调试

        要在通过usb连接的设备上使用adb,必须要在设备的系统设置中启动USB调试(位于开发者选项下),非userdebug版本的手机,”开发者选项“默认情况下处于隐藏状态。如需将其显示出来,请依次转到手机的设置 --> 关于手机 -->,多次点击”版本号“,此时会弹出提示:

”已打开开发者选项“,返回上一屏幕,在底部就可以找到开发者选项。(注:”开发者选项“会因设备的不同,在屏幕中的位置和名称也有所不同)


五、常用的adb命令

//1.查看当前连接电脑的设备(如有多台设备连接,需要加-s参数进行选择)
$ adb devices
List of devices attached
emulator-6666 device
emulator-6667 device
$ adb -s emulator-6666 install camera.apk
//2.重启连接成功的设备
adb reboot
//3.将apk安装到已连接的设备上,-r:强制安装,-d:运行版本代码降级,-t:允许安装测试apk
adb install (-r -d -t) <apk-path> 
//4.推送、拉取文件
adb pull <remote-path> <local-path>
adb push <local-path> <remote-path>
//5.root当前的手机并挂载
adb root & adb remount
//6.进行设备或者模拟器的shell,如同进入Linux系统
adb shell
//7.在设备上执行command,command可为任意可执行程序,.exe文件
adb shell [command]
//8.查看手机内属性
adb shell getprop 
//9.查看一个文件,cpu信息
adb shell cat /proc/cpuinfo
adb shell cat /proc/memoinfo
//10.Android系统服务相关的命令(am  pm  input)
//10.1 启动拨号盘
adb shell am start -a android.intent.action.CALL -d tel:10086
//10.2 杀掉一个应用
adb shell am force-stop com.some.package
//10.3 查看com.some.package在手机上的路径
adb shell pm path com.some.package
//10.4 模拟按键,keycode对应设备某些功能
adb shell input keyevent <keycode>
//11.dumpsys:获取在连接的设备上运行的所有系统服务的诊断输出
adb shell dumpsys -l
adb shell dumpsys activity
adb shell dumpsys window
adb shell dumpsys batterystats
adb shell dumpsys meminfo package_name|pid [-d]
//12.logcat,抓取日志
adb shell logcat
// -b <buffer>	指定log类型,如 events、radio。默认是main、system 和 crash 缓冲区集。
adb shell logcat -b radio
// -c, --clear	清除(清空)所选的缓冲区。
adb shell logcat -c
// 只显示包含“tag”字符后的log
adb shell logcat | findstr “tag”	
// 将log保存到文件d:/xxx/log.txt
adb shell logcat > d:/xxx/log.txt	

本文仅是对Android刷机和adb命令的简要介绍,仍有很多细节和深入的内容未能涉及。如果有任何不准确或不完整之处,请随时提出,我将非常感激。

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

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

相关文章

详解c++STL—容器list

目录 1、list基本概念 1.1、概念描述 1.2、结点的组成 1.3、list的优点 1.4、list的缺点 1.5、总结 2、list构造函数 2.1、功能描述 2.2、函数原型 2.3、示例 3、list赋值和交换 3.1、功能描述 3.2、函数原型 3.3、示例 4、list大小操作 4.1、功能描述 4.2、函…

ChatGPT的前世今生——混沌初开

目录 ChatGPT的前世今生——混沌初开ChatCPT简介ChatCPT是什么&#xff1f;ChatCPT的火爆程度ChatCPT火爆的原因1、功能强大&#xff0c;应用范围广泛2、训练数据量大&#xff0c;模型效果好3、优秀的商业模式 OpenAI公司公司创始团队 总结公众号文章链接参考链接&#xff1a; …

03C++类与对象之运算符重载

文章目录 C类与对象之运算符重载与const成员运算符重载赋值运算符重载运算符重载 日期类的实现与运算符重载赋值运算符重载比较类运算符的重载二元运算符-的重载前置和后置重载 总体实现代码const成员const的好处1.防止程序员犯错2.提高代码的复用性 const 成员与函数重载规则 …

Qt文件系统源码分析—第三篇QDir

深度 本文主要分析Windows平台&#xff0c;Mac、Linux暂不涉及 本文只分析到Win32 API/Windows Com组件/STL库函数层次&#xff0c;再下层代码不做探究 本文QT版本5.15.2 类关系图 QTemporaryFile继承QFile QFile、QSaveFile继承QFileDevice QFileDevice继承QIODevice Q…

由浅入深Netty基础知识IO相关

目录 1 stream vs channel2 IO 模型3 零拷贝3.1 传统 IO 问题3.2 NIO 优化 4 AIO4.1 文件 AIO4.2 守护线程4.3 网络 AIO 1 stream vs channel stream 不会自动缓冲数据&#xff0c;channel 会利用系统提供的发送缓冲区、接收缓冲区&#xff08;更为底层&#xff09;stream 仅支…

unity学习遇到的问题:解决VS不能加载Unity脚本,MonoBehaviour是灰色的

电脑出了点问题&#xff0c;然后就重装了&#xff0c;重装之后&#xff0c;从gitee上下载了原来的半截代码&#xff0c;结果发现里面的脚本运行出问题了&#xff0c;仔细一看&#xff0c;MonoBehaviour是灰色的&#xff0c;也就是说&#xff0c;加载不了unity的api了&#xff0…

目标检测复盘 --3. RCNN

RCNN的CNN部分使用AlexNet作为backbone来提取特征&#xff0c;Fast RCNN使用了VGG16来作为backboneRCNN将2000个框送入网络提取特征&#xff0c;Fast RCNN是将图像送入CNN来提取特征得到一个特征图将SS(Selective Search)算法获取的提议框映射到上面的特征图上&#xff0c;获取…

怎么通过ssh连上ipv6的服务器?阿里云怎么配置ipv6?wsl2怎么支持ipv6?

最近在研究ipv6&#xff0c;光调通环境居然让我折腾了好多回&#xff0c;现在终于通了 在这里提一句&#xff0c;IPV6和IPV4是两种东西&#xff0c;不要想着ipv6兼容ipv4&#xff0c;你就当它是全新的东西 1.前置条件 1.1我的电脑能访问ipv6 测试通过就代表你电脑可以访问ip…

Redis 哨兵模式的实现详解

文章目录 高可用&#xff08;HA&#xff09;哨兵模式概述哨兵的搭建伪集群 哨兵1. 复制sentinel.conf文件2. 修改sentinel.conf文件3. 新建sentinel26380.conf4. 启动并关联Redis集群5. 启动Sentinel集群6. 查看 Sentinel 信息7. 查看 Sentinel 配置文件 哨兵优化配置 高可用&…

【腾讯云Finops Crane集训营】降本增效神器Crane实战记录

本章目录 前言一、Crane是什么&#xff1f;Crane的主要功能&#xff1f;FinOps 是什么Prometheus是什么Grafana是什么 二、不得不面对的问题&#xff1a;云上资源效能挑战&#xff01;三、云原生场景下的成本优化挑战&#xff1f;四、K8s原生能力的不足五、Crane智能调度助力成…

Linux命令之vim/vi

目录 vim/vi简介 vi/vim 的使用 操作实例 总结 vim/vi简介 所有的 Unix Like 系统都会内建 vi 文书编辑器&#xff0c;其他的文书编辑器则不一定会存在。但是目前我们使用比较多的是 vim 编辑器。Vim 是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程…

i.MX6ULL - 远程视频监控方案实现(nginx-rtmp流媒体服务器、ffmpeg推流)

i.MX6ULL - 远程视频监控配置&#xff08;nginx-rtmp流媒体服务器、ffmpeg推流&#xff09; 目录 i.MX6ULL - 远程视频监控配置&#xff08;nginx-rtmp流媒体服务器、ffmpeg推流&#xff09;1、前言2、buildroot文件系统构建2.1 勾选alsa-utils&#xff08;选做&#xff1a;如果…

桥接模式与NAT模式的区别以及设置静态IP

概述 日常我们都会使用到虚拟机&#xff0c;本文章以VMware虚拟机为例&#xff0c;主要介绍下虚拟机设置桥接模式与NAT模式的区别&#xff0c;并通过示意图进行讲解。并且会介绍如何去设置静态IP。 模式介绍 NAT模式NAT模式下 &#xff0c;创建出来的虚拟机只能访问当前主机…

基于ensp的跨地区的校园网组网方案

本博客是基于模拟器ensp的校园网组网方案&#xff0c;有总校区和分校区&#xff0c;主要用了vlan划分、dhcp、nat、ospf、acl、bgp等技术。首先说一下本博客的局限性&#xff1a; 总校区和分校区之间只是使用的传统的bgp建立连接&#xff0c;这样可以在运营商上看到内网的明细&…

HTTP1.1(七)内容协商和资源表述

一 内容协商和资源表述 ① 铺垫 1) 由于一种资源对应许多种状态,所以客户端接收资源表述的转移时需要进行协商比如&#xff1a;[1]、一个来自中国的用户他的浏览器访问一个页面时得到中文页面[2]、一个其它国家的用户访问同一个页面时得到的是他本国的页面补充&#xff1a;…

在线协作助力团队合作:解析多种高效工具实现团队协同

在线协作是通过网络为平台&#xff0c;将团队成员连接起来&#xff0c;使其共同创作、共享讯息&#xff0c;进行团队合作。这种协作方式突破了线下的空间限制性&#xff0c;使团队合作更加及时便捷。因此&#xff0c;越来越多的团队选择了在线协作。 在线协作为团队带来了什么帮…

IDEA 2019.1 与 apache-maven-3.6.3 版本不兼容解决办法

-------IDEA 2019.1 与 apache-maven-3.6.3 版本不兼容 解决办法&#xff1a;降低 Maven版本为 3.3 到底得踩过多少坑&#xff0c;才能让你不再流泪&#xff0c;

接初识HTML中的基础知识,简单明了!!!

续——HTML的基础知识&#xff01;&#xff01;&#xff01; 一、表格 关于HTML中用table表示一个表格&#xff0c;用tr来表示一行&#xff0c;用td来表示一列。 Demo&#xff1a;表示一个二行三列的表格 <!--根--> <html><!--头--> <head><…

瑞吉外卖 - 文件上传与下载功能(15)

某马瑞吉外卖单体架构项目完整开发文档&#xff0c;基于 Spring Boot 2.7.11 JDK 11。预计 5 月 20 日前更新完成&#xff0c;有需要的胖友记得一键三连&#xff0c;关注主页 “瑞吉外卖” 专栏获取最新文章。 相关资料&#xff1a;https://pan.baidu.com/s/1rO1Vytcp67mcw-PD…

pandas dataframe 中 explode()函数用法及效果

最近在使用pyspark处理数据&#xff0c;需要连接各种各样的表和字段&#xff0c;因此记录相关函数的使用情况。今天介绍explode(). 1. explode()函数简介 explode 函数是 pandas.DataFrame 类的一个方法&#xff0c;能够通过pyspark间接调用。 它可以将一个包含list或者其它可…