Mi8刷机若干踩坑

时间:2022-07-23
本文章向大家介绍Mi8刷机若干踩坑,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

这个刷机的事情本来挺简单个事,但是我刷面具的时候,哪个面具是个坏包,之后的就触摸不正常了,就是点上去没有反应.很难受我又刷回去了miui然后再刷回来.本来是半个小时的事情,结果折腾一下午,晚上一点多才搞好.

整体思路很清就是眼睛瞎而已~因为是有10的底包.所以

注意解锁是在fastbbot下解锁,会丢失所有东西~

强烈建议刷机前把自己的小米账号退掉,就是我也不知道该怎么说,如果你在底包是miui的情况下进行内存块的刷写操作,你会发现sdcard这个目录是被加密的

淦,还有这种东西

miflash,点全部删除,保留是不清data分区.最后一个最不推荐.要重新解锁.

C:UsersyunswjDownloads浏览器dipper_images_V11.0.7.0.QEACNXM_20200310.0000.00_10.0_cn_d9c549214cdipper_images_V11.0.7.0.QEACNXM_20200310.0000.00_10.0_cn_d9c549214cdipper_images_V11.0.7.0.QEACNXM_20200310.0000.00_10.0_cn

线刷包,我不知道一堆东西套着压缩3遍是什么意思????

看看线刷包里面有什么

校验用的MD5

#!/usr/bin/env python
import os
import binascii
import xml.etree.cElementTree as ET
from xml.etree import ElementTree
from xml.dom import minidom
import re

import hashlib


def md5sum(filename, blocksize=65536):
    h = hashlib.md5()
    with open(filename, "rb") as f:
        for block in iter(lambda: f.read(blocksize), b""):
            h.update(block)
    return h.hexdigest()


def prettify(elem):
    """Return a pretty-printed XML string for the Element.
    """
    rough_string = ElementTree.tostring(elem, 'utf-8')
    reparsed = minidom.parseString(rough_string)
    return reparsed.toprettyxml(indent="  ")


def search_sec_level(filename):
    with open(filename, "rb") as file:
        try:
            while True:
                line = file.readline()
                if line:
                    a = re.match(".*PLATFORM_SECURITY_PATCH :=", line)
                    if a != None:
                        break
                else:
                    break
        finally:
            file.close()
    return line[6:43]


def gen_md5_xml():
    root_path = os.path.dirname(__file__)
    path = os.path.join(root_path, 'images')
    files = [os.path.join(path, f) for f in os.listdir(
        path) if os.path.isfile(os.path.join(path, f))]
    xml = os.path.join(root_path, "md5sum.xml")
    root = ET.Element("root")
    digests = ET.SubElement(root, "digests")
    for file in files:
        file = os.path.join(root_path, file)
        digest = ET.SubElement(
            digests, "digest", name=os.path.basename(file), hash="md5")
        digest.text = md5sum(file)

    sec_patch_level = ET.SubElement(root, "security-patch-level")
    security = ET.SubElement(sec_patch_level, "level")
    source_path = os.popen('echo $ANDROID_BUILD_TOP').read()
    sec_path = os.path.join(source_path[:-1], 'build/core/version_defaults.mk')
    security.text = search_sec_level(sec_path)
    xml_str = prettify(root)

    with open(xml, "w") as f:
        f.write(xml_str)


# ------------------------------------------------------------------------------
if __name__ == "__main__":
    gen_md5_xml()
里面是一段python脚本来校验的

运行一下,报错了.看看是什么情况

好像是缺了这个mk文件,比较长.局部截图了

https://android.googlesource.com/platform/build/+/master/Changes.md

这个是一份md格式的配置

不就是.....emmmm....makefile文件

bat是调用adb执行的命令

可以看的出来,bat的一开始都是做校验

对代码进行了对比

fastboot %* flash userdata %~dp0imagesuserdata.img || @echo "Flash userdata error" && exit /B 1

关键代码一行

还遇到了这个问题~

小米手机进入fastboot模式后,一连接刷机助手或者miflash就变成press any key to shutdown

解决方法:win10系统 连接的USB2.0接口,刷机成功。

下面代码用txt编辑保存,扩展名改成bat,右键管理员权限运行,完美解决fastboot掉的情况。

