adb更新android分区,android在recovery模式下使用adb手工刷入update.zip

本文介绍了如何在手机开启USB调试并连接电脑后,通过ADB命令进入recovery模式,并手动挂载SD卡,更新Android分区。详细步骤包括挂载和卸载SD卡分区,推送update-binary到SD卡,以及执行升级过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在保证手机有recovery模式的前提下.

手机正常待机模式,已经打开usb调试,使用数据线连接手机,在cmd命令下输入

D:\PROGRA~1\adt-bundle-windows-x86\sdk\platform-tools>adb reboot recovery

让手机重启进入recovery模式.

进入adb shell

D:\PROGRA~1\adt-bundle-windows-x86\sdk\platform-tools>adb shell

~ # ls

ls

boot                 init                 sys

cache                init.rc              system

data                 proc                 tmp

datadata             res                  ueventd.goldfish.rc

default.prop         root                 ueventd.lenovo.rc

dev                  sbin                 ueventd.rc

emmc                 sd-ext

etc                  sdcard

~ #

在recovery模式未选择从sdcard选择update.zip/或是挂载sdcard前mount情况如下,会发现虽然有sdcard挂载点,但是并没有挂载sdcar分区.(或是输入df -h 即可查看到分区情况)

~ # mount

mount

rootfs on / type rootfs (rw)

tmpfs on /dev type tmpfs (rw,relatime,mode=755)

devpts on /dev/pts type devpts (rw,relatime,mode=600)

proc on /proc type proc (rw,relatime)

sysfs on /sys type sysfs (rw,relatime)

/dev/block/mtdblock4 on /cache type yaffs2 (rw,nodev,noatime,nodiratime)

点击上面这些操作后,即可挂载了sdcard分区,也就是可以通过这个操作,查看一下它是怎么挂载的.

~ # mount

mount

rootfs on / type rootfs (rw)

tmpfs on /dev type tmpfs (rw,relatime,mode=755)

devpts on /dev/pts type devpts (rw,relatime,mode=600)

proc on /proc type proc (rw,relatime)

sysfs on /sys type sysfs (rw,relatime)

/dev/block/mtdblock4 on /cache type yaffs2 (rw,nodev,noatime,nodiratime)

/dev/block/mmcblk0p1 on /sdcard type vfat (rw,nodev,noatime,nodiratime,fmask=0000,dmask=0000,allow_utime=0022,codepage=cp437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)

~ #

然后以后可以手工mount sdcard

mount --help

可以查看使用方法

mount -w /dev/block/mmcblk0p1 /sdcard 挂载sdcard到sdcard节点.

然后如果已经处于此节点下时,需要退回上级再进入,ls时才能看到东西.

卸载分区是 umount -d /sdcard

从update.zip的/\META-INF\com\google\android下把update-binary拉入sdcard备用.

或是使用     D:\PROGRA~1\adt-bundle-windows-x86\sdk\platform-tools\adb.exe push c:/update-binary "/sdcard/update-binary" 方式上传到sdcard根目录下.

因为sdcar一盘是fat32,需要cp /sdcard/update-binary /tmp 或其它目录,

再设置一下权限

chmod 0777 /temp/update-binary

然后

/tmp/update-binary 1 2 /sdcard/update.zip

就可以运行升级,即可看到升级的过程,跟从recovery模式中选择 "从sdcard选择update.zip" 操作是一样的效果.

网上比较少说到这个方式.看一下update-binary的c代码,它需要三个参数,1是zip的版本号好像是只接受1,2,3或是0,不了解android4的这个文件代码是怎么样的.

然后2参数是把运行反馈到那里.相当于stdout/stderr的方式,

而后面那个就是签名过的update.zip,文件名无谓.

所以,基本上可以使用bat来达到签名->上传->重启到recovery->update->查看更新情况->reboot一bat操作了.

拖入文件上传到手机sdcard根目录bat

@echo off

set "s=%~f1"

set "nn=%~nx1"

if "%s%"=="" (

echo 请把操作文件拖到本bat文件上再放开来运行

) else (

title 上传中...

echo 进行中...%s%

D:\PROGRA~1\adt-bundle-windows-x86\sdk\platform-tools\adb.exe push "%s%" "/sdcard/%nn%"

echo 完成.

title 上传完成

)

pause

--------一键刷机脚本,某些东西需要修改.bat---------

@echo off

title "自动对同目录下的rom.zip签名->上传->刷机->重启"

set batDir=%~dp0

set bat=%0

CD "%batDir%"

set "binDir=%batDir%\bin\"

set "zip=%batDir%\rom.zip"

set batArg0=%1

set batArg1=%2

if  "%batArg0%" == "/n" (

goto n_%batArg1%

)

echo.

echo 除了本bat,其它文件可以上网上下载,像签名相关文件,一般放在签名工具一起

echo.

echo 本bat文件所在目录是:%batDir%

echo.

IF NOT EXIST %binDir% (

echo 用于存放必需运行文件目录不存在,请建立:%binDir%

goto stop

)

IF NOT EXIST %zip% (

echo 用于recovery模式下刷入的未签名的rom压缩包不存在,zip格式,固定文件名rom.zip,如果没有请先制作:%zip%

goto stop

)

set lup=%batDir%/bin/update-binary

