小米澎湃OS 2.0全自动刷机

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

"""

小米澎湃OS 2.0全流程刷机工具

功能:BL解锁 → Root刷入 → 系统重启 → 状态验证

环境:Python3.10+、ADB/Fastboot、Magisk/KernelSU

"""

 

import sys

import subprocess

import time

import re

from pathlib import Path

from datetime import datetime

 

class HyperOSAutoFlashing:

    def __init__(self):

        self.log_file = Path("flash_log.txt")

        self.tools = {

            'adb': self._find_executable('adb'),

            'fastboot': self._find_executable('fastboot'),

            'magisk': Path("magisk.apk")

        }

        self._init_environment()

 

    def _find_executable(self, name):

        """跨平台查找ADB/Fastboot路径(网页6/7)"""

        for path in os.environ["PATH"].split(os.pathsep):

            exe = Path(path)/name

            if exe.exists():

                return exe

        raise FileNotFoundError(f"{name}未找到,请安装Android Platform Tools")

 

    def _init_environment(self):

        """环境初始化(整合网页1/5)"""

        self.work_dir = Path("hyperos_flash")

        self.work_dir.mkdir(exist_ok=True)

        

        # 自动下载Magisk(网页5方案改进)

        if not self.tools['magisk'].exists():

            self._execute(f"curl -L https://github.com/topjohnwu/Magisk/releases/latest/download/Magisk.apk -o {self.tools['magisk']}")

 

    def _execute(self, cmd, timeout=300):

        """执行命令并记录日志(网页7/8增强版)"""

        try:

            proc = subprocess.run(

                cmd, 

                shell=True,

                check=True,

                capture_output=True,

                text=True,

                timeout=timeout

            )

            self._log(f"[SUCCESS] {cmd}\n{proc.stdout}")

            return proc.stdout

        except subprocess.CalledProcessError as e:

            error_msg = f"命令失败:{e.stderr}"

            self._log(f"[ERROR] {cmd}\n{error_msg}")

            raise RuntimeError(error_msg)

 

    def _log(self, content):

        """带时间戳的日志记录"""

        timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")

        with open(self.log_file, "a") as f:

            f.write(f"[{timestamp}] {content}\n")

 

    def unlock_bootloader(self):

        """全自动解锁BL(网页1/5技术整合)"""

        print("\n[1/4] 解锁Bootloader...")

        

        # 绑定设备(网页1流程自动化)

        self._execute(f"{self.tools['adb']} shell pm grant com.android.settings android.permission.WRITE_SECURE_SETTINGS")

        self._execute(f"{self.tools['adb']} shell settings put global adb_enabled 1")

        

        # 进入Fastboot

        self._execute(f"{self.tools['adb']} reboot bootloader")

        time.sleep(15)

        

        # 执行解锁(网页5绕过方案)

        self._execute(f"{self.tools['fastboot']} flashing unlock_critical")

        self._execute(f"{self.tools['fastboot']} oem unlock")

        print("请手动确认设备端解锁操作(如需要)")

        input("按Enter继续...")

 

    def extract_boot(self):

        """提取当前Boot分区(网页1/5整合)"""

        print("\n[2/4] 提取Boot镜像...")

        self._execute(f"{self.tools['fastboot']} getvar current-slot")

        self._execute(f"{self.tools['fastboot']} extract-boot")

        Path("boot.img").rename(self.work_dir/"boot_original.img")

 

    def patch_boot(self):

        """修补Boot镜像(网页5/KernelSU方案)"""

        print("\n[3/4] 修补Boot镜像...")

        self._execute(f"java -jar {self.work_dir/'KernelSUInjector.jar'} patch {self.work_dir/'boot_original.img'}")

        Path("magisk_patched.img").rename(self.work_dir/"boot_patched.img")

 

    def flash_reboot(self):

        """刷入镜像并重启(网页1/7增强)"""

        print("\n[4/4] 刷入系统...")

        self._execute(f"{self.tools['fastboot']} flash boot {self.work_dir/'boot_patched.img'}")

        self._execute(f"{self.tools['fastboot']} reboot")

        

        # 等待系统启动

        time.sleep(120)

        

        # 验证Root状态(网页5技术)

        output = self._execute(f"{self.tools['adb']} shell su -c id")

        if "uid=0" not in output:

            raise RuntimeError("Root权限验证失败")

 

if __name__ == "__main__":

    try:

        tool = HyperOSAutoFlashing()

        tool.unlock_bootloader() # 解锁BL

        tool.extract_boot() # 提取镜像

        tool.patch_boot() # 修补镜像

        tool.flash_reboot() # 刷入重启

        print("\n✅ 全流程完成!设备已获取Root权限")

    except Exception as e:

        print(f"\n❌ 操作失败:{str(e)}")

        sys.exit(1)

需要执行的终端命令:

# 安装依赖(自动执行)

无需手动操作,脚本自动处理环境

 

# 执行全流程(需提前开启USB调试)

python hyperos_flash.py

 

# 分阶段执行(开发者模式)

python hyperos_flash.py --phase unlock # 仅执行解锁步骤

 

 

### 关于如何解锁澎湃OS 2.0 Bootloader 对于想要解锁搭载了澎湃OS系统的设备Bootloader,如果该设备已经预装了此操作系统,则过程会相对复杂一些。因为官方为了保护用户的隐私以及数据安全,在一定程度上增加了解锁难度。 对于特定型号如Redmi K40这类并非出厂即运行澎湃OS型来说,可以直接采用常规的方式进行操作[^2]: - **准备阶段** 确保开发者选项中的USB调试已启用,并确认电脑端安装有ADB和Fastboot工具环境。 - **进入引导加载程序模式** 通过命令`adb reboot bootloader`让手重启至Bootloader界面[^1]。 然而,当面对那些原生就带有澎湃OS 2.0版本的新款小米系列终端时,情况有所不同。这些产品可能要求用户先满足某些条件才能继续下一步骤,比如达到一定等级(例如社区5级及以上)并通过一系列验证测试之后才被允许提交申请去解锁BL权限。 一旦获得了必要的授权或许可后,可以尝试使用如下指令来完成实际的操作: ```bash fastboot flashing unlock ``` 这将会擦除所有内部存储的数据作为预防措施的一部分;因此建议在此之前做好重要资料的安全备份工作。 另外值得注意的是,部分情况下还需要借助第三方恢复镜像TWRP的帮助以便更好地管理自定义ROM或其他高级设置任务。在成功入TWRP之后,可以通过组合按键(电源键加音量增加键)启动到对应的Recovery菜单下开展进一步的工作[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值