@echo off
reg add "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlusbflags18D1D00D0100" /v "osvc" /t REG_BINARY /d "0000" /f
reg add "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlusbflags18D1D00D0100" /v "SkipContainerIdQuery" /t REG_BINARY /d "01000000" /f
reg add "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlusbflags18D1D00D0100" /v "SkipBOSDescriptorQuery" /t REG_BINARY /d "01000000" /f
 
 
pause

成功~

???


@echo off

reg add HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlusbflags18D1D00D0100osvc 
reg add HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlusbflags18D1D00D0100SkipContainerIdQuery 
reg add HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlusbflags18D1D00D0100SkipBOSDescriptorQuery

pause

复原代码

@echo off
TITLE      小米8 一键刷入  Recovery工具 
color 3f
mode con cols=90 lines=29
echo.
ECHO. =================================================
echo. 小米8 一键刷入 TWRP Recovery工具 by yunswj
echo.
echo.           
echo.
echo     --按任意键继续
echo.
ECHO. =================================================
pause >nul
CLS
ECHO. =================================================
echo.
echo   按下面所述步骤进入fastboot模式:
echo.
echo.    1.首先需要先解锁手机(BL解锁)
echo.
echo.    2.同时按住音量下和开机键不放直到显示米兔画面后松手
echo.       
echo     3.屏幕会始终停留在米兔LOGO界面
echo.
echo.    4.完成上述步骤,将手机连接到电脑,按任意键继续
echo.
echo.
ECHO. =================================================
pause >nul
CLS
ECHO. =================================================
echo.
echo.
echo    是否看见如下提示:
echo.
echo.
echo         xxxxx fastboot
echo.
echo.
echo    如果看到以上提示,证明手机与电脑连接正常,按任意键正式开始刷入
echo.
echo    否则请关闭此窗口,并检查驱动是否正确安装,手机是否正确连接
echo.
echo    导入recovery时,请一定保证手机和电脑的连接正常
echo.
ECHO. =================================================
echo.
echo.
fastboot.exe devices
pause >nul
CLS
ECHO. =================================================
echo.
echo.
echo    是否看见类似如下提示
echo.
echo.
echo.   sending 'recovery' (15502 KB)...
echo.   OKAY [  0.500s]
echo.   writing 'recovery'...
echo.   OKAY [  0.560s]
echo.   finished. total time: 2.455s
echo.
echo    如果看到以上提示,按任意键正式开始导入
ECHO. =================================================
echo.
echo.
fastboot.exe flash recovery dipper.img
pause >nul
CLS
ECHO. =================================================
echo.
echo.
echo    是否看见类似如下提示,
echo.
echo.   downloading 'boot.img'...
echo.   OKAY [  0.838s]
echo.   booting...
echo.   OKAY [  0.025s]
echo.   finished. total time: 0.864s
echo.
echo    如果看到以上提示,证明刷入成功,按任意键重启
echo.
echo    此时千万不要关闭此窗口
echo.
echo.
ECHO. =================================================
echo.
echo.
fastboot.exe boot dipper.img
pause >nul
CLS
ECHO. =================================================
echo.
echo.
echo    恭喜你成功刷入了recovery!!
echo.
echo    耐心稍等片刻,手机会自动重启,按任意键关闭此窗口
echo.
echo.
ECHO. =================================================
echo.
echo.
pause >nul

说的好,我用橙狐.把以上保存为bat.执行.把img和adb放在这个bat的目录下.

优化

去掉wifi叉号标记

在国内的网络环境下,通过wifi联网之后,原生的wifi图标上会默认显示一个「叉号」。虽然能够正常联网,但对于强迫症来说,还是觉得很碍眼。

对于这个问题,原理性的解释是:

谷歌原生安卓系统当连接到移动数据网络或者WIFI网络的时候,其NetworkMonitor模块会向特定的服务器发起一个http的请求并利用收到的响应进行网络状态判断。由于谷歌的服务器被GFW屏蔽,所以导致没有返回值,这个时候谷歌安卓系统就会在信号或者wifi上打一个感叹号或叉号。

可以通过换成v2ex的验证方式来解决。在命令提示符中执行:

adb shell settings put global captive_portal_https_url https://www.google.cn/generate_204

然后开启飞行模式,再关闭飞行模式即解决!

执行命令:

~/test/pixel
➜ adb shell settings put global captive_portal_https_url https://www.google.cn/generate_204

~/test/pixel
➜

操作后:

果你想恢复的话,使用下面的命令:(未亲测)