if not exist %lup% (

echo 找不到执行刷入update.zip的二进制文件:%lup%

goto stop

)

set signJar=%batDir%\bin\sign.jar

if NOT Exist %signJar% (

echo 用于给rom压缩包签名的文件不存在:%signJar%

goto stop

)

set pem=%batDir%\bin\certificate.x509.pem

if NOT Exist %pem% (

echo 用于给rom压缩包签名的证书文件不存在:%pem%

goto stop

)

set key=%batDir%\bin\key.pk8

if NOT Exist %key% (

echo 用于给rom压缩包签名的key文件不存在:%key%

goto stop

)

set adb=%batDir%\bin\adb.exe

if NOT Exist %adb% (

echo 连接手机的文件不存在:%adb%

goto stop

)

set "romSignDir=%batDir%\romSignDir\"

echo 签名rom存放目录是%romSignDir%

echo.

if not exist "%romSignDir%" mkdir "%romSignDir%"

echo 下面检测是否有java使用环境

echo.

echo 如果有就进入签名过程

echo.

echo 如果没有本窗口就会直接关闭了,所以,需要安装java环境才能继续

echo.

pause

cmd /C "java.exe -version && start "签名步骤" /WAIT /B %bat% /n sign"

exit

exit

:n_sign

echo.

title java环境正常,准备签名

set update=%romSignDir%\update.zip

if exist %update% (

echo.

echo 检测到已经存在一个签名过的%update%

echo 签名前文件是%zip%

echo 准备重新签名

echo.

echo 跳过签名输入任意字符回车

echo 中止关闭窗口

echo 重签直接回车

echo.

set /p signNow=

)

if "%signNow%" == "" (

echo 检测到java环境,正在对%zip%签名中...

echo.

title 签名进行中...

java -jar "%signJar%" "%pem%" "%key%" "%zip%" "%update%"

echo.

echo 完成.签名后的文件是%update%.

title 签名完成

)

echo.

echo 在adb连接操作中,有可能会发生服务假死情况,只能到任务管理器中结束它,重新使用bat

echo 本过程将会重置adb与手机的连接服务,所以如果你正在使用adb服务请稍后再继续

echo 如果在过程出错,有可能adb有问题

echo 如果过程无法找到设备,请检查usb线连接

echo.

echo 准备重启到recovery模式

pause

echo.

echo 重置adb服务到usb模式,或防止连接服务假死

%adb% kill-server

%adb% start-server

echo.

echo 下面是已经连接设备,如果列举设备为空,adb连接将会等待直到有设备可以连接,这时可以检查连接,或重新运行本bat

%adb% devices|find "recovery"

echo.

echo %ERRORLEVEL%

echo.

if "%ERRORLEVEL%" == "0" (

echo.

echo 发现已经处于recovery模式,无需重启

echo.

) else (

echo 尝试重启手机到revocery模式

%adb% reboot recovery

echo.

echo 设备已经进入revocery模式且准备好后再按继续

pause

%adb% kill-server

)

set sdZip=/sdcard/update.zip

echo 准备挂载sdcard,本机的是/dev/block/mmcblk0p1,不同机需要修改

%adb% shell mount /dev/block/mmcblk0p1 /sdcard

set pup=/tmp/update-binary

echo 上传用于更新的二进制文件%lup%到手机%pup%,并设置成可运行

%adb% push "%lup%" %pup%

%adb% shell chmod 0777 %pup%

echo.

echo 检查刷机执行文件是否上传好

echo.

%adb% shell ls %pup%

%adb% shell ls %pup%|find /I "No such"

echo.

echo %ERRORLEVEL%

echo.

if not "%ERRORLEVEL%" == "0" (

echo 刷机执行文件上传成功

) else (

echo 刷机执行文件上传失败

goto stop

)

%adb% shell ls %sdZip%|find /I "No such"

echo.

echo %ERRORLEVEL%

echo.

if not "%ERRORLEVEL%" == "0" (

echo 发现手机卡存在%sdZip%

echo 是否重新上传覆盖?

echo. 不传?输入任意字符回车

echo 重传?直接回车

echo.

set /p co=

)

if "%co%" == "" (

title %update%文件上传中...

echo.

echo %update%文件正在上传中...

echo.

%adb% push "%update%" %sdZip%

echo 上传结束.

echo.

title 上传结束

)

echo 下面准备开始刷机

pause

set log=%batDir%\recovery_update_log.txt

if exist "%log%" (

echo.

echo 发现存在刷机日志

echo 是否清空?

echo.

echo 保留?输入其它回车

echo 清空日志?直接回车

echo.

set /p cl=

if "%cl%" == "" (

echo. >%log%

)

)

echo. >>%log%

echo. >>%log%

echo 刷机日志于 %DATE% %TIME%>>%log%

echo. >>%log%

echo 正在刷机中...请稍候...

%adb% shell "%pup%" 2 2 %sdZip% >> %log%

echo 刷机结束

echo 刷机日志文件:%log%

start %log%

echo.

echo 准备重启设备到正常模式,回车立刻重启,否则直接关闭本窗口,注意继续本窗口将关闭

echo.

echo 请选择操作(1重启到正常模式; 其它不操作)

echo.

set /p re=

if "%re%" == "1" (

echo 正在重启中....

%adb% reboot

exit

) else (

exit

)

:stop

title 操作结束

pause

-----------------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值