鸚鵡原本用的小米5尊享版,開不了機也沒法充電了
上網爬到類似的情況都是進水造成居多,也有是Power IC掛點
送民間維修檢測後,確定主版掛點,就上官網搶了一隻黑色小米6
收到後當然就是開始弄成自己習慣用的狀態
鸚鵡現在沒啥時間搞刷機包了,也很久沒刷機了。
所以陸續遇到一些問題,就在這一併列出解決辦法
鸚鵡習慣刷機完後,會在 recovery 內進行一次備份保留,然後再測試還原
刷入 Magisk 也測試完成後,就開始準備備份與還原測試
還原後重新開機卻又馬上進去 recovery 界面,跑了幾行指令後又重開
然後~~ 我就看到MIUI初始化設定畫面!
試了幾次都一樣,甚至連相片、下載的檔案都一併被清空了
得知刷入 SuperSU不會造成還原失敗並清空資料
就想到測試不刷 Magisk 的備份與還原,結果一樣失敗並清空資料
來回測試了幾次後,判斷問題應該是「資料加密」造成的,最後測試結果也是如此
Cofface 版本中有「Disable Verify」的功能
執行結果有處理到分區加密的 patch,但實際上卻是沒有作用
因此要另外手動處理 boot.img,調整分區掛載的參數避免手機自動加密分區
也要對userdata分區完整格式化一次。所以操作前,記得將檔案完整備份到手機以外的地方
[[ 刷機前必備:解 Bootloader 鎖 或稱 解BL鎖 ]]
- 先申請解鎖權限:http://www.miui.com/unlock/index.html
- 下載 小米官方解鎖工具 v3.3.827.31 小米官方解鎖工具 v2.3.803.10
- 下載 國際開發版 卡刷包並儲存到手機 (鸚鵡使用 7.9.22 版)
- 設定 → 關於手機 → 最下方 系統更新 → 右上角功能 → 手動選擇安裝檔案
確認更新重開機後就是開發版 - 設定 → 關於手機 → 連點「MIUI版本」可開啟「開發人員選項」
- 設定 → 更多設定 → 開發人員選項(或開發者選項)
- 按下「綁定帳號與裝置」開始將手機與小米帳號進行綁定
如果使用穩定版進行綁定,會收到「86006 參數組合非法」這個錯誤訊息 - 手機關機後,按住「音量減」再按電源開機,即可進入 fastboot 模式
- 手機接上傳輸線連結到電腦,等驅動安裝好後
開啟小米官方解鎖工具,依照畫面指示進行操作即可完整解鎖
[[ 避免自動加密 userdata 分區 ]]
確認要使用的卡刷包中的 boot.img 不會主動對 userdata 分區進行加密
官方的開發版或穩定版預設都會加密,以下列出取消自動加密的方法 (國際開發版 7.9.22)
下載工具:Cofface 釋出的 Windows 版 bootimg 工具 (補充載點)
將國際開發版卡刷包中的 boot.img 解壓縮出來,與 bootimg.exe 放在相同目錄
並執行下面的命令來解開 boot.img (範例都放在 D:\bootimg目錄裡面)
1 |
D:\bootimg\>bootimg.exe --unpack-bootimg |
開啟 D:\bootimg\cpiolist.txt 檔案,搜尋「file verity_key 」並將開行刪除
找到 D:\bootimg\initrd\verity_key 檔案,並刪除
找到 D:\bootimg\initrd\fstab.qcom 檔案,使用文字編輯軟體開啟
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# Android fstab file. # The filesystem that contains the filesystem checker binary (typically /system) cannot # specify MF_CHECK, and must come before any filesystems that do specify MF_CHECK #TODO: Add 'check' as fs_mgr_flags with data partition. # Currently we dont have e2fsck compiled. So fs check would failed. #<src> <mnt_point> <type> <mnt_flags and options> <fs_mgr_flags> /dev/block/bootdevice/by-name/system /system ext4 ro,barrier=1,discard wait,verify /dev/block/bootdevice/by-name/userdata /data ext4 nosuid,nodev,barrier=1,noauto_da_alloc,discard wait,check,reservedsize=128M,fileencryption=ice /dev/block/bootdevice/by-name/persist /persist ext4 nosuid,nodev,barrier=1 wait,check,forceformat /dev/block/bootdevice/by-name/cust /cust ext4 nosuid,nodev,barrier=1 wait,check /devices/soc/a800000.ssusb/a800000.dwc3/xhci-hcd.0.auto/usb1* /storage/usbotg vfat nosuid,nodev wait,voldmanaged=usbotg:auto /dev/block/bootdevice/by-name/misc /misc emmc defaults defaults |
在「/dev/block/bootdevice/by-name/userdata」這行後面的 fs_mgr_flags 中
可以看到「fileencryption=ice」這個參數,連同前面的「,」一起刪除
這個參數設定了系統對 userdata 分區做 File-Based Encryption(FBE: 以檔案為基礎的加密模式)
修改完後的範例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# Android fstab file. # The filesystem that contains the filesystem checker binary (typically /system) cannot # specify MF_CHECK, and must come before any filesystems that do specify MF_CHECK #TODO: Add 'check' as fs_mgr_flags with data partition. # Currently we dont have e2fsck compiled. So fs check would failed. #<src> <mnt_point> <type> <mnt_flags and options> <fs_mgr_flags> /dev/block/bootdevice/by-name/system /system ext4 ro,barrier=1,discard wait,verify /dev/block/bootdevice/by-name/userdata /data ext4 nosuid,nodev,barrier=1,noauto_da_alloc,discard wait,check,reservedsize=128M /dev/block/bootdevice/by-name/persist /persist ext4 nosuid,nodev,barrier=1 wait,check,forceformat /dev/block/bootdevice/by-name/cust /cust ext4 nosuid,nodev,barrier=1 wait,check /devices/soc/a800000.ssusb/a800000.dwc3/xhci-hcd.0.auto/usb1* /storage/usbotg vfat nosuid,nodev wait,voldmanaged=usbotg:auto /dev/block/bootdevice/by-name/misc /misc emmc defaults defaults |
存檔離開後重新封裝 boot.img
1 |
D:\bootimg\bootimg.exe --repack-bootimg |
這時候目錄中會剩下有兩個檔案:boot-old.img和 boot-new.img
將 boot-new.img 更名為 boot.img 並加入卡刷包取代原本的 boot.img 這樣就完成了
最後將整個卡刷包傳到手機中
[[ 刷入第三方 Recovery ]]
第三方 Recovery 有幾個選擇:TWRP(載點) 和 Cofface TWRP(載點1 載點2)原本用的版本在最近的備份還原時,出了狀況沒辦法正確的還原
最後選擇使用的是 TWRP 官方版本:TWRP for sagit
同樣進入 fastboot模式,解開刷包都會內含 fastboot 工具和 recovery 的 img 檔案
使用命令刷入 第三方recovery
1 2 |
D:\>fastboot.exe flash recovery RECOVERY_檔案名稱 D:\>fastboot.exe boot RECOVERY_檔案名稱 |
第一行:刷入第三方 Recovery
第二行:將第三方 Recovery 傳到手機端,直接用來開機
進入 Recovery 後,選 「安裝 / Install」並選擇剛剛修改過 boot.img 的卡刷包
安裝完成後回到首頁,選 「清除/Wipe」後點中下方的「格式化Data分區/Format Data」
出現警示畫面,輸入「yes」後確認格式化
完成後重新開機開始初始化設定,看到桌面後
設定 → 更多設定 → 系統安全 → 對手機進行加密 選項 不會顯示「已加密」
且在點進去後 畫面下方會有一個「對手機進行加密」的按鈕(不管能不能按)
完成到這邊,系統對 userdata 分區不加密
基本上在 recovery 的備份與還原功能都可以正常動作了
[[ 刷入 Magisk + Universal SafetyNet Fix ]]
下載: Magisk 14.0 (載點)、Universal SafetyNet Fix (載點)、Magisk Manager
將下載的三個檔案傳輸到手機中,重新進入 recovery 中
先安裝 Magisk-v14.0.zip,完成後重新開機進入系統
桌面應該會出現 Magisk Manager,如果沒有自行安裝 apk 檔案
再次進入 recovery 後再安裝 universal-safetynet-fix-v2-beta-5.zip,並重新開機
確認網路已連線
開啟 Magisk Manager 並在畫面上 「點擊啟動 SafetyNet 檢查」
兩個測試 ctsProfile和 basicIntegrity 應該都會是 true
以上就大功告成,也可以使用 Android Pay 了