├── docs ├── docs │ ├── brush.md │ ├── gsi.md │ ├── 9008flash.md │ ├── mtk_vul.md │ ├── optimize.md │ ├── partition.md │ ├── kernelsu.md │ ├── index.md │ ├── unbrick.md │ └── flash.md ├── index.md └── .vitepress │ ├── theme │ └── index.js │ └── config.ts ├── vercel.json ├── assert ├── cover.gif └── logo.png ├── .gitignore ├── .github └── workflows │ └── deploy.yml.no ├── package.json ├── README.md ├── old ├── Root │ ├── Savebrick.md │ ├── Huawei.md │ ├── Brushcard.md │ ├── Deep.md │ ├── Wirebrush.md │ ├── index.md │ └── Gsi.md ├── prepare │ ├── index.md │ ├── bootloader.md │ └── term.md ├── about.md ├── kernel.md ├── module.md └── optimize.md ├── code_of_conduct.md ├── LICENSE └── yarn.lock /docs/docs/brush.md: -------------------------------------------------------------------------------- 1 | # 施工中 -------------------------------------------------------------------------------- /docs/docs/gsi.md: -------------------------------------------------------------------------------- 1 | # 施工中 -------------------------------------------------------------------------------- /docs/docs/9008flash.md: -------------------------------------------------------------------------------- 1 | # 施工中 -------------------------------------------------------------------------------- /docs/docs/mtk_vul.md: -------------------------------------------------------------------------------- 1 | # 施工中 -------------------------------------------------------------------------------- /docs/docs/optimize.md: -------------------------------------------------------------------------------- 1 | # 施工中 -------------------------------------------------------------------------------- /docs/docs/partition.md: -------------------------------------------------------------------------------- 1 | # 施工中 -------------------------------------------------------------------------------- /vercel.json: -------------------------------------------------------------------------------- 1 | { 2 | "github": { 3 | "silent": true 4 | } 5 | } -------------------------------------------------------------------------------- /assert/cover.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sudoskys/Root/HEAD/assert/cover.gif -------------------------------------------------------------------------------- /assert/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sudoskys/Root/HEAD/assert/logo.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # 禁止忽略site,此为Ci构建目录 2 | 3 | # site/**/* 4 | .cache 5 | .idea 6 | /run.log 7 | -------------------------------------------------------------------------------- /docs/docs/kernelsu.md: -------------------------------------------------------------------------------- 1 | # KernelSU 2 | 3 | KernelSU 是 Android GKI 设备的 root 解决方案,它工作在内核模式,并直接在内核空间中为用户空间应用程序授予 root 权限。 4 | 5 | 请访问 KernelSU 文档: https://kernelsu.org/ 。 -------------------------------------------------------------------------------- /docs/docs/index.md: -------------------------------------------------------------------------------- 1 | # 前言 2 | 3 | 本教程包含 `Android` 设备的 `Root` 与 `刷机` 教程,以及 `Magisk` 模块的使用方法和注意事项,供刷写机器时进行速查或者作为入门教程。 4 | 5 | 仓库地址是 [sudoskys/Root](https://github.com/sudoskys/Root/) 6 | 7 | ::: warning 8 | 刷写机器有风险,刷机前请做好备份。 9 | 因为机型众多,本教程难免疏漏,请多多询问同机型用户。如果对自己的能力感到怀疑,请委托专人刷写机器。 10 | 作者不会对刷机过程中的任何损失负责。 11 | ::: 12 | -------------------------------------------------------------------------------- /docs/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: home 3 | 4 | title: Root Docs 5 | editLink: true 6 | 7 | hero: 8 | name: RootDocs 9 | text: 刷写机器指南和教程 10 | tagline: 为快速刷写安卓机器编写的速查手册 11 | actions: 12 | - theme: brand 13 | text: 阅读指南 14 | link: /docs 15 | - theme: brand 16 | text: KernelSU 17 | link: https://kernelsu.org/zh_CN 18 | - theme: alt 19 | text: View on GitHub 20 | link: https://github.com/sudoskys/Root/ 21 | 22 | features: 23 | - icon: 🛠️ 24 | title: 重新上手 25 | details: 太久没刷机,忘记了怎么刷?打开本文档,重新快速上手。 26 | - icon: 📚 27 | title: 科普知识 28 | details: 本文档包含了刷机所需的基础知识,让你更好的理解这些操作。 29 | --- -------------------------------------------------------------------------------- /.github/workflows/deploy.yml.no: -------------------------------------------------------------------------------- 1 | name: Deploy 2 | permissions: 3 | contents: write 4 | on: 5 | push: 6 | branches: 7 | - main 8 | 9 | jobs: 10 | deploy: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/checkout@v3 14 | with: 15 | fetch-depth: 0 16 | - uses: actions/setup-node@v3 17 | with: 18 | node-version: 20 19 | cache: yarn 20 | - run: yarn install 21 | 22 | - name: Build 23 | run: yarn docs:build 24 | 25 | - name: Deploy 26 | uses: peaceiris/actions-gh-pages@v3 27 | with: 28 | github_token: ${{ secrets.GITHUB_TOKEN }} 29 | publish_dir: docs/.vitepress/dist 30 | # cname: example.com # if wanna deploy to custom domain 31 | 32 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "docs", 3 | "version": "1.0.0", 4 | "description": "Root Docs", 5 | "type": "module", 6 | "private": true, 7 | "license": "MPL-2.0", 8 | "repository": { 9 | "type": "git", 10 | "url": "git+https://github.com/sudoskys/root.git" 11 | }, 12 | "bugs": { 13 | "url": "https://github.com/sudoskys/root/issues" 14 | }, 15 | "engines": { 16 | "node": ">=20", 17 | "pnpm": ">=8" 18 | }, 19 | "devDependencies": { 20 | "markdown-it": "^14.0.0", 21 | "markdown-it-mathjax3": "^4.3.2", 22 | "open-cli": "^8.0.0", 23 | "vitepress": "1.0.0-rc.35", 24 | "vitepress-plugin-search": "^1.0.4-alpha.22" 25 | }, 26 | "scripts": { 27 | "docs:dev": "vitepress dev docs", 28 | "docs:build": "vitepress build docs", 29 | "docs:serve": "vitepress serve docs" 30 | }, 31 | "dependencies": { 32 | "pagefind": "^1.0.4", 33 | "vitepress-plugin-comment-with-giscus": "^1.1.12", 34 | "vitepress-plugin-pagefind": "^0.2.10" 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![gif](https://raw.githubusercontent.com/sudoskys/Root/main/assert/cover.gif) 2 | ------------------------------------ 3 | 4 |

5 | PYTHON 6 | Stars 7 | Issues 8 | 11 |

12 | 13 |

IdontKnowRoot