adb shell settings delete global captive_portal_server
adb shell settings put global captive_portal_detection_enabled 1
adbpush文件时权限不够

在使用命令 adb push 将文件 twrp-pixel-installer-sailfish-3.2.3-1.zip 上传到手机时,可能由于权限问题而报错:

~/test/pixel
➜ adb push twrp-pixel-installer-sailfish-3.2.3-1.zip /
adb: error: failed to copy 'twrp-pixel-installer-sailfish-3.2.3-1.zip' to '/twrp-pixel-installer-sailfish-3.2.3-1.zip': remote couldn't create file: Read-only file system
twrp-pixel-installer-sailfish-3.2.3-1.zip: 0 files pushed. 22.7 MB/s (1048448 bytes in 0.044s)

我们可以通过 adb shell 命令来进入到手机的bash命令下,也可以直接在后面跟上bash命令来执行。进行验证:

adb shell :

~/test/pixel
➜ adb shell
sailfish:/ $
sailfish:/ $ ls
ls: ./verity_key: Permission denied
ls: ./init.rc: Permission denied
ls: ./postinstall: Permission denied
ls: ./init.usb.configfs.rc: Permission denied
ls: ./init.zygote64_32.rc: Permission denied
...
...

或者

adb shell mkdir tmp :

~/test/pixel
➜ adb shell mkdir tmp
mkdir: 'tmp': Read-only file system

发现,果然是当前用户的权限不够。

经过验证,发现当前用户对 /sdcard 目录是有权限进行文件或目录的操作的。

~/test/pixel
➜ adb shell
sailfish:/ $ cd sdcard/
sailfish:/sdcard $ ls
Alarms Android DCIM Download Movies Music Notifications Pictures Podcasts Ringtones
sailfish:/sdcard $ mkdir tmp
sailfish:/sdcard $ ls
Alarms Android DCIM Download Movies Music Notifications Pictures Podcasts Ringtones tmp

sailfish:/sdcard $ rm -rf tmp
sailfish:/sdcard $ ls
Alarms Android DCIM Download Movies Music Notifications Pictures Podcasts Ringtones
sailfish:/sdcard $ exit

Magisk更新

将 Magisk 从 v17.2 版本升级到 v19.3 版本。

可以从 Magisk 下载最新版本的Magisk的zip压缩包。

第一步 adb连接

要确保手机设备通过adb正确连接。如果提示为 offline 则需要重新设置手机的连接。

➜ adb devices
List of devices attached
FA6XXXXXXX53    offline

直到出现 device 时,说明手机正确连接了。

➜ adb devices
List of devices attached
FA6XXXXXXX53	device

一般出现 offline 的情况可能是usb数据线的问题,或者连接设置的问题。

这里我的解决方法是:

  1. 断开usb设备连接
  2. 执行命令 adb kill-server 来停止adb服务
  3. 执行命令 adb start-server 来重新运行adb服务
  4. 重新通过usb连接手机设备
  5. 打开 开发者选项 ,重新勾选 usb调试,在弹出的窗口选择 确定
  6. 再次执行命令 adb devices,发现显示 device
第二步 拷贝Magisk文件

通过 adb push 命令将新版的Magisk文件拷贝到手机设备中:

➜ adb push Magisk-v19.3.zip /sdcard/tmp/
Magisk-v19.3.zip: 1 file pushed. 21.0 MB/s (5348187 bytes in 0.243s)

这里我之前使用的是 Magisk-v17.2.zip 版本,现在要更新到 Magisk-v19.3.zip 版本。

第三步 进入Bootloader

执行 adb reboot bootloader 进入 Bootloader 界面。

第四步 进入临时Twrp

通过 twrp*.img 文件,启动进入临时Twrp:

➜ fastboot boot twrp-3.2.3-1-sailfish.img
ERROR: Couldn't create a device interface iterator: (e00002bd)
downloading 'boot.img'...
OKAY [  0.712s]
booting...
OKAY [  0.893s]
finished. total time: 1.605s
第五步 安装Magisk

进入 Twrp 页面后,滑动下面的 Swipe to Allow Modifications 滑条,进入Twrp操作页面。

选择 Install – 找到目录 /sdcard/tmp/ – 选择 Magisk-v19.3.zip 文件,滑动 Swipe to confirm Flash 来安装。

安装完成后,点击下面的 Reboot System 按钮,进入下一步。

之后,直接点击中间的 Do Not Install 等待手机重启进入系统即可。