14 | 15 | 每当换手机时,你不必再去各个论坛寻找刷机教程,只需要打开本文档,即可重新快速上手。为速查设计。 16 | 17 | 请访问 **[在线文档](https://root.dianas.cyou/)** 阅读内容。 18 | 19 | **其他相关文档** 20 | 21 | - [KernelSU-基于内核支持的Root方案](https://github.com/tiann/KernelSU) 22 | 23 | - [手机品牌型号汇总](https://github.com/KHwang9883/MobileModels) 24 | 25 | - [lineageos Wiki](https://wiki.lineageos.org/pages) 26 | 27 | ## 改进文档 28 | 29 | 请不要在 `Issue` 发布求助,这里只接受文档改进相关的问题。 30 | 31 | 如果你刷写过程发现文档缺漏,欢迎向知识库提交补充或修改。只需要在仓库页面按下键盘的 `.` 即可编辑。 32 | 33 | ## 待办 34 | 35 | - [ ] 自动问答 Gpt 36 | 37 | 托管在 ![Vercel](https://img.shields.io/badge/Vercel-black?style=flat&logo=Vercel&logoColor=white) 38 | -------------------------------------------------------------------------------- /docs/docs/unbrick.md: -------------------------------------------------------------------------------- 1 | # 救砖 2 | 3 | 刷机操作不当或后续系统升级,可能会导致手机无法正常开机或失去 ROOT 权限,这时候就需要预防和救砖。 4 | 5 | 刷机损坏的四个程度: 6 | 1. 屏幕可亮,按键有反应,连接电脑有反应,开机卡住。 7 | 2. 屏幕不亮,按键有反应,连接电脑有反应。 8 | 3. 屏幕不亮,按键无反应,连接电脑有反应。 9 | 4. 完全没有反应! 10 | 11 | ::: info 求助 12 | 如果你的手机出现了以上情况,可以在各种论坛求助。但是请提供以下信息: 13 | 14 | 1. 机型 15 | 2. 刷机包来源 16 | 3. 刷机包版本 17 | 4. 状态描述 18 | 5. 详细操作步骤 19 | ::: 20 | 21 | ## 禁用异常模组 22 | 23 | 如果需要,请安装救砖模组,此模组会在重复开机后禁用所有模组,以防止模组导致的无限重启。你还可以备份 Root 后的系统,以便在出现问题时恢复。 24 | 25 | 假如你现在已经因为安装异常模组无限重启,可以通过以下方法禁用模组: 26 | 27 | - 对于 ADB,链接手机运行 `adb wait-for-device shell magisk --remove-modules` 禁用模组,此条指令将会在手机启动过程中生效。 28 | 29 | - 可以在 cache 目录下面手动建立一个 `disable_magisk` 文件,禁用后进入系统删除异常模组。参考 [这篇帖子](https://www.v2ex.com/t/567090) 30 | 31 | ## MTK 恢复 32 | 33 | 如果你操作 MTK 深刷时备份了。自救命令,`python mtk wl out` 写入 out 文件夹的所有镜像。 34 | 35 | ## 快速线刷中出现问题 36 | 37 | 请核对你的刷机包与手机自带的 `BOOT` 版本是否匹配,是否下错了 **全量ROM包**,如果版本错误,请在官方网站寻找正确版本的 ROM 包或者提取他人同机型的 `boot.img`。 38 | 39 | 获取原来的的 `boot.img` 和 `vbmeta.img` 后,刷回去,大概率可以正常开机。 40 | 41 | 刷完后卡在第一屏或重启,可以进 `RECOVERY` 里面,双WIPE (**清除手机数据) 之后再刷机就可以解决问题**,一些ROM包会提示不用WIPE,但如果你出现上述情况,也可以双WIPE试试。 42 | 43 | ## 华为救砖 44 | 45 | 如果你把华为手机刷成砖了,可以尝试短接进入深度测试模式,然后线刷。或者求助淘宝或华为客服。 46 | 47 | 具体参考酷安 [某贼](https://www.coolapk1s.com/feed/26205215)。 48 | 49 | ::: tip 相关工具 50 | 51 | [华为线刷工具](https://miao202.lanzouj.com/ihGpU09qfebg) 52 | 53 | [华为解锁相关驱动与工具](https://miao202.lanzouj.com/igAzW09qew7e) 54 | 55 | ::: 56 | 57 | -------------------------------------------------------------------------------- /docs/.vitepress/theme/index.js: -------------------------------------------------------------------------------- 1 | // .vitepress/theme/index.js 2 | import DefaultTheme from 'vitepress/theme'; 3 | import giscusTalk from 'vitepress-plugin-comment-with-giscus'; 4 | import { useData, useRoute } from 'vitepress'; 5 | 6 | export default { 7 | ...DefaultTheme, 8 | enhanceApp(ctx) { 9 | DefaultTheme.enhanceApp(ctx); 10 | // ... 11 | }, 12 | setup() { 13 | // 获取前言和路由 14 | const {frontmatter} = useData(); 15 | const route = useRoute(); 16 | // 评论组件 - https://giscus.app/ 17 | giscusTalk({ 18 | repo: 'sudoskys/Root', 19 | repoId: 'R_kgDOH0E2Jg', 20 | category: 'Q&A', // 默认: `General` 21 | categoryId: 'DIC_kwDOH0E2Js4CQ2Y8', 22 | mapping: 'pathname', // 默认: `pathname` 23 | inputPosition: 'top', // 默认: `top` 24 | lang: 'zh-CN', // 默认: `zh-CN` 25 | lightTheme: 'preferred_color_scheme', // 默认: `light` 26 | darkTheme: 'transparent_dark', // 默认: `transparent_dark` 27 | loading: 'lazy', // 默认: `false` 28 | reactionsEnabled: '1', // 默认: `true` 29 | emitMetadata: '0', // 默认: `true` 30 | 31 | }, { 32 | frontmatter, route 33 | }, 34 | // 是否全部页面启动评论区。 35 | // 默认为 true,表示启用,此参数可忽略; 36 | // 如果为 false,表示不启用。 37 | // 可以在页面使用 `comment: true` 前言单独启用 38 | true 39 | ); 40 | } 41 | }; -------------------------------------------------------------------------------- /old/Root/Savebrick.md: -------------------------------------------------------------------------------- 1 | # 救砖 2 | 3 | 我们将手机的变砖分为四个程度 4 | 5 | 1. 能亮屏,按键有反应 开机卡住 连接USB电脑有反应 6 | 2. 黑屏 ,按键有反应 连接电脑有反应 7 | 3. 屏幕不亮 按键无反应 连接电脑有反应 8 | 4. 砖头什么样 手机什么样---黑砖 9 | 10 | ## 突发救砖 11 | 12 | 1. 刷机包与手机自带的BOOT版本不匹配,这个时候只需要从ROM包里提取boot.img文件单刷,然后再重新刷机就好了。 13 | 14 | 2. 刷完后卡在第一屏或重启,可以进 RECOVERY 里面,双WIPE (**清除手机数据) 之后再刷机就可以解决问题**,一些ROM包会提示不用WIPE,但如果你出现上述情况,也可以双WIPE试试。 15 | 16 | 3. 安装失败也不要怕,操作中你应该保留了一份原来的镜像,按照最后一步的方法将原来的镜像重新刷回去就能正常开机。 17 | 18 | 4. 如果你实在不行了,那么准备好保存好的原始 boot.img 和 vbmeta.img 刷入。 19 | 20 | ## 华为深刷救砖[^43] 21 | 22 | 这里还是酷安@某贼的教程 23 | 24 | [华为线刷工具](https://miao202.lanzouj.com/ihGpU09qfebg) 25 | 26 | [华为解锁相关驱动与工具](https://miao202.lanzouj.com/igAzW09qew7e) 27 | 28 | !!! info 29 | 华为官方包一般是一个压缩包的形式,我们需要解压使用。 30 | 解压后里面还可能有若干层压缩包,需要继续解压,直到解压出UPDATE.APP(大包)和update_sd_XXX-XXXX_XXX_cn.app(小包,只需要解压对应你手机型号的就好。EMUI4及以前的系统包是没有小包的,只有一个大包。 31 | 32 | 首先将手机连接电脑,打开短接图查看器,搜索你的手机,然后点击查看相应短接图(如果你的手机已经处于深刷,则可以免去拆机这一步)。 33 | 34 | !!! help 35 | 有些图不是短接图。一般注明一个或两个点位的是短接图。 36 | 37 | 如果图上标出的是两个点,就用镊子短接这两个点,如果只有一个就短接这个点和旁边的保护罩(或者悬空也可以),然后手机会黑屏进入深刷模式,电脑任务管理器会显示端口(如果显示的是未知设备USB_SER,就说明驱动没有安装好)。 38 | 39 | 然后镊子可以松开了。打开华为线刷工具,首次打开可能弹登陆框,关掉重开就好了。 40 | 41 | 右侧切换到救砖写底层选项卡,选择你的处理器类型(一定不要选错),点击下方开始。然后会自动写入临时解锁的底层。 42 | 43 | 完成后手机会自动重启到Fastboot模式,设备管理器显示Android Bootloader Interface或Android Sooner Single ADB Interface设备。 44 | 45 | 然后切换到线刷降级选项卡,点击右下方“...”按钮选择你下载的官方包的大包(UPDATE.APP),端口选项改成Fastboot。 46 | 47 | 点击开始后,前面几个分区会失败,后面的都会成功。刷的时间也很长,请耐心等待,刷好后手机会自动重启。 48 | 49 | 但是这样一般是不能开机的,长按电源键,音量加和音量减三键,重启到升级模式(手机显示正在安装升级包5%),在线刷工具里选择配套的小包,端口改成自动(Auto) 点击开始。刷入完成后重启手机一般就可以正常开机了。 50 | 51 | 如果刷入失败或成功但仍然不能正常开机,可以在官方Recovery里恢复出厂,或者在eRecovery下载最新包恢复,或者进Fastboot连接电脑华为助手修复系统。某些用华为设备魔改的学习系统也可以用此方法刷回正常官方系统。 52 | 53 | !!! info 54 | 在BL锁已经解锁的情况下,可以尝试线刷关键分区 system,boot,recovery,cust 实现救砖。 55 | 56 | [其他方法](https://www.coolapk1s.com/feed/26205215) 57 | 58 | ## 安装模块变砖防护策略 59 | 60 | - 安装 MM管理器 或 自动神仙救砖 插件 61 | - 备份 Root 后的系统 62 | 63 | 移除模块重新开机。 64 | 65 | 而如果你因为安装了未知模块而翻车无法顺利进入系统,请先冷静下来:解决此类问题有一个万能的命令 `adb wait-for-device shell magisk --remove-modules`,此条指令将会在手机启动过程中生效。 66 | 67 | 如果没有安装救砖模块,也可以在 cache 目录下面手动建立一个 `disable_magisk` 文件,禁用掉进系统,进了系统再把插件删了。参考 [这篇帖子](https://www.v2ex.com/t/567090) 68 | 69 | 在后面模块那节中也有详细叙述。 70 | 71 | ## MTK恢复 72 | 73 | 如果你操作深刷时备份了。自救命令,`python mtk wl out` 写入 out 文件夹的所有镜像。 74 | -------------------------------------------------------------------------------- /old/prepare/index.md: -------------------------------------------------------------------------------- 1 | # 快问快答 2 | 3 | ## 我的手机能 Root 吗? 4 | 5 | 第一看手机厂商能不能解锁 Bootloader ,第二看你使用的机型是否有 全量系统包 或者 对应的第三方Recovery包. 6 | 7 | 如果不是特别小众或厂商故意封锁,大部分手机都可以 Root. 8 | 9 | - 除了小米、一加、Google 等品牌之外,大多数的品牌可能会在解锁 Bootloader 后失去保修(如 OPPO、真我、三星、索尼、摩托罗拉),还有的可能会导致某些功能的永久失效(如三星解锁后会物理熔断 Knox,导致无法使用三星支付。 10 | 11 | ## 尝试 KernelSU 12 | 13 | [基于内核支持的Root方案](https://github.com/tiann/KernelSU),KernelSU 有官方文档,在 [这里](https://kernelsu.org/zh_CN/guide/installation.html) 14 | 15 | ## 等一下,你想 Root 模拟器? 16 | 17 | 模拟器一般自带 Root,但是这个 Root 提供的功能有限。而面具相比于模拟器自带的 Root,可以额外使用面具的模块,还可以通过模块阻止 App 检测手机应用。 18 | 19 | [Magisk Delta](https://huskydg.github.io/magisk-files/) 支持 Android 7+ 模拟器:NoxPlayer、MEmu、LDPlayer 等平台,可以将 Magisk 安装到 Magisk 应用程序的系统分区中。 20 | 21 | [initrd-magisk](https://github.com/HuskyDG/initrd-magisk) 可以将 Magisk 集成到 Android-x86 项目中,[它的 Wiki](https://github.com/HuskyDG/initrd-magisk/wiki) 22 | 23 | ## 等一下,你想 Root Windows WSA? 24 | 25 | 请使用 [MagiskOnWSALocal](https://github.com/LSPosed/MagiskOnWSALocal) 项目。 26 | 27 | ## 不能Root,但是想用 28 | 29 | 假如你经过后面的尝试,发现厂商锁住了 Bootloader,魔改了分区,锁定了端口,甚至把系统组件放进了 Data里... 就是不能Root... 30 | 31 | 但是我好想用模块啊!!! 32 | 33 | 答:你可以去试一下 LSPatch?它可以把模块打包进应用里! 34 | 35 | >LSPatch: A non-root Xposed framework extending from LSPosed 36 | 37 | 想使用它很简单,但是它只支持 9 以上的安卓系统。下面是它的使用教程。 38 | 39 | - [简单的 LSPatch 使用教程](https://duzhaokun123.github.io/2022/05/06/simple-lspatch-guide.html#q0-lspatch-%E6%98%AF%E4%BB%80%E4%B9%88) 40 | 41 | - [项目与下载地址](https://github.com/LSPosed/LSPatch) 42 | 43 | - [一个教程](https://www.jipa.work/lspatch) 44 | 45 | ## 本节参考 46 | 47 | ``` 48 | [^1]:**所需资料打包** 49 | 50 | [^3]:[Android玩家必备神器入门:从零开始安装Magisk](https://sspai.com/post/67932) 51 | 52 | [^17]:[一些常识基础](https://mi.fiime.cn/tutorial) 53 | 54 | [^28]:[联发科不建议玩机](https://www.coolapk1s.com/feed/37080982) 55 | 56 | [^30]:[简单认识手机各个分区](https://www.coolapk1s.com/feed/38367093) 57 | 58 | [^33]:[Android-Root原理分析及防Root新思路](https://blog.csdn.net/hsluoyc/article/details/50560782) 59 | 60 | [^36]:[Bootloader原理](https://www.zhihu.com/question/47496619/answer/195494376) 61 | 62 | [^39]:[为什么内存不叫运存?](https://www.zhihu.com/question/327171923/answer/716602933) 63 | 64 | [^41]:[[新手必看]华为刷机你一定要知道的](https://zhuanlan.zhihu.com/p/416456337) 65 | 66 | [^42]:[部分华为麒麟手动获取BL解锁码](https://zhuanlan.zhihu.com/p/397173427) 67 | 68 | [^45]:[关于ProjectTreble和AndroidGSI](https://bbs.liuxingw.com/t/9315/2.html) 69 | 70 | ``` 71 | -------------------------------------------------------------------------------- /docs/.vitepress/config.ts: -------------------------------------------------------------------------------- 1 | // @ts-ignore 2 | import {createRequire} from 'module' 3 | import {defineConfig} from 'vitepress' 4 | import {pagefindPlugin} from 'vitepress-plugin-pagefind' 5 | // https://vitepress.dev/reference/site-config 6 | 7 | // @ts-ignore 8 | export default defineConfig({ 9 | ignoreDeadLinks: [ 10 | // ignore exact url "/playground" 11 | '/playground', 12 | // ignore all localhost links 13 | /^https?:\/\/localhost/, 14 | // ignore all gov.cn links 15 | /.*\.gov\.cn/, 16 | // ignore all links include "/repl/"" 17 | /\/repl\//, 18 | // custom function, ignore all links include "ignore" 19 | (url) => { 20 | // @ts-ignore 21 | return url.toLowerCase().includes('ignore') 22 | } 23 | ], 24 | lang: 'zh-CN', 25 | title: 'Root Docs', 26 | base: "/", 27 | description: 'Teach people how to master their own Phone', 28 | lastUpdated: true, 29 | cleanUrls: true, 30 | locales: { 31 | root: { 32 | label: 'Chinese', 33 | lang: 'zh', 34 | link: '/' 35 | } 36 | }, 37 | head: [ 38 | ['meta', {name: 'theme-color', content: '#4b56c1'}] 39 | ], 40 | vite: { 41 | plugins: [pagefindPlugin()], 42 | }, 43 | themeConfig: { 44 | nav: navBar(), 45 | siteTitle: 'Root My Phone', 46 | logo: '', 47 | sidebar: { 48 | '/': sidebarGuide(), 49 | }, 50 | editLink: { 51 | pattern: 'https://github.com/sudoskys/Root/edit/main/docs/:path', 52 | text: 'Edit On GitHub' 53 | }, 54 | socialLinks: [ 55 | {icon: 'github', link: 'https://github.com/sudoskys/Root'} 56 | ], 57 | footer: { 58 | message: 'Released under the GFDL License.', 59 | copyright: 'Copyright © 2022-present Us' 60 | }, 61 | lastUpdated: { 62 | text: 'Updated at', 63 | formatOptions: { 64 | forceLocale: true, 65 | }, 66 | }, 67 | outline: [1, 3], 68 | }, 69 | } 70 | ) 71 | 72 | 73 | function navBar() { 74 | return [ 75 | // {text: 'Deploy Guide', link: '/docs/getting-started', activeMatch: '/docs/'}, 76 | { 77 | text: "About Docs", 78 | items: [ 79 | { 80 | text: 'Changelog', 81 | link: 'https://github.com/sudoskys/Root/pulls?q=' 82 | } 83 | ] 84 | } 85 | ] 86 | } 87 | 88 | function sidebarGuide() { 89 | return [ 90 | { 91 | text: '基础指南', 92 | collapsed: false, 93 | items: [ 94 | {text: '快速刷机', link: '/docs/flash'}, 95 | {text: '救砖', link: '/docs/unbrick'}, 96 | {text: '调整环境', link: '/docs/optimize'}, 97 | {text: '卡刷教程', link: '/docs/brush'}, 98 | {text: '9008 刷写', link: '/docs/9008flash'}, 99 | {text: 'MTK芯片漏洞', link: '/docs/mtk_vul'}, 100 | ] 101 | }, 102 | { 103 | text: '知识读本', 104 | collapsed: false, 105 | items: [ 106 | {text: '关于分区', link: '/docs/partition'}, 107 | {text: '刷写 GSI 通用镜像', link: '/docs/gsi'}, 108 | {text: 'KernelSu 方案', link: '/docs/kernelsu'}, 109 | ] 110 | } 111 | ] 112 | } 113 | 114 | 115 | -------------------------------------------------------------------------------- /old/prepare/bootloader.md: -------------------------------------------------------------------------------- 1 | # 准备 2 | 3 | !!! danger 4 | 刷机有风险,出事我不管。 5 | 6 | 先下载一个 [Mt管理器](https://www.coolapk.com/apk/bin.mt.plus),用来执行文件操作。 7 | 8 | 然后在 [Magisk仓库](https://github.com/topjohnwu/Magisk/releases/latest/) 安装最新版本的 Magisk,如果不能下载请复制Github的 apk 链接请填入[镜像站](https://ghproxy.com/) 下载 9 | 10 | ## 准备设备 11 | 12 | 本教程用到的工具我**已经打入附带的文件包** [^1] 13 | 14 | ### 提前注意 15 | 16 | **安卓系统的版本需要是 5.0~12.0 之间 (2022)** 17 | 18 | !!! warning "注意" 19 | **解锁BL或救砖都会让你的文件被清空,需要备份** 20 | 21 | !!! warning "注意" 22 | - 解锁设备将允许修改系统重要组件,并有可能在一定程度上导致设备受损 23 | - 解锁后设备安全性将失去保证 24 | - 解锁后部分对系统安全性依赖高的功能和服务失效 25 | - 解锁后部分系统功能遭到修改后,将影响系统新版本升级 26 | - 解锁后由于刷机导致的硬件故障,售后维修网点可以按非保修处理 27 | - 三星设备解锁后会永久性熔断 KNOX 安全认证 28 | - 大部分手机的版权认证 DRM 等级也会从 L1 下降至 L3、无法通过 Play 商店认证等。 29 | - 谷歌安全认证下降 30 | 31 | 不建议你在主力机上解锁 Bootloader,而且,如果厂商明确表示不能解锁 Bootloader ,**请放弃**。如果一定要刷机并且报着变砖的觉悟,可以尝试**深刷**强解。 32 | 33 | ### 准备驱动文件 34 | 35 | 准备你的手机对应的机型的驱动文件,文件包提供 Vivo 和 Oppo 的两种驱动文件[1^]。 36 | 个人建议下载一个泛用型驱动 [universal adb drivers](https://adb.clockworkmod.com/)。少数情况下不能识别的话,需要我们用「手机厂商名 + adb driver」的关键词搜索得到相关的下载和安装教程。 37 | 38 | 安装完驱动请重启。 [相关手机驱动下载-FiimeROM](https://mi.fiime.cn/qudong) 39 | [相关驱动站点](https://kamiui.ml/E52shuaji/) 40 | 41 | !!! tip "**对于非深刷玩家如何检查是否链接?**" 42 | 💡 重启后在设备开机状态下连接电脑,打开终端,输入`adb devices`,如果返回了设备名称,说明 adb 配置完成;用 `adb reboot bootloader`进入 fastboot 界面(这步不适用fastbootd设备,即安卓十),键入 `fastboot reboot`后,若设备重启,说明 fastboot 正常。 43 | 44 | ### 准备设备和平台工具 45 | 46 | Win7 或以上电脑一台,能传输文件的数据线一条(**最好是原装线,不能用充电线**),电脑下载解压[安卓平台文件包](https://dl.google.com/android/repository/platform-tools_r33.0.2-windows.zip)或[Linux版本安卓平台工具包](https://dl.google.com/android/repository/platform-tools-latest-linux.zip)或[Mac版本](https://dl.google.com/android/repository/platform-tools-latest-darwin.zip),退出所有手机助手类软件。 47 | 48 | 解压工具包,你会看到 adb 和 fastboot ,这是我们针对 Android 设备进行高级调试和安装的工具。 49 | 50 | 如果你不想配置ADB全局环境的话,以后执行 Adb 命令需要在工具目录下,按住 Shift 右键鼠标打开终端,命令替换为`.\adb`或者`.\fastboot`,如果需要配置全局环境,请按照[这篇文档](https://www.sunzn.com/2018/08/02/Windows-10-%E4%B8%8B%E9%85%8D%E7%BD%AE-ADB-%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F/)配置。 51 | 52 | Linux 需要使用其自带包管理器安装 `android-platform-tools` 53 | 54 | !!! tip "提示[^3]" 55 | 如果你已经安装了 [choco](https://chocolatey.org/) 或 [homebrew](https://brew.sh/) 等包管理工具的话,Windows 输入`choco install adb universal adb-drivers -y`,Mac 输入 `brew install android-platform-tools`能最方便的完成 adb 和 fastboot 的配置。Windows 用户可以参照  [Windows 操作系统下的 ADB 环境配置](https://sspai.com/post/40471) 这篇文章;macOS 用户可以尝试  [此脚本](https://github.com/corbindavenport/nexus-tools) 或是参考 [使用 Mac 为 Android 手机刷原生系统](https://sspai.com/post/38535) 进行手动配置。最后最最不济,可以尝试在 Google  [开发者页面](https://developer.android.com/studio/releases/platform-tools?hl=zh-cn) 下载对应 adb 包,解压后在对应的目录下执行指令亦可,或者是尝试 [WebADB](https://app.webadb.com/#/) 或  [adb 在线执行器](https://adb.http.gs/) 这样的在线 adb 工具,比较考验浏览器的兼容性。 56 | 57 | 然后打开手机的USB调试开关允许计算机调试,确认你的**驱动线和驱动**都**没有问题**! 58 | 59 | !!! info 60 | 通过 `adb devices` 命令确认已经连上手机。 61 | 62 | ### 准备申请解锁BL 或 深度测试 63 | 64 | >旧芯片可尝试深刷强行解锁 65 | 66 | BL 是 bootloader 的简称 就是 手机开机时,最先运行的小程序:开机引导程序 ,Bootloader 锁,主要是在引导过程中对系统签名,内核签名及 Recovery 签名进行检验,如果签名不一致,即终止引导。绿机器人儿用它来进行开机自检和初始化手机硬件,它会指引手机找到系统分区并启动操作系统,相当于电脑上的BIOS。 67 | 68 | 而厂商,通常会对手机的bootloader上锁,这样它就只能运行厂商认证过的操作系统和recovery了。如果boatloader发现要运行的系统不是指定的系统,就会阻止它运行。 69 | 70 | 不同的手机解锁方式不同,你甚至可以去线下店让服务人员解锁。或者从自己的社区中获取本机型的解锁信息。部分手机解锁很麻烦,比如华为,想要解锁只能去淘宝买解锁码,而且当你刷回官方 ROM 时,会自动加锁。 71 | 72 | 我们通过OEM解锁,在开发者选项中打开「OEM 解锁」(除了少部分流入我国市场的国外运营商有锁机外,此选项基本都可供用户开启。) 73 | 74 | 当然对于大多数手机,需要申请测试或者使用其他渠道解锁。 75 | 76 | 对于小米手机,可以通过这个地址 [申请解锁](https://www.miui.com/unlock/download.html) 下载工具,然后打开手机设置,进入关于手机–>系统版本点10下,在`设备解锁状态`中绑定账号和设备,进入`Fastboot`模式(关机后,同时按住开机键和音量下键),打开刚才下载的工具,点击 `解锁` 后系统会恢复出厂系统并解锁。 77 | 78 | !!! danger 79 | **解bl锁会清除手机(恢复出厂设置)所有数据,记得提前备份好。** 80 | 81 | !!! danger "不可逆" 82 | 解锁 Bootloader 的手机会发生熔断,熔断是硬件级别的,你选择了确定解锁的那一刻就熔断了,操作不可逆,不是你再次上锁就能恢复的。 83 | 熔断丢保修,不能用pay,外版本来就没保修不能用pay你爱怎么熔怎么熔。 84 | 85 | 线刷官方四件套固件无需解锁,所以不会断溶。 86 | 87 | **如果你的设备不能进行官方解锁,可以尝试深刷强解 。** 88 | 89 | !!! note 90 | 在小米4c/4s发布时间以前的所有小米/红米机型没有BL锁,跳过此步骤即可。 91 | 92 | 附上 [小米解锁教程](https://web.vip.miui.com/page/info/mio/mio/detail?postId=28646781&boardId=5415551&isComment=&isRecommend=0&app_version=dev.211029&ref=share) 93 | 94 | ### 什么,你用华为? 95 | 96 | 华为用户请跳转到后面的专门章节查看介绍。 97 | -------------------------------------------------------------------------------- /old/Root/Huawei.md: -------------------------------------------------------------------------------- 1 | # 华为 2 | 3 | 这节的教程主要参考酷安@某贼 [^41] 4 | 5 | 推荐直接看[知乎上他的文章](https://zhuanlan.zhihu.com/p/397173427) 6 | 7 | ## 解锁 8 | 9 | **华为解锁 Bootloader 很困难**,**不推荐** 麒麟990以及更高的手机解锁,因为华为官方在 18年 就**关停**了官方获取解锁码通道,所以无法从官方拿解锁码,解锁过程困难且限制大。 10 | 11 | 华为通过解锁码解锁的Bootloader叫做用户Bootloader,只开放少数分区比如system,boot,recovery,userdata等。 12 | 13 | 工厂Bootloader则开放全分区,但需要第三方软件解锁(需要很多钱),而且只能在Fastboot里临时解锁,重启即失效。普通用户就只能解特供的用户Bootloader。 14 | 15 | 但是我们仍然可以选择通过第三方软件,淘宝商家获取解锁码或者手动拆机短接改解锁码。 16 | 17 | !!! info 18 | 注意,华为联发科无法解锁 Bootloader 的。 19 | 20 | **拆机短接解锁深刷端口** 21 | 22 | !!! danger 23 | 1. 如果你选择了强解Bootloader,将不能更新系统。官方解锁可以正常OTA。 24 | 25 | 2. 如果你没有拆机经验,建议找你附近的手机店帮拆一下,以免操作不当造成物理损坏。一般只需要拆后盖即可,但有几个机型还需要拆屏蔽罩,具体参考猎人短接图上的点位。 26 | 27 | [华为解锁相关驱动与工具](https://miao202.lanzouj.com/igAzW09qew7e) 28 | 29 | [解锁华为 bootloader 工具,适用 Kirin 960/95х/65x/620](https://github.com/mashed-potatoes/PotatoNV) ,如果不能下载请复制Github的 zip 链接请填入[镜像站](https://ghproxy.com/) 下载。[^42] 30 | 31 | >猎人短接图使用方法:打开后在左下方搜索手机名称,比如荣耀9i就搜索9i即可,可能会搜索出两个结果,选择带 `TP` 字样的即可。 32 | 33 | 找到短接图后就可以按图短接了。一般是关机状态下短接再插线连电脑。**注意不要拆电池**。 34 | 35 | 其中有的图箭头指向两个触点,意思是用镊子短接这两个点。有的图是一个箭头,意思是用镊子一端接这个点,另一端悬空或接旁边的金属保护罩。有的图两个箭头分别指向触点和保护罩,意思是短接这个触点和保护罩。 36 | 37 | 电脑提前打开设备管理器,短接插线后注意观察电脑反应,如果成功的话电脑会有设备连接提示音并在设备管理器里刷新出华为麒麟深刷端口。 38 | 39 | 如果有提示音但显示未知设备USB-SER说明你没装驱动。 40 | 41 | 如果电脑没任何反应,你应该检查短接工具,数据线,电脑插口,手机是否关机状态,然后多短接几次试试。出端口之后就可以松手了。 42 | 43 | 不用看手机,注意端口就行,进入深刷后手机是黑屏无显示的。 44 | 45 | **更改解锁码** 46 | 47 | 短接成功之后打开PotatoNV,第一项一般会被自动识别,在Bootloader一项里选你的处理器,通常情况下659选方案A即可。 48 | 49 | 点击 Start ,软件会随机生成一个16位解锁码显示在输出信息里。改好解锁码重启。 50 | 51 | **华为**的解锁码是和硬件相关的,如果有解锁码进 FASTBOOOT 输入`fastboot oem unlock 解锁码`就可以了。 52 | 53 | ## 准备 54 | 55 | **Data分区敏感** 56 | 57 | 华为喜欢把某些系统组件放到data里,请避免双清&格式化data,执意操作会导致这些组件丢失,不能开机。如果你需要格式化,可以恢复官方的 Recovery 来格式化。如果格式化导致无法开机,可以提取官方包里的userdata分区,进入Fastboot用fastboot flash userdata 刷入来恢复。 58 | 59 | 华为这里很多TWRP不支持解密data,那就别解密了,插SD卡或者adb sideload刷包。 60 | 61 | **救砖困难** 62 | 63 | 华为官方并没有给用户提供传统意义上的卡刷和线刷方式。一般是在升级模式用的(即所谓“三键强刷”包)华为官方包是.APP格式,由一堆分区镜像组合而成。 64 | 65 | 但是升级模式是官方 Rec 的一部分,刷包校验十分严格,包括华为签名(是否官方包),系统版本等等。升级模式无法满足救砖的需要。 66 | 67 | !!! tip 68 | 官方没有卡刷包。APP那个zip一般不能直接拿来卡刷。 69 | 70 | 如果使用Fastboot,借助第三方工具可以用APP包线刷,但是上面说了用户特供用户BL是没有解锁全部分区的,这将导致设备的分区大半无法刷入。实现全分区临时解锁除了借助第三方工具(moneymoney很多钱),唯一自己能操作的办法就是拆机短接。救砖教程请看下一节。 71 | 72 | !!! info 73 | 华为官方给用户提供的官方救砖途径是eRecovery恢复和Hisuite修复,但是华为封锁了这两条途径…… 74 | 这两个方法都是从官方服务器下载包然后恢复,但很多旧机型已经无法再从官方获取到包,也就无法再进行官方救砖。 75 | 76 | **刷第三方包容易变砖** 77 | 78 | 包括官改移植类原生。 79 | 80 | !!! info 81 | 华为的EMUI9以上魔改了分区,修补boot没有什么用,需要刷入第三方 rec 82 | 83 | ### 华为各个模式 84 | 85 | Recovery:不连接电脑,关机状态长按电源键和音量加,出现 logo 松开电源键继续按住音量加,直到进入。 86 | 87 | eRecovery:关机状态,**数据传输线**连接电脑,长按电源键和音量加。 88 | 89 | Fastboot:关机状态,**数据传输线**连接电脑,长按电源键和音量减。 90 | 91 | 升级模式(所谓三键强刷):关机状态下,长按电源键,音量加和音量减。如果你的系统包在手机存储里,则不需要链接直接按,如果你想要用电脑工具辅助,则需要使用**数据传输线**连接电脑。 92 | 93 | ??? info "关于 Recovery 和 eRecovery" 94 | Recovery和eRecovery是有区别的。Recovery就是我们熟知的那个Recovery,而eRecovery是独立于Recovery的另一个分区。二者功能不同,在Recovery里我们可以做恢复出厂,清除cache等本地操作,而在eRecovery里可以连接WiFi下载适用于你的手机的系统包并自动安装恢复。刷TWRP只是替换掉了Recovery,eRecovery仍然保留。 95 | 96 | 具体过程你需要读[这篇文档](https://zhuanlan.zhihu.com/p/435008942) 97 | 98 | 去年华为关闭了官网上的ROM下载通道,你可以去万维论坛或者 [Huawei Firm Finder](https://professorjtj.github.io/) 99 | 100 | ## 扼要 101 | 102 | 需要解锁 Bootloader 。 103 | 104 | !!! danger 105 | 如果你选择了强解Bl,将不能更新系统。官方解锁可以正常OTA。 106 | 107 | **拆机短接解锁深刷端口** 108 | 109 | !!! danger 110 | 如果你没有拆机经验,建议找你附近的手机店帮拆一下,以免操作不当造成物理损坏。一般只需要拆后盖即可,但有几个机型还需要拆屏蔽罩,具体参考猎人短接图上的点位。 111 | 112 | >猎人短接图使用方法:打开后在左下方搜索手机名称,比如荣耀9i就搜索9i即可,可能会搜索出两个结果,选择带 `TP` 字样的即可。 113 | 114 | 找到短接图后就可以按图短接了。一般是关机状态下短接再插线连电脑。**注意不要拆电池**。 115 | 116 | 其中有的图箭头指向两个触点,意思是用镊子短接这两个点。有的图是一个箭头,意思是用镊子一端接这个点,另一端悬空或接旁边的金属保护罩。有的图两个箭头分别指向触点和保护罩,意思是短接这个触点和保护罩。 117 | 118 | 电脑提前打开设备管理器,短接插线后注意观察电脑反应,如果成功的话电脑会有设备连接提示音并在设备管理器里刷新出华为麒麟深刷端口。 119 | 120 | 如果有提示音但显示未知设备USB-SER说明你没装驱动。 121 | 122 | 如果电脑没任何反应,你应该检查短接工具,数据线,电脑插口,手机是否关机状态,然后多短接几次试试。出端口之后就可以松手了。 123 | 124 | 不用看手机,注意端口就行,进入深刷后手机是黑屏无显示的。 125 | 126 | **更改解锁码** 127 | 128 | 短接成功之后打开PotatoNV,第一项一般会被自动识别,在Bootloader一项里选你的处理器,通常情况下659选方案A即可。 129 | 130 | 点击 Start ,软件会随机生成一个16位解锁码显示在输出信息里。改好解锁码重启。 131 | 132 | **华为**的解锁码是和硬件相关的,如果有解锁码进 FASTBOOOT 输入`fastboot oem unlock 解锁码`就可以了。 133 | -------------------------------------------------------------------------------- /old/Root/Brushcard.md: -------------------------------------------------------------------------------- 1 | # 卡刷 2 | 3 | 有的Recovery作者附带了刷入脚本,如果你是这种情况,请按照脚本指南操作。 4 | 5 | 如果你不是,下面是关于卡刷和使用第三方 Recovery的通用方法。 6 | 7 | ## 准备 8 | 9 | - 电脑 10 | - 一台解锁 Bootloader 的安卓 ? 以上的手机 11 | - 一根良好的数据线 12 | - 卡刷包 13 | - Magisk.zip(Root需选) 14 | 15 | ### ADB 16 | 17 | !!! warning 18 | 线必须是原装线或者质量靠谱的线,否则会出现 `USB Error` ! 19 | 20 | 如果你没有使用 MTK ,请通过`adb devices`命令再次确认已经连上手机。 21 | 22 | !!! tip "找不到adb??" 23 | 如果你不想配置ADB全局环境的话,以后执行 Adb 命令需要在工具目录下,按住 Shift 右键鼠标打开终端,命令替换为`.\adb`或者`.\fastboot`,如果需要配置全局环境,请按照[这篇文档](https://www.sunzn.com/2018/08/02/Windows-10-%E4%B8%8B%E9%85%8D%E7%BD%AE-ADB-%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F/)配置。 24 | 25 | 💡 给手机刷入 Recovery 其实也不需要电脑,用另一部手机借助 [Termux](https://f-droid.org/zh_Hans/packages/com.termux/) 也是同样可以的。在 Termux 配置好 ADB 环境后,照上述步骤刷入即可。安装 Termux 的那部手机无需 ROOT。 26 | 27 | ### 准备文件 28 | 29 | 比如我们使用 `OrangeFox` ,下载并打开 `OrangeFox` 压缩包,解压其中的 `recovery.img` 到任意一个位置,后面刷入会用到。 30 | 31 | 打包为 ZIP 是为了供使用已经在使用第三方 Recovery 的用户刷入或更新。 32 | 33 | 当然我们没有,所以需要解压其中的 `recovery.img` 来使用 `fastboot` 刷入。 34 | 35 | >如果你选择使用 LR.Team 定制版 TWRP,可以选择一键刷入版。 36 | 37 | ### 提前说明 38 | 39 | - 重启到 Recovery 显示 The system has been destoryed 40 | 41 | 新款联发科机型必须关闭AVB2.0校验。 42 | 43 | 否则任何对系统的修改都会导致卡在 Fastboot。涉及的机型包括但不限于红米6,6A,9,9A,红米Note8Pro,红米10X4G,5G,红米K30U,小米Play,以及之后的联发科机型。这个与 [AVB 2.0 有关](https://source.android.com/security/verifiedboot/avb) 44 | 45 | 至于AVB2.0怎么关闭,不同机型不同安卓版本方法不用,可以在TWRP里找这个功能,或者找刷过的大佬问方法。 46 | 47 | 如果你使用MIUI,你可以解压非官方的刷机包拿到 `vbmeta.img`,使用 `fastboot flash vbmeta vbmeta.img` 48 | 49 | - 红米3S进入Recovery模式的方法是长按三键 50 | 51 | - 重置保护 / 谷歌锁 Factory Reset Protection 52 | 53 | 54 | 55 | ## 刷机 56 | 57 | 用数据线链接手机和电脑,手机进行关机,**长按 音量减键 + 电源键** 进入 `fastboot` 模式。 58 | 59 | 然后打开终端,输入 `fastboot flash recovery 解压的 recovery.img 的文件地址` (或者 `.\fastboot`?) 60 | >这一步需要按照上面的指南配置好 ADB 环境。 61 | 62 | 执行输出 63 | 64 | ``` 65 | sending recovery OKAY(传输Recovery) 66 | writing recovery OKAY(刷入Recovery) 67 | finished. 68 | ``` 69 | 70 | 执行完毕后**长按 音量加键 + 电源键**,出第一屏即一秒左右可松手,进入 `Recovery`模式,你也可以使用 `fastboot reboot recovery`来进入 `Recovery`模式。 71 | 72 | 一般情况下,会出现一个英文界面,从上往下依次写着 `Mount` `Dectypt` ,这是让你解密 Data 。 73 | 74 | 解密DATA分区后,才能刷入第三方 ROM ,可以理解为是对官方系统的保护。但解密 DATA 会格式化数据。 75 | 76 | !!! danger 77 | 解密完成后,DATA 被清空,包括内置卡。 78 | 79 | **请先备份好手机上的一切重要资料,包括手机存储/内置卡/外置卡上重要数据** 80 | 81 | 在界面输入你的锁屏密码,输入完后点击右下角确认。经过十秒左右秒钟的解密后,不出意外会显示欢迎界面,点击屏幕下方勾即可。然后就是挂载 `System` 的界面,滑动下方滑块进入主界面。 82 | 83 | - 格式化 Data 84 | 85 | 在 `Menu –> Manage Parttions –> Data –> 确认 –> 点击` 中选择 `Format Data` 格式化 Data 86 | 87 | - 重启 Recovery 88 | 89 | 回到主界面,点击 `Menu –> Reboot –> Recovery` 来重启一次 Recovery 90 | 91 | 重启到 Recovery 后,点击 Wipe ,选择清除的分区清除数据。清除完成后再次重启一次 Recovery. 92 | 93 | 通过数据线将刷机包,底包传到手机。先选择底包,滑动下方滑块来刷入,再刷入系统(有的系统自带底包,我们不需要额外刷入底包)。刷入完成后就可以重启到系统。 94 | 95 | [^13] 96 | 97 | 以下是一条示例命令: 98 | !!! info 99 | 💡 如果你是卡刷官方包后,不做任何操作是肯定会恢复官方 recovery 的,关于如何防止恢复官方 recovery 办法: 100 | 101 | 进入 Recovery 后,如果不是古董机一般都需要做一下防覆盖,否则重启进系统后刷的 recovery 会被官方 recovery 覆盖。 102 | 103 | 最简单的办法是在卡刷完 官方ROM包 后刷入 `Magisk.zip` (面具),面具会自动防止覆盖。 104 | 105 | 如果你并不想 ROOT 但是又不想恢复 官方recovery,可以在卡刷完 ROM 包后签名 boot.OrangeFox 的防止还原 Recovery 的功能,在 `设置`–> `OTA`下。 106 | 107 | 有的 TWRP 的高级设置中并没有签名boot功能,但是一般情况下都会有防止覆盖TWRP功能,虽然功能实现原理不一样,但是都可以防止恢复官方recovery. 108 | 109 | TWRP下只选择 data 不会清除内置存储,会保留 `/data/media/` 110 | 111 | !!! help 112 | **橙狐设置简体中文界面** 113 | 114 | 点击底部的 `Menu` –> 右上角的齿轮图标 –> `Regional` –> 点击 `Language` 下的 `English` ,选择 `Chinese Simplified` 。 115 | 116 | ### Magisk侧载[^44] 117 | 118 | 先下载 Magisk 到你的电脑设备,接着重启至你所使用的第三方 Recovery 119 | 120 | ``` 121 | adb reboot recovery 122 | ``` 123 | 124 | 选择 `Apply update Apply from ADB` 以启动 ADB Sideload 模式,刷入 Magisk 125 | 126 | `` 127 | adb sideload Magisk-xxx.apk 128 | `` 129 | >将 Magisk-xxx.apk 替换为你所下载的文件名 130 | 131 | 完成后,在 Recovery 中重启手机至系统. 132 | 133 | 最后,安装 Magisk Manager. 134 | 135 | ``` 136 | adb install Magisk-xxx.apk 137 | ``` 138 | 139 | 打开手机上新增的 Magisk 应用,若下方的 超级用户 和 模块 菜单能够点击,就代表已经成功获取了 Root 权限. 140 | 141 | 卡刷可以用手机直接下载卡刷包,更名 Update.zip 后进入 recovery 刷机,刷后资料还会在,但是通常不做资料清除的话很容易发生问题,严重的就是一直出现系统错误,轻的则是偶尔出现闪退。 142 | 143 | 所以基本上刷完机最好进 Recovery 三清,刷前做三清也行,不然问题很多。接着要还原备份的时候如果系统本差异太大最好不要还原系统设定和App之类的资料,还原一些使用者data就好。卡刷需要存储空间,一般能进 recovery 就能刷。 144 | 145 | ### 引录 146 | 147 | [如何在 Redmi Note 7 Pro 上刷机?](https://blog.linioi.com/posts/11/) 148 | 149 | 相关Recovery下载 150 | 151 | [小米Recovery下载|Recovery大全-FiimeROM](https://mi.fiime.cn/Recovery) 152 | 153 | [Devices](https://twrp.me/Devices/) 154 | 155 | [OrangeFox Recovery Downloads](https://orangefox.download/zh-CN) 156 | 157 | [偶然发现的仓库](https://kamiui.ml/E52shuaji/) 158 | -------------------------------------------------------------------------------- /old/Root/Deep.md: -------------------------------------------------------------------------------- 1 | # 深刷 2 | 3 | ## 准备 4 | 5 | - 电脑 6 | - 一台安卓 ? 以上的手机 7 | - 一根良好的数据线 8 | 9 | ## Sony Xperia XZ1 强刷 10 | 11 | 按照 [Sony Xperia XZ1 (G8342) 强刷教程](https://www.himiku.com/archives/flashing-xperia-xz1.html) 12 | 13 | ## 高通9008 14 | 15 | **理论上高通处理器都可以用这个方法** 16 | 17 | !!! info "用这个方法必须要满足两个最基本条件" 18 | 19 | 1.能找到 QPST 专用刷机包 20 | 2.确认手机能进9008端口 21 | 22 | *💡 高通 QPST 线刷其实就是利用高通芯片自带的9008端口,将手机系统内的所有分区的镜像文件,直接刷写手机。这个刷机方式比 REC卡刷 和 fastboot 线刷,更底层、高效、强大。这种方式,不需要进入手机的任何分区,就可以直接刷写手机固件。* 23 | 24 | !!! note 25 | 高通的 QPST线刷模式,因联机之后端口名字叫Qualcomm HS-USB QDLoader 9008 (COMx)而得名。 26 | 27 | 该模式下,用户可通过QPST及其衍生工具(本质为QPST命令行调用)直接对手机的Flash芯片进行读写操作,而不需要解锁Bootloader。 28 | 29 | 常见刷机工具有QPST,MiFlash(Pro)等工具,刷机包中一般会有一个分区表xml文件。以及一个eif文件。XML文件命名一般为Rawprogram(数字).XML和Patch(数字).XML,EIF文件一般命名为prog_存储芯片类型(比如UFS和EMMC)*firehose*(SOC型号,比如MSM8998或者SDM855)_(内存类型,一般是DDR).eif,只要带有这两个文件的,一般都是高通支持9008的刷机包。 30 | 31 | 进入9008模式,高通略为麻烦。MSM8994及以前的SoC,可以通过Fastboot命令直接进入9008模式:`adb reboot edl` 32 | 33 | 此方案无需改线,无需触点短接等操作,但需要电脑进行操作。 34 | 35 | 首先去下载 [高通的线刷工具](https://qpsttool.com/category/download) ,一般下载最新版本的即可。 36 | 37 | 运行该线刷工具,需要电脑识别到端口9008,在电脑设备管理器中可以找到,如果没有反应需要电脑安装 [9008的驱动](https://www.aliyundrive.com/s/KTLkyyjTsDB) 38 | 39 | 接着下载官方固刷包进行刷入即可。 40 | 41 | 💡 按住手机上下音量+电源调试手机进入9008模式,其次电脑识别到9008端口 42 | 43 | ### 刷包成功后出现的几种情况 44 | 45 | 1. 数据线自动断开链接,手机充电灯亮起-----刷写成功 46 | 47 | 2. 无反应!------换包刷写,或试另一种刷写方式 48 | 49 | ## MTK联发科 50 | 51 | !!! note 52 | 联发科的底层刷机模式没有高通那么麻烦。该模式在 MTK 内部被称为 MTK in-house developed loader。MTK 的该模式与高通略有不同,该模式具有帮助系统寻找Uboot的功能。该模式除了具有启动功能之外,还具有下载功能。首先还是需要明确的是mtk芯片都有一个boot rom,如果没有这个rom,那么程序是无法被下载到 Nand Flash中的,然后此时的Flash上是为空的,没有任何数据的。系统在上电之后它会检测是启动模式还是下载模式,如果是下载模式,它会初始化一个usb的串口,将Preloader加载到内部的SRAM中,跳转到Preloader中去执行,初始化好Flash和外部RAM之后,依次将preloader、lk、kernel、android下载到nand flash中去。刷机工具是SP Flash Tools ,需要验证的对应的DA文件,或者 MTKclinet 53 | 54 | ### 准备 MTK 工具/工具箱 55 | 56 | MTk 工具依赖安卓的一种漏洞来实现 Root ,提取 boot.img 57 | 58 | !!! warning 59 | **天矶920 以后的设备不受此方法支持!(天矶1200仍旧支持)** 60 | 61 | 先在 [GitHub - bkerler/mtkclient: Inofficial MTK reverse engineering and flash tool](https://github.com/bkerler/mtkclient) 下载源代码,解压到 mtkclient-main 文件夹。 62 | 63 | MTK 提供不同平台的版本,但是依赖 Python,所以你需要从文件包或从 [Download Python |Python.org](https://www.python.org/downloads/) 安装Python(**确保安装时勾选 ADD PYTHON to PATH**),并使用 `pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple` 配置国内镜像源。 64 | 65 | ### 初始化 66 | 67 | 这里以Windows系统为演示系统。乌班图参考 [这里](https://zhuanlan.zhihu.com/p/452973221) 68 | 69 | 在 mtkclient-main 文件夹下右键打开命令行。 70 | 执行 `python setup.py install` 自动安装依赖。 71 | 72 | 🛠 下面每执行一次命令,都需要重复关机状态下 “插上USB同时按住音量加减及开机键,待到看到命令行变成这个后就松手”步骤。 73 | 74 | !!! danger "温馨提示" 75 | **一定不要输错命令** 76 | 77 | 输入 `python mtk rl out` ,备份手机全部分区。如果后面失败了,使用`python mtk wl out`可以刷回原状态。 78 | 79 | 这个步骤如果备份用户数据会耗费很长时间。如果**不在乎用户数据**,你可以备份到 `userdata` 时中断并删除 `usedata.img`。 80 | 81 | !!! warning 82 | 备份完毕后,镜像在 `out` 文件夹,最好将项目目录下的out文件夹复制出来,防止后续覆盖。 83 | 84 | ### 强解 Bootloader 85 | 86 | 如果你OEM已经解锁且Bl也已经解锁的,请跳过这步。 87 | 88 | 如果你没有获取到深度测试或者官方解锁的,可以用 `python mtk da seccfg unlock` 尝试解锁,风险自担,**这一步会清除你手机的全部数据,请注意** 89 | 90 | 强解后请重置手机,输入 `python mtk reset` 重置。(**如果是MTK 可以不清除设备所有数据**)完毕后长按开机键开机,开机第一屏会有提示,按一下开机键即可解决,因为重置过手机,所以第一次开机时间会有点长,耐心等待即可。 91 | 92 | 待到开机后,设置中打开开发者选项就可以看到OEM解锁选项变灰,出现一行小字引导加载程序已解锁。开机前会有一段英文提示,即为解锁成功(可以用 `fastboot oem lks` 验证,返回 0 代表解锁成功)。 93 | 94 | 附:重新锁回 Bootloader 使用 `python mtk da seccfg lock` ,有 99% 砖机可能。 95 | 96 | ### 提取boot&vbmeta 97 | 98 | 使用如下命令,提取手机中的 boot 和 vbmeta.img 镜像 99 | 100 | `python mtk r boot,vbmeta boot.img,vbmeta.img` 101 | 102 | 手机关机,待到关机完成,插上USB同时按住音量加减及开机键待到看到命令行提取的数字闪动后,松手。 103 | 104 | 提取完毕后,boot与vbmeta 的镜像文件会在目录中,**务必备份到其他的文件夹**。 105 | 106 | 准备好 boot.img 后,打开最新的 `Magisk` ,点击 `Magisk` 后边的`安装`,选择安装方式为 `选择并修改一个文件` ,从电脑端复制 `boot.img` 文件到手机并选中该文件,点击`开始` ,仔细阅读修改结果并从结果中复制patch后的文件(一般在 `Download` 文件夹下,文件名类似`magisk_patched-24100_gk0te.img`)到电脑。 107 | 108 | !!! help "AVB验证" 109 | **安卓10及以上需勾选 vbmeta 选项** 110 | 111 | 有些机型刷入修改的 boot 后可能会由于 vbmeta.img 的验证导致设备无法启动 ,可尝试保持 boot镜像 中的 vbmeta ,此选项在最新版面具中已支持。 112 | 113 | 有的手机没有 vbmeta 分区会有提示,忽视它。 114 | 115 | **准备修补后的镜像**,重命名为`boot.patched`,放入项目根目录。 116 | 117 | 执行命令刷入,重启手机,安装面具即可发现 Root 成功。 118 | 119 | `python mtk w boot,vbmeta boot.patched,vbmeta.img.empty` 120 | 121 | ### 备份 Root 后的手机字库(分区) 122 | 123 | !!! tip 124 | 你可以使用mtk工具备份各个分区。 125 | 126 | - 备份命令 127 | 128 | `python mtk rl out` 即备份所有分区到 out 文件夹。 129 | 130 | - 自救命令 131 | 132 | `python mtk wl out` 即将 out 文件夹镜像写入所有分区。 133 | 134 | !!! tip 135 | 注意覆盖。 136 | 137 | 注意 userdata 可能会很大,包含你的用户数据(音乐图片之类全部)。 138 | 139 | !!! help 140 | 🛠 如果在解锁中遇到问题请先去 [https://github.com/bkerler/mtkclient/issues](https://github.com/bkerler/mtkclient/issues) ,搜索遇到的问题,如果是新的bug欢迎向作者反馈。需注明机型和提供相应的preloader。 141 | 142 | 如果不自信,可以花钱购买**靠谱的**刷机服务。 143 | -------------------------------------------------------------------------------- /old/about.md: -------------------------------------------------------------------------------- 1 | ## 社区 2 | 3 | [Fiime](https://fiime.cn/) 4 | 5 | [Magisk](https://forum.xda-developers.com/f/magisk.5903/) 6 | 7 | [AKR社区](https://www.akr-developers.com/) 8 | 9 | ## [Magisk](https://github.com/topjohnwu/Magisk) 10 | 11 | 使用任何模块之前请考虑格机风险。模块推荐请自己查社区(酷安等) 12 | 13 | ### 资源分享 14 | 15 | [刷机资源](https://kamiui.ml/E52shuaji/) 16 | 17 | [插件仓库-FiimeROM](https://mi.fiime.cn/libcangku) 18 | 19 | [Magisk 资源分享](https://shuajinet.com/) 20 | 21 | [Magisk仓库模块](http://tx48.top/) 22 | 23 | ### 社区模块库 24 | 25 | [Magisk Modules Repository - Androidacy](https://www.androidacy.com/magisk-modules-repository/?utm_source=old-repo-link&utm_medium=web&utm_campaign=redirects) 26 | 27 | ## [LSPosed](https://github.com/LSPosed/LSPosed) 28 | 29 | > LSPposed是一个模块框架,可以在不接触任何APK的情况下更改系统和应用程序的行为。这意味着模块可以适用于不同的版本甚至ROM,而无需任何更改(只要原始代码没有更改太多)。它也很容易撤消。由于所有更改都在内存中完成,因此您只需停用模块并重新启动即可恢复原始系统。 30 | > 31 | 32 | 请使用Zygisk,riru已经停止维护。如果你使用Zygisk,那么Riru就无法使用,这样的话Lsposed也无法使用。不过Lsposed已经推出了Zygisk版。 33 | 34 | 低于安卓9的版本的Miui不要开启Zygisk模式,亲测卡米 35 | 36 | [MagiskHide没了,Zygisk又是啥?](https://www.bilibili.com/read/cv14287396) 37 | 38 | [LSPosed(第三期) - Riru版和Zygisk版安装使用指南【手机改造计划】](https://www.bilibili.com/read/cv17028007) 39 | 40 | [GitHub - LSPosed/LSPosed: LSPosed Framework](https://github.com/LSPosed/LSPosed) 41 | 42 | [Xposed-Modules-Repo](https://github.com/Xposed-Modules-Repo) 43 | 44 | [LSPosed](https://t.me/s/LSPosed) 45 | 46 | 下载模块后,在面具的设置中开启 Zygisk,同时在模块中从本地安装 LSposed。重启设备,桌面就新增 LSPosed 的APP。 47 | 48 | ## 安全验证 49 | 50 | Google 那边已经给开发者提供了一个基于 SafetyNet 认证的反盗版功能(anti-piracy feature),开发者如果使用这套机制,那么已经 root、无法通过 SafetyNet 认证的设备就没办法在 Play 商店搜索、下载和更新对应的 App。[^7] 51 | 52 | SafetyNet 是 Google 移动服务套件的功能,这意味着,只有装有 GMS 并且应用调用了相关接口的情况下,我们才需要通过 SafetyNet 验证。逃避国内应用的 root 检测大部分情况下并不需要通过 SafetyNet 认证,只要使模块和 Magisk 不对这些应用生效即可,无需在意 SafetyNet 结果。 53 | 54 | 推荐 [YASNAC](https://play.google.com/store/apps/details?id=rikka.safetynetchecker)。下载此软件,然后进行一次测试,我们便知道自己的设备是否启用了基于硬件的安全验证。 55 | 56 | 留意 `evaluationType` 一项的结果,根据前文的解释,若此结果为 `basic`,则意味着没有启用基于硬件的安全验证,若此结果为 `hardware`,则增强安全验证已经启用。 57 | 58 | 如果选项为 `basic`,我们可以: 59 | 60 | 开启 Zygisk,使用排除列表,将需要的应用添加进排除列表中;依照前面的说法,排除列表中的应用是不受 Magisk 影响的,并且由于系统没有基于硬件的安全验证,此时设备仍然可以通过 SafetyNet;然而**其代价是所有模块在此应用上均无效果**; 61 | 62 | Zygisk模式下用Shamiko模块的白名单模式很好用。就是默认全局对所有应用隐藏Root,除了超级用户授权过的应用可以获得Root权限,其他新装软件都完全请求不到和检测到Root,配置教程请读前文或者:[酷安图文分享](https://www.coolapk1s.com/feed/37950576) 63 | 64 | 附: 65 | 66 | [SafeNet通过性检查](https://play.google.com/store/apps/details?id=rikka.safetynetchecker) 67 | 68 | [Shizuku](https://shizuku.rikka.app/zh-hans/) 69 | 70 | ## 刷机原理? 71 | 72 | ### REC 73 | 74 | Recovery也就是我们常用来三清和卡刷用的东西。 75 | 76 | 安卓刷机和 系统OTA 升级原理相同,系统OTA升级使用的是官方的Recovery,用官方recovery刷官方包。 77 | 78 | 但是官方recovery有对要刷入的包进行签名校验,所以官方recovery是不能刷入第三方包的,对官方包的任何修改都会导致官方recovery刷入官方包失败。 79 | 80 | 所以如果需要刷入其他包,那就必须要刷入一个第三方recovery,第三方recovery不会对ROM包进行签名校验,所以可以刷入任何ROM作者针对该机型做的包。 81 | 82 | 如果刷入了与手机机型不匹配的 Rom包,你的手机很可能变成真砖或者基带丢失..[^34] 83 | 84 | ![](https://s3.bmp.ovh/imgs/2022/08/16/d277c357ef54f02d.png) 85 | 86 | ### Fastboot 87 | 88 | 在安卓手机中 Fastboot 是一种比Recovery更底层的刷机模式,计算机通过 Usb 线将已有的各分区文件(光盘映象文件)直接覆写到指定分区中。[^35] 89 | 90 | !!! info 91 | 92 | Android设备和PC之间的协议通信,除了`fastboot`协议还有使用`adb`协议。 93 | adb用于 Android 设备系统起来后的调试,允许访问Android 系统。 94 | fastboot 用于 Android 设备开发过程中刷写镜像使用以及 Android 设备无法开机时进入 fastboot 模式救砖使用。 95 | 96 | 这种方式下,你可以选择保留资料刷机。也可以用指令操作手机。(解锁Bootloader需要清除数据,如果解锁过了,可以保留) 97 | 98 | 刷坏了recovery模式都进不了的情况下也可以通过fastboot刷回来。 99 | 100 | fastboot模式其实是调用spl进行刷机的,所以如果刷spl坏了,fastboot模式应该也进不了,也就是砖了 101 | 102 | ### 9008 深刷 103 | 104 | 高通的紧急下载模式(EDL) ,9008 就是 download 模式,作为最底层的联机模式,机器 Rec,fastboot 都被篡改或清除时,唯一能进入还不会被摧毁的就是 download 模式,除了链接电脑机器任何跟刷写系统无关的功能全部关闭不运行。 105 | 106 | 高通的QPST线刷模式,因联机之后端口名字叫Qualcomm HS-USB QDLoader 9008 (COMx)而得名。这种模式下,可以彻底删除手机系统后刷入新系统。 107 | 108 | ### MTK 深刷 109 | 110 | [^21] 111 | 112 | !!! tip 113 | 联发科的底层刷机模式没有高通那么麻烦。该模式在MTK内部被称为MTK in-house developed loader。MTK的该模式与高通略有不同,该模式具有帮助系统寻找Uboot的功能。该模式除了具有启动功能之外,还具有下载功能。首先还是需要明确的是mtk芯片都有一个boot rom,如果没有这个rom,那么程序是无法被下载到Nand Flash中的,然后此时的Flash上是为空的,没有任何数据的。系统在上电之后它会检测是启动模式还是下载模式,如果是下载模式,它会初始化一个usb的串口,将Preloader加载到内部的SRAM中,跳转到Preloader中去执行,初始化好Flash和外部RAM之后,依次将preloader、lk、kernel、android下载到nand flash中去。 114 | 115 | 装有联发科技芯片组的设备具有BROM(引导只读存储器),通常会加载预加载器可执行文件并随后引导Android系统,但还具有一种称为下载模式的替代引导模式。 它严格用于OEM维修,可用于拆开设备,就像 高通的紧急下载模式(EDL)。 由联发科制造的专有程序称为“ SP Flash Tool”,可以利用此接口强制刷新设备上的系统软件。 116 | 117 | 小米已经提交修复此漏洞,此方法限制于 天矶920 之前。 118 | 119 | [^7]:[Android 玩机「神器」的矛盾与新生:Magisk Canary 更新详解 - 少数派 (sspai.com)](https://sspai.com/post/69945) 120 | 121 | [^34]:[Root卡刷原理](https://www.zhihu.com/question/20098750/answer/173038749) 122 | 123 | [^35]:[Fastboot 原理](https://wowothink.com/5ade33b8/) 124 | 125 | [^21]:[底层刷机教程/全解析](https://wiki.pchelper666.com/%E5%BA%95%E5%B1%82%E5%88%B7%E6%9C%BA%E6%95%99%E7%A8%8B) 126 | 127 | 128 | -------------------------------------------------------------------------------- /old/Root/Wirebrush.md: -------------------------------------------------------------------------------- 1 | # 线刷指南 2 | 3 | - 电脑 4 | - 一台解锁 Bootloader 的安卓 ? 以上的手机 5 | - 一根良好的数据线 6 | - Magisk.zip(Root需选) 7 | - 全量包/OTA包/boot.img 三选一 8 | 9 | ## 准备 10 | 11 | ### 链接手机 12 | 13 | !!! warning 14 | 线必须是原装线或者质量靠谱的线,否则会出现 `USB Error` ! 15 | 16 | 如果你没有使用 MTK ,请通过`adb devices`命令再次确认已经连上手机。 17 | 18 | !!! tip "找不到adb??" 19 | 如果你不想配置ADB全局环境的话,以后执行 Adb 命令需要在工具目录下,按住 Shift 右键鼠标打开终端,命令替换为`.\adb`或者`.\fastboot`,如果需要配置全局环境,请按照[这篇文档](https://www.sunzn.com/2018/08/02/Windows-10-%E4%B8%8B%E9%85%8D%E7%BD%AE-ADB-%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F/)配置。 20 | 21 | ### 准备 **Magisk** 22 | 23 | 你可以从 [Github](https://github.com/topjohnwu/Magisk/releases) 或者 文件包 [1^] 下载它,推荐去 Github 下载,越新越好。如果不能下载 Github 文件请复制 apk 链接填入[这里](https://ghproxy.com/) 24 | 25 | **安装Magisk Manager APP后如果它显示`Ramdisk` 为"是",那么你才可以进行下面的操作。** 26 | 27 | !!! help 28 | Ramdisk 是系统中的一个小分区,Ramdisk 告诉系统接下来要加载哪些东西。Magisk 的目的是修改 Ramdsik,把自己加进开机需要加载的系统组件中。App 中 Ramdisk 的值为「否」时,表示需要修改的 Ramdisk 被放在了 recovery.img 中,我们需要提取并修改 recovery.img。具体操作方法见节尾。 29 | 30 | Tips:极少数小米设备存在检测设备信息错误的问题,Ramdisk 虽然显示为「否」,但实际上是需要修改 boot.img,具体请询问相同机型的刷机爱好者。 31 | 32 | ## 准备修补的img 33 | 34 | >这里你可以看一下首页的链接支持获取更多支持。 35 | 36 | 官方 ROM 的压缩包,例如 [Google](https://developers.google.com/android/images)、[小米](https://www.miui.com/shuaji-393.html)、[Moto](https://mirrors.lolinet.com/firmware/moto/),它们由厂商发布,可从固定的发布页面、机型论坛等下载**符合**你的**机型和型号**的 Rom 37 | 一些厂商同时提供了 OTA包 和 全量包 ,我们优先下载全量包,解压后即可获得 `boot.img`,也就是我们所需要的 boot 分区的镜像文件。 38 | 39 | 如果你使用的是第三方开发者制作的 ROM,也同样需要下载系统全量包解压获取,而部分开发者也会单独释出 `boot.img` 为玩家提供便利。如果你比较幸运,在论坛中有人分享了自己修改好的镜像,可以直接获取进行刷写。 40 | 41 | 如果你的机型没有释放对应的 Rom包 ,且你是联发科(天矶<920),你可以使用 MTK深刷 提取 `boot.img`(请见MTK强解小节,注意解锁 Bootloader 后才可以提取)。 42 | 43 | 像Google 给出的刷机包,解压其中的 image 包可以直接获得我们想要的各种镜像文件。但部分厂商给出的升级包以及部分第三方 ROM 的刷机包中解压出来只有 payload.bin,无法进一步解压获得我们想要的各种镜像文件,需要进行 payload 解包。 44 | 45 | 找到 `boot.img` 和 `vbmeta.img` 两个文件,复制到电脑上备用。 46 | 47 | !!! info "**如何 payload 解压 OTA 包获取其中的 boot.img**" 48 | 49 | *Payload 工具打包版本已经在工具包中给出。源仓库直接拉取源码会因为依赖版本问题难以运行。* 50 | 51 | 下面是拉取源码进行解包的指南,如果失败请尝试找到打包完毕的exe工具(首页附有)。 52 | 53 | 解压 payload.bin 需要用到特殊的工具,我们可以在 Github 上找到开源的 [payload dumper](https://github.com/vm03/payload_dumper),这是一个基于 python 3 的命令行工具。 54 | 55 | 以 zip 格式下载源代码,本地解压得到 payload_dumper-master 文件夹,下属两个 py 后缀的 python 文件。将 ROM 的 .zip 包解压缩后,把其中的 payload.bin 文件移送到 payload_dumper-master 中。 56 | 57 | ```bash 58 | pip3 install protobuf #安装 protobuf 59 | ## 定位到 payload_dumper-master 文件夹 60 | python3 -m pip install protobuf 61 | python3 -m pip install -r requirements.txt 62 | python3 payload_dumper.py payload.bin 63 | ``` 64 | 65 | 准备好 boot.img 后,打开最新的 `Magisk` ,点击 `Magisk` 后边的`安装`,选择安装方式为 `选择并修改一个文件` ,从电脑端复制 `boot.img` 文件到手机并选中该文件,点击`开始` ,仔细阅读修改结果并从结果中复制patch后的文件(一般在 `Download` 文件夹下,文件名类似`magisk_patched-24100_gk0te.img`)到电脑。 66 | 67 | !!! help "AVB验证" 68 | **安卓10及以上需勾选 vbmeta 选项** 69 | 70 | 有些机型刷入修改的 boot 后可能会由于 vbmeta.img 的验证导致设备无法启动 ,可尝试保持 boot镜像 中的 vbmeta ,此选项在最新版面具中已支持。 71 | 72 | 由于 ROM code 和 BootLoader 通常都是由设备厂商 OEM 提供,而各家实际做法和研发能力不尽相同,为了让设备厂商更方便的引入 Verified boot 功能,Google 在 Android O上推出了一个统一的验证启动框架 Android verified boot 2.0,好处是既保证了基于该框架开发的verified boot 功能能够满足 CDD 要求,也保留了各家 OEM 定制启动校验流程的弹性。 73 | 74 | !!! danger "警告" 75 | ⚠️ **请对操作使用到的镜像(提取或修改)在电脑上留存副本,防止不测!!** 76 | 77 | ## 线刷 Fastboot刷入镜像 78 | 79 | 复制修改镜像后的完整路径(**在 Windows 中,选中文件 > Shift + 右键,会多出「复制为路径」命令**)。 80 | 81 | **手机重启到 Bootloader** 82 | 83 | ``` 84 | adb reboot bootloader 85 | ``` 86 | 87 | **如果面具中 Ramdisk 为 yes** 88 | 89 | ``` 90 | fastboot flash boot <修改后的 boot.img 路径> 91 | ``` 92 | 93 | **刷入完成后重启** 94 | 95 | ``` 96 | fastboot reboot 97 | ``` 98 | 99 | 如果想要谨慎一点,比如说修改的镜像文件是从网上下载的,想先试试看能否正常启动,则可以用命令:`fastboot boot`。这样顺利启动系统后即可暂时拥有 Magisk ,不过重启后就会失效。 100 | 101 | 文件包中有Han.GJZS-v2.12.1附带了很多工具,可以使用ADB和FastBoot(不懂不要用) 102 | 103 | ### 小米线刷工具 MIflash 104 | 105 | MiFlash 是由小米发布的刷机工具。可以选择刷机不上 BL 锁(对刷 MIUI 海外版来说是必须),自定义刷机脚本,EDL 刷机模式等。 106 | 107 | 你可以在以下地址获取它的相关信息,因为是特定机型工具,所以不展开叙述。 108 | 109 | 110 | 111 | 112 | 113 | ## 面具 Ramdisk 为「否」的机型 114 | 115 | 我们使用面具修补的 「Recovery Mode」 选项来解决这个问题。 116 | 117 | 具体操作步骤如下: 118 | 119 | 1. 下载当前系统的全量包,如果你使用了第三方 Recovery,那么 recovery.img 就是这个第三方的镜像。提取 recovery.img **或者** MTK 中执行 `python mtk r recovery recovery.img`,先备份,然后传到手机上。 120 | 121 | 2. 修改镜像:打开面具,在选择修补文件后,会多出一个「Recovery Mode」的选项。 122 | 123 | 3. 刷入镜像:使用的命令是 `fastboot flash recovery <修改后的 recovery.img 路径>` **或者** `python mtk w recovery <修改后的 recovery.img 路径>` 124 | 125 | 这几步完成后,重启手机。和修改 boot.img 不同的是,我们需要立即按下设备进入 Recovery 的组合键,这样才能挂载 Magisk 。这是因为我们是通过修改 recovery.img 的方式挂载 Magisk 的,只有在按下组合键的情况下,设备才会启动 recovery 分区,从而实现 Magisk 的挂载。 126 | 127 | 按下组合键后,设备不会进入 Recovery 模式,而是会闪屏过后直接进入一个有 Magisk 的系统。每一次重启都要这样做才能挂载 Magisk。进入系统后就没有特别需要注意的问题了。 128 | 129 | 而想要进入真正的 Recovery ,我们需要在按下组合键后的闪屏界面长按音量 + 键。 130 | -------------------------------------------------------------------------------- /old/Root/index.md: -------------------------------------------------------------------------------- 1 | # 刷机 2 | 3 | !!! warning "须知" 4 | 5 | 我们努力确保文档的时效性的正确性,但是阅读者**需要自己承担因尝试 Root 导致的后果**! 6 | 7 | 深刷操作难度较高,如果不自信,请去售后要求深刷。 8 | 9 | 请不要在晚上刷机. 10 | 11 | 众所周知,在 Linux 中,su 代表管理员权限。 su 是运行环境变量PATH下面的一个可执行文件,当任意软件运行su时,软件的权限就会被提升到Root权限。 12 | 13 | 同理,在安卓系统中,Root赋予手机管理员权限,本质就是将su文件放入到系统运行环境变量PATH下面。之后软件运行su程序,就可以提升到Root权限。 14 | 15 | 未 Root 的安卓系统是没有su这个文件的。 16 | 17 | ## 介绍 18 | 19 | 目前最流行的 Root 框架是 `Magisk`,我们使用 `adb` 和 `fastboot` 工具链接手机和烧录分区。按照原理的不同分 `第三方REC` 和 `修改 Boot` 20 | 21 | 深刷是比 fastboot 更深一层的方法,可以无视Bootloader进行提取刷写操作,主要方式为 9008 和 mtk 联发科工具。 22 | 23 | !!! info "Magisk" 24 | Magisk 是一个强大的 Android 框架,是一个通用的第三方 systemless 接口,通过这样的方式实现一些较强大的功能。它修改启动分区,并保留了系统文件。这种修改只是虚拟地覆盖在原始文件 上。当某些东西请求系统文件时,修改后的版本将被发送到magisk指定的位置。但是由于所有系统文件都是完整的,因此可以欺骗SafetyNet认为一切正常。应用仍然可以在有被root的手机上运行。它通过挂载一个与系统文件相隔离的文件系统来加载自定义内容,为系统分区打开了一个通往平行世界的入口,所有改动在那个世界(Magisk 分区)里发生,在必要的时候却又可以被认为是(从系统分区的角度而言)没有发生过。当被挂载的 Magisk 分区被隐藏甚至被取消挂载时,原有系统分区的完整性丝毫未损。因此严格来说 Magisk 可以被看作是一种文件系统。 25 | 26 | ![示意图](https://s3.bmp.ovh/imgs/2022/08/16/95cafb324009b035.png) 27 | 28 | ## 选什么 29 | 30 | 首先,你必须先 解锁 Bootloader.(如果可以深刷则不需要) 31 | 32 | 线刷是最值得推荐的,过程也不复杂,只要刷机过程保持电量充足,刷机包正确,刷机过程不对手机进行操作,一般都是能成功刷入的。 33 | 34 | 1. 无需第三方 **Recovery** 35 | 2. 不影响系统升级(完整包升级) 36 | 37 | 如果你的机型没有释放对应的 Rom包 ,你可以尝试深刷。 38 | 39 | ## 备份完整字库数据(分区)[^15] 40 | 41 | Root 后才能备份哟,防止你哪次刷写失败没有备份字库导致 `50包邮`。 42 | 43 | !!! tip 44 | 基带什么的每个机子都不一样,9008不能写所有分区,所以最好备份好完整字库。 45 | 46 | 如果刷坏没备份,不能正常使用sim卡,部分型号不能连wifi,甚至要换主板。 47 | 48 | 有些机型需要授权9008. 49 | 50 | 手机的字库指的是手机硬件(类比硬盘+Bios),但是我们这里讲的是里面的数据啦。 51 | 52 | 我们说的64GB,128GB,256GB等等,这个就是说的主板的储存容量,也就是字库。某个分区的数据损坏,好听的说法是分区数据坏了,难听的说法是字库损坏了。 53 | 54 | ### 有必要吗? 55 | 56 | 有人会说,不是有9008吗?有必要备份完整字库吗?有必要。 57 | 58 | 假如一个手机所有分区加起来有100个,9008大概会刷写30个左右,剩下的70个不会刷写。 59 | 60 | 那么这个70个当中有某个分区数据损坏了,9008是无法救砖的,必须返厂,用工厂售后(非卖手机的那种售后)的工厂包,方可救砖。当然,如果这个工厂包,没有刷写完100个分区的话,基本上也是无法救砖的。 61 | 62 | 如果你是频繁刷机的玩家,比如你刷GSI(通用系统镜像)把基带刷丢了怎么办?或者装了格机模块被格式化全分区数据了怎么办? 63 | 64 | 所以,Root后第一件事,就是备份完整字库,以防不测。 65 | 66 | 基带丢失,其实也就是基带分区的数据损坏了,只需要刷入正常的分区镜像就可以修复。但是,基带分区究竟是哪一个我们不得而知,所以需要备份完整的分区。 67 | 68 | ### 如何备份? 69 | 70 | 你可以去下载 [这个分区备份软件](https://www.coolapk.com/apk/com.example.ourom) 或者在 **[搞机助手](https://gjzsr.com/)** 等等中备份你的手机分区镜像或者打包当前系统ROM,到时候用线刷工具/深刷工具救回来。 71 | 72 | !!! info 73 | 如果救回来基带未知,可以试试官方线刷包单刷 persist.img 74 | 75 | ??? note "DD 备份" 76 | 77 | **UFS闪存手机** 78 | 79 | 主板一般被分成了6个硬盘,即**sda,sdb,sdc,sdd,sde,sdf。** 80 | 81 | 所以,主板设备代码分别是:`/dev/block/sda,/dev/block/sde,/dev/block/sdc,/dev/block/sdd,/dev/block/sde,/dev/block/sdf` 82 | 83 | 备份分区的代码举例:`dd if=/dev/block/sda1 of=/sdcard/1.img,dd if=/dev/block/sda2 of=/sdcard/2.img`等等等等............................ 84 | 85 | 还原分区的代码举例:`dd if=/sdcard/1.img of=/dev/block/sda1,dd if=/sdcard/2.img of=/dev/block/sda2` 等等等等............................ 86 | 87 | **Emmc闪存手机** 88 | 89 | 主板设备代码:**/dev/block/mmcblk0** 90 | 91 | 备份分区的代码举例:`dd if=/dev/block/mmcblk0p1 of=/sdcard/1.img,dd if=/dev/block/mmcblk0p2 of=/sdcard/2.img`等等等等............................ 92 | 93 | 还原分区的代码举例:`dd if=/sdcard/1.img of=/dev/block/mmcblk0p1,dd if=/sdcard/2.img of=/dev/block/mmcblk0p2`等等等等............................ 94 | 95 | 当然,像 system 分区, vendor 分区,userdata 分区,super 分区,这些分区就没必要进行备份还原了。 96 | 97 | 查看分区信息的命令: 98 | 99 | 先安装busybox的面具模块:链接: `pan.baidu.com/s/1hFQr0nvXprzcz2gyQxtFzQ` 提取码: `y61r` 100 | 101 | 然后终端命令:`busybox fdisk /dev/block/sda` 回车,然后再输入p回车,就可以看到sda这块硬盘的所有分区信息了。adb,adc,add,ade,adf 102 | 103 | 同理,emmc闪存手机的命令是:busybox fdisk /dev/block/mmcblk0回车,再输入p回车,就能看到所有分区信息了。 104 | 105 | ### 没有备份怎么办 106 | 107 | 如果你的手机已经出现问题,且没有备份完整字库。 108 | 109 | 需要去售后换主板(-300) 或者 找一台同机型的手机,提取完整备份字库刷入救机,是否成功看运气,因为会不会黑砖,这是个待验证的问题。 110 | 111 | 最好不要使用别人的手机的全字库备份,就算不发生手机黑屏变砖的情况,也会大概率出现 Bootlocker 永久锁定,永久无法再次解锁。 112 | 113 | 如果刷入另一台同型号手机的基带,两台手机会有相同的串号。 114 | 115 | 备份的基带,只要不换主板就可以一直用。 116 | 117 | ## 结束后你可能需要做的 118 | 119 | 确认 Root 没有问题后,再打开 Magisk App 中选择**安装 > 直接安装**,来「永久」写入 Magisk。 120 | 121 | 系统更新时想要保留 Magisk 的,重新打包刷入一次是最为通用稳妥的办法。 122 | 123 | !!! info 124 | Magisk 工作机制是「拦截」,Magisk通过挂载一个与系统文件相隔离的文件系统来加载自定义内容,为系统分区打开了一个通往平行世界的入口,所有改动在那个世界(Magisk 分区)里发生,在必要的时候却又可以被认为是(从系统分区的角度而言)没有发生过。Magisk 可以被看作是一种文件系统,这种文件系统通过巧妙的实现方式避开了对系统文件的直接修改 125 | 126 | ### 参考材料 127 | 128 | ``` 129 | [^15]:[告诉大家如何防止掉基带问题](https://www.coolapk1s.com/feed/21305538) 130 | 131 | [^13]:[**通过ADB给手机刷入第三方Recovery**](https://blog.linioi.com/posts/8/)**** 132 | 133 | [^21]:[底层刷机教程/全解析](https://wiki.pchelper666.com/%E5%BA%95%E5%B1%82%E5%88%B7%E6%9C%BA%E6%95%99%E7%A8%8B) 134 | 135 | [^42]:[部分华为麒麟手动获取BL解锁码](https://zhuanlan.zhihu.com/p/397173427) 136 | 137 | [^43]:[华为麒麟深刷救砖[变砖绝杀技]](https://www.coolapk1s.com/feed/26830366) 138 | 139 | [^44]:[小米11搞机指南](https://blog.chitang.dev/posts/mi11/) 140 | 141 | [^45]:[关于ProjectTreble和AndroidGSI](https://bbs.liuxingw.com/t/9315/2.html) 142 | 143 | [^46]:[安卓手机刷入GSI镜像教程](https://www.irom.net/post/9.html) 144 | 145 | [^47]:[刷写GSI的要求](https://source.android.com/docs/setup/build/gsi#flashing-gsis) 146 | 147 | [^48]:[动态分区刷GSI-通用镜像-的正确姿势](https://www.chaptsand.top/posts/da8abb0.html) 148 | 149 | [^49]:[小米平板5Pro刷入GSIAndroid教程](https://dev.moe/2716) 150 | 151 | ``` 152 | -------------------------------------------------------------------------------- /code_of_conduct.md: -------------------------------------------------------------------------------- 1 | 2 | # Contributor Covenant Code of Conduct 3 | 4 | ## Our Pledge 5 | 6 | We as members, contributors, and leaders pledge to make participation in our 7 | community a harassment-free experience for everyone, regardless of age, body 8 | size, visible or invisible disability, ethnicity, sex characteristics, gender 9 | identity and expression, level of experience, education, socio-economic status, 10 | nationality, personal appearance, race, caste, color, religion, or sexual 11 | identity and orientation. 12 | 13 | We pledge to act and interact in ways that contribute to an open, welcoming, 14 | diverse, inclusive, and healthy community. 15 | 16 | ## Our Standards 17 | 18 | Examples of behavior that contributes to a positive environment for our 19 | community include: 20 | 21 | * Demonstrating empathy and kindness toward other people 22 | * Being respectful of differing opinions, viewpoints, and experiences 23 | * Giving and gracefully accepting constructive feedback 24 | * Accepting responsibility and apologizing to those affected by our mistakes, 25 | and learning from the experience 26 | * Focusing on what is best not just for us as individuals, but for the overall 27 | community 28 | 29 | Examples of unacceptable behavior include: 30 | 31 | * The use of sexualized language or imagery, and sexual attention or advances of 32 | any kind 33 | * Trolling, insulting or derogatory comments, and personal or political attacks 34 | * Public or private harassment 35 | * Publishing others' private information, such as a physical or email address, 36 | without their explicit permission 37 | * Other conduct which could reasonably be considered inappropriate in a 38 | professional setting 39 | 40 | ## Enforcement Responsibilities 41 | 42 | Community leaders are responsible for clarifying and enforcing our standards of 43 | acceptable behavior and will take appropriate and fair corrective action in 44 | response to any behavior that they deem inappropriate, threatening, offensive, 45 | or harmful. 46 | 47 | Community leaders have the right and responsibility to remove, edit, or reject 48 | comments, commits, code, wiki edits, issues, and other contributions that are 49 | not aligned to this Code of Conduct, and will communicate reasons for moderation 50 | decisions when appropriate. 51 | 52 | ## Scope 53 | 54 | This Code of Conduct applies within all community spaces, and also applies when 55 | an individual is officially representing the community in public spaces. 56 | Examples of representing our community include using an official e-mail address, 57 | posting via an official social media account, or acting as an appointed 58 | representative at an online or offline event. 59 | 60 | ## Enforcement 61 | 62 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 63 | reported to the community leaders responsible for enforcement at 64 | [INSERT CONTACT METHOD]. 65 | All complaints will be reviewed and investigated promptly and fairly. 66 | 67 | All community leaders are obligated to respect the privacy and security of the 68 | reporter of any incident. 69 | 70 | ## Enforcement Guidelines 71 | 72 | Community leaders will follow these Community Impact Guidelines in determining 73 | the consequences for any action they deem in violation of this Code of Conduct: 74 | 75 | ### 1. Correction 76 | 77 | **Community Impact**: Use of inappropriate language or other behavior deemed 78 | unprofessional or unwelcome in the community. 79 | 80 | **Consequence**: A private, written warning from community leaders, providing 81 | clarity around the nature of the violation and an explanation of why the 82 | behavior was inappropriate. A public apology may be requested. 83 | 84 | ### 2. Warning 85 | 86 | **Community Impact**: A violation through a single incident or series of 87 | actions. 88 | 89 | **Consequence**: A warning with consequences for continued behavior. No 90 | interaction with the people involved, including unsolicited interaction with 91 | those enforcing the Code of Conduct, for a specified period of time. This 92 | includes avoiding interactions in community spaces as well as external channels 93 | like social media. Violating these terms may lead to a temporary or permanent 94 | ban. 95 | 96 | ### 3. Temporary Ban 97 | 98 | **Community Impact**: A serious violation of community standards, including 99 | sustained inappropriate behavior. 100 | 101 | **Consequence**: A temporary ban from any sort of interaction or public 102 | communication with the community for a specified period of time. No public or 103 | private interaction with the people involved, including unsolicited interaction 104 | with those enforcing the Code of Conduct, is allowed during this period. 105 | Violating these terms may lead to a permanent ban. 106 | 107 | ### 4. Permanent Ban 108 | 109 | **Community Impact**: Demonstrating a pattern of violation of community 110 | standards, including sustained inappropriate behavior, harassment of an 111 | individual, or aggression toward or disparagement of classes of individuals. 112 | 113 | **Consequence**: A permanent ban from any sort of public interaction within the 114 | community. 115 | 116 | ## Attribution 117 | 118 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], 119 | version 2.1, available at 120 | [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. 121 | 122 | Community Impact Guidelines were inspired by 123 | [Mozilla's code of conduct enforcement ladder][Mozilla CoC]. 124 | 125 | For answers to common questions about this code of conduct, see the FAQ at 126 | [https://www.contributor-covenant.org/faq][FAQ]. Translations are available at 127 | [https://www.contributor-covenant.org/translations][translations]. 128 | 129 | [homepage]: https://www.contributor-covenant.org 130 | [v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html 131 | [Mozilla CoC]: https://github.com/mozilla/diversity 132 | [FAQ]: https://www.contributor-covenant.org/faq 133 | [translations]: https://www.contributor-covenant.org/translations 134 | -------------------------------------------------------------------------------- /old/kernel.md: -------------------------------------------------------------------------------- 1 | 2 | 本节为非必须部分,上手需要**一定的知识储备**,如果你**没事**或者**不清楚为什么搞内核**,可以看下一节。 3 | 4 | !!! danger 5 | 如果你的手机内核版本为`5.4`,那它使用了 GKI(Generic Kernel Image) 1.0,给这种设备单独编译出可用的内核几乎是**不可能**的, 就算能编译出来, 手机外围设备(如触摸屏,尾插等)也无法工作. 6 | 7 | !!! warning 8 | 当你在执行时,因为每个人所使用的系统操作环境不同,很可能会出现不可控的奇怪报错,出现问题提问前请确保严格按照本教程操作。**提问要给出详细信息和测试结果,并参考首页的提问指南** 9 | 10 | ### 看前须知 11 | 12 | 首先,你需要确认你的手机内核是**开源**的(这个需要自己了解搜索信息)。 13 | 14 | 如果不开源,那就不用继续看了。 15 | 16 | #### 为什么自定义系统内核 17 | 18 | 我们都知道,安卓使用 Linux 内核,但是系统内核的功能被严重阉割,导致有些东西(例如 Docker)跑不起来。 19 | 20 | 这时候,我们就需要构建自己的 Linux 内核,来补全这些功能,让我们需要的软件能正常运行。 21 | 22 | 修改内核能做到的当然不止如此,在安卓上,Linux 内核扮演的角色大致相当与电脑的 BIOS+系统内核,也就是说,你还可以通过修改内核来优化性能,甚至超频。不过这就是后话了。 23 | 24 | ### 准备环境 25 | 26 | 编译 Linux 内核肯定是需要 Linux 的,目前有如下几种方法 27 | 28 | - 实机安装一个 Linux 发行版(比如 Ubuntu) 29 | 30 | - 使用 Windows 的 Linux 子系统v2(WSL2)安装一个Linux发行版(推荐 Ubuntu) 31 | 32 | 如果电脑配置不大行,建议实机安装。**RAM 为 8G 或更低的设备一定要实机安装!** 33 | 34 | 对于如何安装以上的系统不在本文主题内,如果你不懂,可以搜索一下。 35 | 36 | 本教程以 Ubuntu22.04 为例. 37 | 38 | 首先,我们要把软件源更换为国内镜像源,在终端输入以下命令: 39 | 40 | ```bash 41 | sudo sed -i "s@http://.*archive.ubuntu.com@https://mirrors.tuna.tsinghua.edu.cn@g" /etc/apt/sources.list 42 | sudo apt update 43 | ``` 44 | 45 | 以上命令会将软件源更换为清华大学源。然后我们开始安装依赖,在终端输入以下命令安装依赖: 46 | 47 | ```bash 48 | sudo apt install -y acl aptly bc bison build-essential busybox ca-certificates clang coreutils cpio crossbuild-essential-arm64 curl debian-archive-keyring debian-keyring dialog flex gawk gcc git gpg gzip initramfs-tools jq kmod libbison-dev libcrypto++-dev libelf-dev libfdt-dev libfile-fcntllock-perl libfl-dev liblz4-tool libncurses-dev libncurses5 libncurses5-dev libncursesw5-dev libpython2.7-dev libssl-dev libusb-1.0-0-dev lld llvm locales lz4 lzma lzop mtools ncurses-base ncurses-term ntpdate p7zip p7zip-full parallel patchutils pigz pixz pkg-config pv python2 python3 python3-dev python3-distutils rsync subversion swig tar udev unzip uuid uuid-dev uuid-runtime vim wget xz-utils zip zlib1g-dev zstd 49 | ``` 50 | 51 | ### 旧版内核 52 | 53 | !!! warning 54 | **本部分适用于旧版内核, 即 4.x 或更旧版本, 5.x 或更新版本不适用!!** 55 | 56 | #### 准备编译器, 源码 57 | 58 | 安装完前面的依赖后,我们需要下载编译器,这里使用clang。 59 | 60 | ```bash 61 | cd ~ && git clone --depth=1 https://github.com/kdrag0n/proton-clang.git 62 | ``` 63 | 64 | !!! help 65 | 如果克隆很慢,尝试把源地址前加上`https://ghproxy.com/`, 例如`https://ghproxy.com/https://github.com/kdrag0n/proton-clang.git` 66 | 67 | 下载完后,我们在终端输入`vi ~/.bashrc`打开编辑器,按下键盘上的 "Insert" 键,使用方向键滑到文件底部,加上以下代码: 68 | 69 | ```bash 70 | export PATH="~/proton-clang/bin:$PATH" 71 | export CROSS_COMPILE=aarch64-linux-gnu- 72 | export CROSS_COMPILE_ARM32=arm-linux-gnueabi- 73 | export ARCH=arm64 74 | ``` 75 | 76 | 然后按下 “Esc” 键,输入`:wq!`保存退出。 77 | 78 | 接着输入以下命令 `source ~/.bashrc && clang --version`,它应该有大概长这样的输出(因人而异): 79 | 80 | ``` 81 | Proton clang version 13.0.0 (https://github.com/llvm/llvm-project b4fd512c36ca344a3ff69350219e8b0a67e9472a) 82 | Target: x86_64-unknown-linux-gnu 83 | Thread model: posix 84 | InstalledDir: /home/proton-clang/bin 85 | ``` 86 | 87 | 如果没有,说明某一步操作有问题,你必须回头纠正, 否则下面的操作无法进行。 88 | 89 | 对于源码, 你可以去 [XDA开发者论坛(英文)](https://forum.xda-developers.com) 寻找你手机的内核源码,直接在论坛内搜索你的手机型号即可。这里的内核一般是经过大佬修改的第三方版,带有性能优化或额外功能。本人推荐去这里查找。 90 | 91 | 如果没有也别沮丧。可能只是还没人做而已。 一般来讲,小米几乎所有手机和一加所有手机的内核都是开源的。 92 | 93 | 小米开源内核目录[在这里](https://github.com/micode/xiaomi_kernel_opensource),直接查找你手机的型号即可。 94 | 95 | 一加开源内核[在这里](https://github.com/orgs/oneplusoss/repositories) 96 | 97 | 对于初学者,在这个目录找到你手机对应的源码比较难,所以推荐直接谷歌 “一加xx内核源码”。 98 | 99 | 对于其他品牌,你可以试着谷歌 “你的手机型号+内核源码”。 100 | 101 | #### 准备配置并开始编译 102 | 103 | 现在环境已经准备好了,我们需要下载我们之前找到的内核源码。 104 | 105 | [本教程作为示例所使用的内核源码在这里](https://github.com/flypatriot/crdroid_12_kernel "本教程作为示例所使用的内核源码在这里") 106 | 107 | 一般内核都使用 Git 源,我们应该通过这种方法下载: 108 | 109 | ```bash 110 | git clone --depth=1 <源地址> 111 | ``` 112 | 113 | 其中 `--depth=1` 表示浅克隆,即不克隆提交记录,因为 Linux 历史悠久,提交记录非常多(比如本教程的示例内核有86万多个提交)如果将他们克隆下来,将会非常慢,最后源码目录也会非常大。 114 | 115 | !!! help 116 | 如果克隆很慢,尝试把源地址中的`github.com`改成`hub.fastgit.xyz`。 117 | 118 | 克隆完成后,进入源码目录。 119 | 120 | !!! warning 121 | 本教程的 Docker 支持仅仅是一个例子。你需要在此步做出你想要的修改。 122 | 123 | 为了实现 Docker 支持,我们需要修改手机内核的默认配置。 124 | 进入 `arch/arm64/configs` 使用 `ls` 命令查看一下。一般会有几个文件,还有个`vendor`文件夹。 125 | 例: 126 | 127 | ``` 128 | march7th@march7th-pc:~/crdroid_12_kernel/arch/arm64/configs$ ls -al 129 | total 392 130 | drwxr-xr-x 1 march7th march7th 166 Aug 13 06:22 . 131 | drwxr-xr-x 1 march7th march7th 178 Aug 13 05:25 .. 132 | -rw-r--r-- 1 march7th march7th 16736 Aug 13 05:25 defconfig 133 | -rw-r--r-- 1 march7th march7th 13173 Aug 13 05:25 gki_defconfig 134 | -rw-r--r-- 1 march7th march7th 182835 Aug 13 06:22 nethunter_defconfig 135 | -rw-r--r-- 1 march7th march7th 168683 Aug 13 05:25 op8-perf_defconfig 136 | -rw-r--r-- 1 march7th march7th 7579 Aug 13 05:25 ranchu64_defconfig 137 | drwxr-xr-x 1 march7th march7th 468 Aug 13 05:25 vendor 138 | ``` 139 | 140 | 可以看到,有一个 `op8-perf_defconfig`。我们的示例手机是一加8T。所以这就是我们要找的默认配置。 141 | 142 | !!! help 143 | 如果`arch/arm64/configs`下没有你要的配置,不妨进入`vendor`文件夹一看。 144 | 145 | 使用文本编辑器打开该文件。在文件底部添加: 146 | 147 | ``` 148 | CONFIG_NAMESPACES=y 149 | CONFIG_NET_NS=y 150 | CONFIG_PID_NS=y 151 | CONFIG_IPC_NS=y 152 | CONFIG_UTS_NS=y 153 | CONFIG_CGROUPS=y 154 | CONFIG_CGROUP_CPUACCT=y 155 | CONFIG_CGROUP_DEVICE=y 156 | CONFIG_CGROUP_FREEZER=y 157 | CONFIG_CGROUP_SCHED=y 158 | CONFIG_CPUSETS=y 159 | CONFIG_MEMCG=y 160 | CONFIG_KEYS=y 161 | CONFIG_VETH=y 162 | CONFIG_BRIDGE=y 163 | CONFIG_BRIDGE_NETFILTER=y 164 | CONFIG_IP_NF_FILTER=y 165 | CONFIG_IP_NF_TARGET_MASQUERADE=y 166 | CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y 167 | CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y 168 | CONFIG_NETFILTER_XT_MATCH_IPVS=y 169 | CONFIG_NETFILTER_XT_MARK=y 170 | CONFIG_IP_NF_NAT=y 171 | CONFIG_NF_NAT=y 172 | CONFIG_POSIX_MQUEUE=y 173 | CONFIG_DEVPTS_MULTIPLE_INSTANCES=y 174 | CONFIG_NF_NAT_IPV4=y 175 | CONFIG_NF_NAT_NEEDED=y 176 | CONFIG_OVERLAY_FS=y 177 | ``` 178 | 179 | 然后保存退出,回到源码目录,执行: 180 | 181 | ```bash 182 | make CC=clang AR=llvm-ar NM=llvm-nm STRIP=llvm-strip OBJCOPY=llvm-objcopy OBJDUMP=llvm-objdump O=out op8-perf_defconfig 183 | ``` 184 | 185 | 加载默认配置。 186 | 187 | 此时我们已经可以开始编译。不过你可能还想修改一下别的,所以我们执行: 188 | 189 | ```bash 190 | make CC=clang AR=llvm-ar NM=llvm-nm STRIP=llvm-strip OBJCOPY=llvm-objcopy OBJDUMP=llvm-objdump O=out menuconfig 191 | ``` 192 | 193 | 比如我们还想修改内核名,那我们需要修改这一项: 194 | `General setup -> Local version - append to kernel release` 195 | 修改完后,直接 ”Esc“ 保存退出 196 | 197 | 然后我们开始编译,输入以下命令 198 | 199 | ```bash 200 | make CC=clang AR=llvm-ar NM=llvm-nm STRIP=llvm-strip OBJCOPY=llvm-objcopy OBJDUMP=llvm-objdump O=out -j$(nproc) 201 | ``` 202 | 203 | `nproc`会输出你 CPU 的线程数,也就是这条命令会让你的系统火力全开。如果你不想让它火力全开,酌情把`$(nproc)`换成一个比你 CPU 的线程数小的数字。 204 | 205 | 然后便是等待。等他出现`Ready`字样时就说明你成功了。 206 | 207 | ### 新版内核(5.4 以上) [WIP] 208 | 209 | 结合此文档阅读本小节内容:[构建内核](https://source.android.com/docs/setup/build/building-kernels) 210 | 211 | 为什么没有 5.4 内核? 5.4 是 GKI 1.0 版本, 这东西非常阴间, 笔者研究了两三天也毫无进展, 去 xda 一看, 根本没有人单独发布内核。所以决定放弃捏 212 | 213 | *注: 谷歌 Pixel 手机除外, 因为谷歌给 Pixel 的内核提供了很阳间的一键编译脚本* 214 | 215 | 新版内核与上面的旧版内核最大的差别就是: 内核本身是统一由谷歌提供的, 存储在`boot`分区, 设备厂商提供的驱动等全部被拆分进入`vendor_boot`和`vendor_dlkm`分区中, 这意味着内核碎片化从此不复存在了。 216 | 217 | 而我们, 再也不用东奔西走去找内核源码, 也不需要盼望厂商开源了. 开个香槟先🍾 218 | 219 | 如果你的设备出厂就是安卓12或更高版本, 那它就使用了这里的“新版内核”。 220 | 221 | 首先, 我们需要下载安卓的源码管理工具`repo`。 222 | 223 | 以 Ubuntu 为例: 224 | 225 | ```bash 226 | sudo apt install repo 227 | ``` 228 | 其他发行版可以在软件仓库中搜索, 或是用这些命令安装: 229 | 230 | ```bash 231 | sudo curl https://storage.googleapis.com/git-repo-downloads/repo > /usr/bin/repo && \ 232 | chmod a+x /usr/bin/repo 233 | ``` 234 | 235 | 首先你需要安装 Magisk, 然后读取你手机`boot`镜像内的信息。 236 | 237 | 执行下面的命令: 238 | ```bash 239 | uname -a 240 | su -c dd if=/dev/block/by-name/boot$(getprop ro.boot.slot_suffix) of=/sdcard/boot.img 241 | su -c /data/adb/magisk/magiskboot unpack /sdcard/boot.img 242 | ``` 243 | 244 | 第一条命令会输出你的内核版本, 看起来像这样: 245 | ``` 246 | Linux localhost 4.19.268-march7th-ksu #4 SMP PREEMPT Sun Aug 10 11:45:14 JST 1919 aarch64 Android 247 | ``` 248 | 249 | *不要问这个为什么是 4.19.268, 因为笔者没有新版内核的设备 250 | 251 | *你的应该是 5.10.x 或 5.15.x, 否则你应该看上面的旧版内核部分! 252 | 253 | 第三条命令会输出很多boot镜像的信息, 而我们需要关注以下几条: 254 | ``` 255 | OS_VERSION [13.0.0] 256 | OS_PATCH_LEVEL [2022-12] 257 | KERNEL_FMT [raw] 258 | ``` 259 | 260 | 新建文件夹, 叫什么随意。 261 | 262 | 进入你新建的文件夹; 263 | 264 | 根据上面的设备信息, 这里要拉取不同的分支; 265 | 266 | 这里没法给出非常具体的应该拉哪个分支, 只能给出几个例子: 267 | 268 | 比如你是安卓12(OS_VERSION 为 12.x.y), 内核版本为5.10.x, 安全补丁日期是2022年10月(OS_PATCH_LEVEL 为 2022-10), 执行下面的命令: 269 | ```bash 270 | repo init -u https://android.googlesource.com/kernel/manifest -b common-android12-5.10-2022-10 271 | ``` 272 | 273 | 再比如你是安卓13(OS_VERSION 为 13.x.y), 内核版本为5.15.x, 安全补丁日期是2022年12月(OS_PATCH_LEVEL 为 2022-12), 执行下面的命令: 274 | ```bash 275 | repo init -u https://android.googlesource.com/kernel/manifest -b common-android13-5.15-2022-12 276 | ``` 277 | 278 | 上条命令执行完后, 继续执行 `repo sync -j$(nproc)` 279 | 280 | !!! help 281 | 这些命令可能会花费一点时间, 耐心的等一会. 282 | 283 | !!! help 284 | 如果花费时间实在太长, 你可能必须通过镜像站拉取源代码, 把上面命令中所有的`android.googlesource.com`替换成`mirrors.tuna.tsinghua.edu.cn/git/AOSP/`即可. 例如`repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/kernel/manifest -b common-android13-5.15-2022-12` 285 | 286 | !!! help 287 | 如果提示无法连接到`gerrit.googlesource.com`, 请参照[git-repo的帮助页面的](https://mirrors.tuna.tsinghua.edu.cn/help/git-repo)更新一节。 288 | 289 | 剩下的会写的,别急 290 | 可以先参考[Ylarod 的教程](https://xtuly.cn/article/arm64-kernel-research-3#d9d370819ef944179363eeb7069115d0) 291 | 292 | ### 打包并刷入内核 293 | 294 | 考虑到有些手机并没有可用的第三方 Recovery ,所以我们不使用 Anykernel3 ,而是通过修改boot镜像手动刷入。 295 | 296 | 终端输入以下命令下载工具: 297 | 298 | ``` 299 | curl https://forum.xda-developers.com/attachments/aik-linux-v3-8-all-tar-gz.5300923/ | tar xzvf - 300 | ``` 301 | 302 | 然后我们需要从手机中提取 Boot 镜像,并将其传到电脑上的工具目录内。如何提取镜像在前面 Root 的环节已经提到。 303 | 304 | 接着: 305 | 306 | ``` 307 | ./unpackimg.sh 308 | ``` 309 | 310 | 工具目录下会出现一个`split_img`文件夹,其中的`-kernel`就是我们要替换的文件。 311 | 312 | 编译好的内核在源码目录`out/arch/arm64/boot`目录下。一般来说文件名带有`Image`字样,把它复制到这里,替换掉原来的文件。 313 | 314 | 然后: 315 | 316 | ``` 317 | ./repackimg.sh 318 | ``` 319 | 320 | 重新打包内核文件,然后刷入重启。你应该会看到内核变化了。大功告成。 321 | -------------------------------------------------------------------------------- /old/Root/Gsi.md: -------------------------------------------------------------------------------- 1 | # GSI 通用系统镜像 2 | 3 | - 一台 Root 的安卓 ? 以上的手机 4 | - 一双手 5 | - 电脑 6 | 7 | 本节适合有刷机经验的同学。[^48] 8 | 9 | 如果在酷安,XDA等论坛翻了半天,却发现只有原厂救砖包,说明你的机型可能过于冷门,以至于没有开发者愿意专门为这个机型做刷机包,可以试一下 通用系统镜像。(见术语解释) 10 | 11 | [^46] 12 | 13 | [^47] 14 | 15 | [^49] 16 | 17 | ## 备份 Persist 18 | 19 | Persist 分区中储存了诸如指纹模块等的校准信息,这些信息每部设备都是不同的,如果你是已经 Root 的设备,建议备份一份,以备不时之需。如果你还没有Root,可以按照线刷教程先修补boot再刷入取得权限。 20 | 21 | 具体操作如下。 22 | 23 | ``` 24 | adb shell 25 | su # 获取 root 权限,请在手机上确认 26 | dd if=/dev/block/bootdevice/by-name/persist of=/sdcard/persist.img 27 | # 此时按两次 Ctrl + D,退出 adb shell 28 | adb pull /sdcard/persist.img 29 | ``` 30 | 31 | **长期保存,避免丢失** 32 | 33 | ## 支持查询 34 | 35 | 首先,你需要确认设备是否支持project treble,下载并打开[treble check](https://play.google.com/store/apps/details?id=com.kevintresuelo.treble) 36 | 37 | **只有 Project Treble 通过检测,此手机才可以刷 GSI 镜像包。** 38 | 39 | 如果 Seamless System Updates 结果显示 A/B 即表明你应该选择的通刷包后缀名为 A/B 或者 AB ,若显示 A only,即表明你应该选择的通刷包后缀名为 A 或者 A only。但是如果最下面的 system-as-root 显示 支持,那么不管你的设备是否支持ab分区,都必须刷入标注为ab的包。 40 | 41 | ## CPU 架构 42 | 43 | 将手机链接电脑,在 shell 进入 adb 环境,接着上网查找你所使用手机的 CPU 架构或者输入指令: 44 | 45 | ``` 46 | adb shell getprop ro.product.cpu.abi 47 | ``` 48 | 49 | 如过架构是`arm64-v8a`,那么你应该去找 ARM64 的包,如果是`armeabi-v7a`,那么你应该去寻找 ARM32 的包。 50 | 51 | a-only和a/b的GSI不通用。 52 | 53 | ## 寻找镜像 54 | 55 | 查阅 [通用镜像列表](https://github.com/phhusson/treble_experimentations/wiki/Generic-System-Image-%28GSI%29-list),也可以去 XDA 论坛或者问一下刷机群里的人。 56 | 57 | ??? help "啊不想动怎么办" 58 | 呃.... 如果不会找的话,推荐换个流行的手机(?)或者(¥-5)请人找吧~ 59 | 60 | !!! tip 61 | 在XDA查找GSI包,需要查看最前面的标签是`GSI`,`Treble`或`Project Treble`,而不是 `rom` 62 | 63 | 一般`GSI`的格式是:`系统名 系统版本 编译日期 作者 CPU架构 分区类型 官方与否` 64 | 其中后面带有`gapps`字样的刷机包,表明其内置了谷歌服务。 65 | 66 | ## 刷入镜像 67 | 68 | 主要任务是刷写 system 分区,所以 fastboot 和第三方 rec 都可以做到。刷入 GSI 前,可以先刷入 Magisk,便于之后的操作。[^49] 69 | 70 | !!! danger 71 | 72 | 刷写 GSI 双清擦除用户数据(data和cache) 73 | 74 | Data 分区的强制加密要关掉 75 | 76 | 刷 GSI 之前先刷底包,使用官方稳定ROM作为底包,不要使用开发版和任何官改版 77 | 78 | 需要刷入同等级的GSI 79 | 80 | 应该进入 fastboot 使用 fastboot 指令刷,如果有 第三方rec 就下专包卡刷 81 | 82 | ### 停用AVB验证 83 | 84 | **刷入vbmeta.img停用AVB验证** 85 | 86 | Android 10引入了启动时验证 (AVB),在刷写 GSI之前,需要先下载并刷入 vbmeta.img 以停用 AVB,vbmeta.img一般包含会随GSI镜像一起发布。 87 | 88 | 如果你是安卓 10 以上,请刷入从底包中提取的vbmeta文件,防止无法进入系统。 89 | 90 | ``` 91 | fastboot --disable-verification flash vbmeta vbmeta.img 92 | ``` 93 | 94 | !!! info 95 | 此步骤用于停用 Verified Boot 分区验证,只需执行一次 96 | 如果已经安装了 Magisk,可以跳过本步骤,但未来要一直安装着 Magisk,否则 system 分区通不过校验可能会被禁用,需要重刷 97 | 98 | ### 还原原厂Recovery 99 | 100 | 请确保你的设备正在使用的是**原厂的rec**,目的是可以启动 `fastbootd` (一些TWRP会阻止它...见[这里](https://forum.xda-developers.com/t/fastboot-flash-system-partition-not-found.3992977/#post-84653227))。 101 | 102 | 或者使用 TWRP 里的 用户空间`fastboot` 也可以,如果TWRP有这个功能可以不用刷回 recovery。 103 | 104 | ??? tip "刷写system分区,关于TWRP问题" 105 | 106 | [官方文档](https://source.android.com/docs/core/bootloader/fastbootd?hl=zh-cn) 107 | 108 | 为支持 fastbootd,引导加载程序必须实现一个新的启动控制块 (BCB) 命令:boot-fastboot。如需进入 fastbootd 模式,引导加载程序应将 boot-fastboot 写入 BCB 消息的命令字段,并保持 BCB 的 recovery 字段不变(以重启中断的恢复任务)。status、stage 和 reserved 字段也保持不变。引导加载程序在 BCB 命令字段中发现 boot-fastboot 时,会加载并启动到恢复映像。然后,recovery 会解析 BCB 消息并切换到 fastbootd 模式。 109 | 110 | 在使用fastbootd的设备上,如果TWRP支持 用户空间`fastboot` 可以不用刷回 recovery,但是如果不支持就会发生以下类似报错: 111 | ``` 112 | fastboot flash system system-arm64-ab-vanilla.img 113 | Sending sparse 'system' 1/3 (676429 KB) OKAY [ 22.9843s] 114 | Writing sparse 'system' 1/3 FAILED (remote: 'Partition not found') 115 | Finished. Total time: 23.050s 116 | ``` 117 | **但是现在一般都会支持 Fastbootd,所以一般没什么要担心的** 118 | 119 | 然后,将手机重启至`fastbootd`模式(`fastboot reboot fastboot`) 120 | 121 | ### 刷写 122 | 123 | 对于A-only,输入`fastboot flash system system.img` 124 | 125 | 对于A/B,输入 126 | 127 | ```shell 128 | fastboot flash system_a GSI.img 129 | fastboot flash system_b GSI.img 130 | ``` 131 | 132 | **具体操作注意看你下载的包的说明。** 133 | 134 | 刷写完成后,使用`fastboot -w`清除数据,这一步会格式化data注意提前备份)。 135 | 136 | 在具有较小系统分区的 Android 10 或更高版本设备上,刷写 GSI 时可能会出现以下错误消息 137 | 138 | ``` 139 | Resizing 'system_a' FAILED (remote: 'Not enough space to resize partition') 140 | fastboot: error: Command failed 141 | ``` 142 | 143 | 如果出现这种情况,你可以使用以下命令删除产品分区并为系统分区释放空间。这可以为刷写 GSI 提供额外的空间: 144 | 145 | ```shell 146 | fastboot delete-logical-partition product_a 147 | ``` 148 | 149 | 后缀 _a 应与 system 分区的槽位 ID 匹配,例如本示例中的 system_a。 150 | 151 | **重启** 152 | 153 | ``` 154 | 155 | fastboot reboot recovery 156 | ``` 157 | 158 | 进入 Recovery 后,按提示操作清除数据并重启系统。 159 | !!! tip 160 | 刷入不同类型 ROM 或版本降级时必须清除数据,否则无法进入系统。 161 | 162 | 开机,但是如果开机时发现双清了还是不断重启!这个时候就可以考虑更换一个 GSI 包了,或者是底包的问题,恢复至官方系统,升级一下试试? 163 | 164 | !!! info 165 | 刷了GSI收不到短信 但是电话和流量都能用,是votle问题 166 | 167 | ## 动态分区 168 | 169 | Android10开始引入了动态分区(Dynamic Partitions),把原来的system , vendor , product还有odm分区整合到了一起。 170 | 171 | 如果你想简单点或者不想向下看,可以使用 172 | 173 | ### 使用动态系统更新(DSU) 174 | 175 | [官方文档](https://source.android.google.cn/docs/core/ota/dynamic-system-updates?hl=zh-cn) 176 | 177 | 安卓10正式版及以上,可以在开发者选项中Feature flags > settings_dynamic_system 中启用该功能。国内系统UI大多隐藏了,可以尝试用下面的adb 命令开启. 178 | 179 | ``` 180 | adb shell setprop persist.sys.fflag.override.settings_dynamic_system true 181 | ``` 182 | 183 | ### 安装前的准备 184 | 185 | 通过DSU安装的GSI需要是可直接刷写的raw格式镜像,在开始前先检查你的镜像是不是raw格式 186 | linux或者mac系统可以用`file system.img`命令查看 187 | 188 | ``` 189 | file system.img 190 | system.img: Linux rev 1.0 ext2 filesystem data, UUID=91180515-3f1c-501d-888d-6f81f7ca3301 (extents) (large files) (huge files) 191 | ``` 192 | 193 | 若返回值是这样的就是raw格式 194 | 若为稀疏格式(simg),可以使用以下命令把system镜像转为raw格式镜像 195 | 196 | ``` 197 | simg2img system.img system_raw.img 198 | ``` 199 | 200 | !!! tip 201 | 一般GSI镜像都是simg格式,先检查转换 202 | 203 | ### 安装操作 204 | 205 | **将镜像打包为gz格式** 206 | 207 | ``` 208 | gzip -c system_raw.img > system_raw.gz 209 | ``` 210 | 211 | !!! tip 212 | 也可以直接用压缩工具压缩为gzip压缩包 213 | 214 | **用adb推到手机内置储存** 215 | 216 | ``` 217 | adb push system_raw.gz /storage/emulated/0/Download/ 218 | ``` 219 | 220 | ### 系统升级 221 | 222 | 建议非必要不升级。升级前务必备份好所有数据,升级后有可能无法开机,需要清数据重刷。 223 | 224 | **安装动态系统更新** 225 | 226 | 复制后一起执行。 227 | 228 | ``` 229 | adb shell am start-activity \ 230 | -n com.android.dynsystem/com.android.dynsystem.VerificationActivity \ 231 | -a android.os.image.action.START_INSTALL \ 232 | -d file:///storage/emulated/0/Download/system_raw.gz \ 233 | --el KEY_SYSTEM_SIZE $(du -b system_raw.img|cut -f1) \ 234 | --el KEY_USERDATA_SIZE 8589934592 235 | ``` 236 | 237 | !!! tip 238 | 这里第五行的$(du -b system_raw.img|cut -f1)可直接用 system_raw.img 的大小代替,不然用windows刷会报错 239 | 240 | 大小使用 `ls -la`看 241 | 242 | 比如`system_raw.img`的大小为`2370265088` 243 | ``` 244 | adb shell am start-activity \ 245 | -n com.android.dynsystem/com.android.dynsystem.VerificationActivity \ 246 | -a android.os.image.action.START_INSTALL \ 247 | -d file:///storage/emulated/0/Download/system_raw.gz \ 248 | --el KEY_SYSTEM_SIZE 2370265088 \ 249 | --el KEY_USERDATA_SIZE 2370265088 250 | ``` 251 | 252 | 然后你就会看到状态栏有正在安装的动态更新的提示,安装完重启进入第二个系统 253 | 254 | 小米10出厂安卓10,必然是支持DSU的,你可以用此方法尝试安装phh的aosp GSI。 255 | 256 | ??? help "修复 GSI 可能存在的基础问题" 257 | **修复自动亮度失效** 258 | 1. 下载 [framework-res\_\_auto\_generated\_rro.apk](https://drive.google.com/open?id=1DF-v-gwG1rQT-SbAZQYlTwFZFcOPKI9U) 259 | 2. 用re管理器将其复制到 vendor/overlay 文件夹 260 | 3. 修改 overlay 文件夹权限为 `rwxr-xr-x` 261 | 4. 手机打开 Termux 输入以下命令 262 | ``` 263 | mount -o remount -w /vendor chcon u:object_r:vendor_overlay_file:s0 /vendor/overlay;chcon u:object_r:vendor_overlay_file:s0 /vendor/overlay/framework-res__auto_generated_rro.apk 264 | ``` 265 | 266 | **修复扬声器失真** 267 | 1. 手机下载 Root Explorer 268 | 2. 删除两个文件夹 269 | > /system/vendor/lib/soundfx 270 | > /system/vendor/lib64/soundfx 271 | 272 | 3. 改变 vendor 文件夹的权限为 `rw-r--r--` 273 | 4. 重启手机 274 | 上面的内容来自 [^48] 275 | 下面的内容来自 https://dev.moe/2716 [^49] 276 | **修复屏幕状态栏圆角** 277 | 278 | adb 输入以下命令(最后的数字根据自己喜好任意修改): 279 | ``` 280 | adb shell settings put secure sysui_rounded_content_padding 20 281 | ``` 282 | 283 | **开启 120 Hz** 284 | ``` 285 | adb shell settings put system min_refresh_rate 120 286 | adb shell settings put system peak_refresh_rate 120 287 | ``` 288 | 289 | 如果设置里有 Phh Treble Settings 的话,也可以在里面直接改(Misc features -> Force FPS)。 290 | 291 | **移除屏幕锐化** 292 | https://dev.moe/wp-content/uploads/2022/06/Remove-screen-sharpening-Mi-Pad-5-Pro.zip 293 | 294 | **修复音频** 295 | https://dev.moe/wp-content/uploads/2022/06/GSI-Audio-Stutter-Fix-Mi-Pad-5-Pro-elish.zip 296 | 297 | https://forum.xda-developers.com/t/run-an-GSI-on-your-mi-pad-5.4352591/page-9#post-86447857 298 | 299 | **修复任务栏** 300 | https://github.com/Coxxs/hide-tablet-taskbar 301 | 302 | ### SafetyNet[^49] 303 | 304 | SafetyNet 的修复根据不同 ROM 分成几种情况. 305 | 306 | **PixelExperience ROM** 已经模拟了设备信息,只需在 Magisk DenyList 对 Play Services 隐藏即可。 307 | 308 | **Lineage OS** 可能由于自带了 `su`,我没能成功通过 Basic integrity 测试(可能要自己修改 ROM 了)。 309 | 310 | **Android 13 GSI** 需要 [MagiskHidePropsConf](https://github.com/Magisk-Modules-Repo/MagiskHidePropsConf) + [Universal SafetyNet Fix](https://github.com/kdrag0n/safetynet-fix) + Magisk DenyList,其中 MagiskHidePropsConf 设置成 MIUI 系统的 fingerprint,外加将 `ro.build.version.security_patch` 设置成 MIUI 系统对应版本的值(可以用 7z 打开线刷包的 `system.img`,在 `system/build.props` 里找到)。 311 | 312 | **Magisk DenyList 配置方法** 313 | 314 | 1. 打开 Magisk,设置里选择 Hide the Magisk app 315 | 2. 打开 Magisk,设置里启用 Zygisk 及 Enforce DenyList 316 | 3. 进入 Configure DenyList,找到 Google Play services,只需勾选 `com.google.android.gms` 及 `com.google.android.gms.unstable` 两项。 317 | 4. 进入设置,清除 Google Play services 及 Google Play Store 的数据。 318 | 319 | ### DRM[^49] 320 | 321 | DRM 方面,Widevine 无需任何操作,保持在 L1,修复 Safetynet 后即可直接观看 Disney+。 322 | 323 | Netflix 可能多了一套验证,默认会是 L3,以下操作后可以恢复到 L1: 324 | 325 | 1. 确保 SafetyNet 已通过 326 | 2. 将 Netflix 添加到 DenyList 列表 327 | 3. 用 Magisk 模块在 `build.prop` 添加一行 `ro.netflix.bsp_rev=Q8250-19134-1` 328 | - 该值仅适用于小米平板 5 Pro 329 | - Magisk 模块写法非常简单,可以参考上面的「移除屏幕锐化」模块 330 | - 修改 `build.prop` 后需要清除 Netflix 应用数据重新登录 331 | - 该修改[已合并至上游](https://github.com/phhusson/device_phh_treble/pull/313/files),一段时间后的新版 ROM 可能已经自带了 332 | - Dev.moe:感谢几位朋友的帮助! 333 | -------------------------------------------------------------------------------- /old/module.md: -------------------------------------------------------------------------------- 1 | # 模块 2 | 3 | 这里列举几个常用的模块和相关刷入教程。 4 | 5 | Magisk 模块仓库在很早就被官方移除,面具只能通过 zip 文件刷入模块,而 LSPosed 可以通过安装 APP 来启动模块(而不需要重启)。 6 | 7 | ## 模块安装 8 | 9 | 打开 模块 页面,点击 从本地ZIP安装 ,选择模块压缩包文件,然后等待刷入完毕。 10 | 11 | 一些模块仓库如下,推荐先装一个救砖模块,这个模块自己下面的仓库。 12 | 13 | - 14 | - 15 | 16 | !!! danger 17 | 安装模块必须审计模块脚本!如果你不会 sh ,那么请从可靠信源下载模块文件或者论坛提问求助/搜索。 18 | 模块的文件地址`/sbin/.magisk/img`,如果你没有这个软链接,可以去 `/data/adb/modules` 查看。 19 | 如果没有安装救砖模块,可以在 `cache` 目录下面建立一个 `disable_magisk` 文件,禁用掉进系统,进了系统再把插件删了。 20 | 21 | ## 装模块装砖了 22 | 23 | 装了不兼容的模块,导致手机无法进入系统了!怎么办?下面是一些解决方案。[^40] 24 | 25 | ### 救砖模块 26 | 27 | 社区中有一种自动救砖模块可以使用。你可以在仓库中下载。 28 | 29 | ### ADB 保险 30 | 31 | Magisk 从2019年其实施了一项故障保险,如果你的 Xposed 使用 Magisk(自从 Oreo 之后就没有使用 Xposed)它会起作用。 32 | 33 | **如果启用了 adb 调试** 34 | 35 | 将不断重复开机的手机关机,用数据线链接手机电脑,打开 ADB 环境(前文已经叙述) 36 | 37 | 电脑端打开命令行窗口并执行 ``adb wait-for-device shell magisk --remove-modules`` 38 | 39 | 长按电源键开机... 40 | 41 | **如果没有启用 adb 调试** 42 | 43 | 刷入你 原有备份的 boot.img,启用 USB 调试,再刷入 magisk_patched_boot.img,然后运行命令。 44 | 45 | 这样就算 SystemUI 崩溃,运行这个命令也会删除所有模块。 46 | 47 | !!! tip 48 | 先执行再开机 49 | 50 | !!! info 51 | 如果你可以刷入 非 root 的 `boot.img` 并启用 USB 调试,就可以在 root 时修复软重启。 52 | 如果在 adb 调试模式之前在引导期间卡住了.....通常这种问题比砖你的 Magisk 模块更严重。 53 | 54 | ### ADB 命令 55 | 56 | 打开 CMD 并输入 `adb shell` 57 | 58 | 切换到目录 `cd /data/adb/modules` 59 | 60 | 查找模块 `ls -Ral /data/adb/modules` 61 | 62 | 删除 magisk 模块 `rm -r /data/adb/modules/module_name` 63 | 64 | >Adb安全验证被禁用时,所有设备都可以获得授权。 65 | 66 | ### TWRP 67 | 68 | 进`TWRP`,删除`data/adb/modules`,里面是你的magisk模块。 69 | 70 | ## 自定义模块 71 | 72 | 面具模块的主要作用是修改系统文件和替换系统文件,但是又不是彻底修改,修改之后可以通过关闭或删除模块恢复原样。 73 | 下载好的Magisk模块,可以解压,查看文件结构.[25^] 74 | 75 | 通常模块安装程序是打包成zip文件的Magisk模块,可以在Magisk应用程序或第三方recovery(如TWRP)中进行刷入。安装程序的文件结构与Magisk模块的文件结构相同(请查看上一部分以获取更多信息)。最简单的Magisk模块安装程序只是一个打包为zip文件的Magisk模块,此外还包含以下文件: 76 | 77 | ```update-binary``` 下载最新的[module_installer.sh](https://github.com/topjohnwu/Magisk/blob/master/scripts/module_installer.sh)并重命名/复制为```update-binary``` 78 | 79 | ```updater-script``` 此文件应仅包含字符串```#MAGISK``` 80 | 81 | 默认情况下,`update-binary` 将检查/设置环境,加载使用的脚本,将模块安装程序的zip解压缩到将要安装模块的位置,最后执行一些琐碎的任务和清理工作,这些工作和清理应满足大多数简单模块的需求。 82 | 83 | ### BusyBox[^27] 84 | 85 | Magisk附带了功能完整的BusyBox二进制文件(包括完全的SELinux支持)。可执行文件位于`/data/adb/magisk/busybox`。 86 | 87 | Magisk的 BusyBox 支持运行时切换“ASH独立Shell模式”。这种独立模式意味着,当在BusyBox的灰壳中运行时,每个单独的命令将直接使用 BusyBox 中的 applet,而不管什么被设置为PATH。例如,像ls, rm, chmod这样的命令不会使用 PATH 中的内容(在Android的情况下,默认是`/system/bin/ls`, `/system/bin/rm`,和`/system/bin/chmod`),而是直接调用内部的BusyBox小程序。这可以确保脚本始终运行在可预测的环境中,并且无论运行在哪个 Android 版本上都始终拥有完整的命令套件。要强制命令不使用BusyBox,您必须调用具有完整路径的可执行文件。 88 | 89 | 在 Magisk 上下文中运行的每个 shell 脚本都将在 BusyBox 的 `ash shell` 中执行,并启用独立模式。对于与第三方开发人员相关的内容,这包括所有引导脚本和模块安装脚本。 90 | 91 | 如果你想在 Magisk 以外的地方使用这个“独立模式”功能,有两种方法可以实现: 92 | 93 | 1. 准备环境变量 ASH_STANDALONE 1 94 | 95 | 例如: `ASH_STANDALONE=1 /data/adb/magisk/busybox sh