给Redmi Note 8 刷crDroid 8 (Android 12)并获取Root
前段时间该死的12306开始不让我主力机器人脸核验通过了,我怀疑是root的问题,于是我就想拿我的另一台备用机尝试一下Kernel SU。
目前这个备用机器已经被我刷了crDroid 6 (Android 10) 小BUG有点多,我于是想要刷个新版的crDroid试一下。
这个设备是有TWRP的,并且是官方支持,解锁Bootloader后就可以刷入后愉快的刷机玩耍了。
之前的刷机过程回顾
首先是要绑定小米账号后,申请解锁手机,解锁手机会丢失数据。
解锁完成后,进入fastboot模式,刷入下载好的recovery,也就是TWRP:
fastboot flash recovery twrp.img
重启,进入recovery模式,使用adb sideload
侧载刷机包进行刷机。
大概就是这么一个过程,我给这个设备刷了Android 10 的 crDroid。
刷crDroid 8 (Android 12)踩的坑
我一开始以为,直接像之前一样,用recovery刷就行了,结果没想到,刷完之后近系统卡卡的,WiFi也打不开。
后面降级刷回Android 10 无法开机,刷Android 11问题一样。
接着,我尝试想要刷会MIUI,刷入过程没有报错,但是开机后卡LOGO,卡完了LOGO后重启就进recovery了。。。
但是,神奇的事情发生了,在我刷了基于Android 11 的MIUI 12.5后,再刷Android 12 的 crDroid,然后进系统就一切正常了,WIFI也正常了。十分的神奇。
我把这段神奇的经历发出来,给大家参考一下。由于折腾期间不确定因素太大了,我也没有进行记录,这个过程就是根据当时的回忆整理的。也是反反复复刷了好多次刷机包才折腾出来的。
具体的刷机方法就是用TWRP USB侧载刷机包进行刷机,网上教程很多,就不再赘述了。
简单来说就几个步骤:
- 下载对应的刷机包
- 重启进入TWRP的recovery
- 选择advance,然后选择ADB Sideload
- 电脑端USB连接手机后,运行
adb sideload crdroid-8.10.zip
,等待刷完重启即可
哦,对,开始之前别忘了安装adb:
pacman -S android-tools
放一下我刷的crDroid 8的卡刷包:
crDroidAndroid-12.1-20221019-ginkgo-v8.10.zip
安装Kernel SU
安装过程十分的折腾,最终还是成功了,我把具体的操作在这里说明,让你们能少走弯路。
首先,这个机器似乎不支持 GKI 内核,我手上拿到内核的版本是4.14
,正好卡在为非 GKI 内核集成 KernelSU 的版本要求上面:最低要求内核版本是 4.14。
而碰巧我在kernel SU的官网看到对于 红米 note 8 有对应的内核,但是是非官方支持的,那我就试试看折腾一下啰。
内核项目的地址:https://github.com/siimsek/Lightning-Kernel
这也就意味着,我要自己编译内核,然后安装。不过嘛,我电脑就是Linux系统,编译个内核也不是什么很麻烦的事情,直接上手开干吧。
克隆内核仓库到本地
找一个你方便的目录,然后:
git clone https://github.com/siimsek/Lightning-Kernel
编辑build.sh
我们需要开启Kernel SU的支持并且指定到特定版本,虽然官方说最后一版支持非GKI内核的是0.9.5
,但是我实际测试下来也是不支持的,得要0.9.4
的版本才能支持。
所以,我们要修改编译脚本指定Kernel SU的版本为0.9.4
。
以下是修改后的build.sh:
#!/bin/bash
SECONDS=0 # builtin bash timer
ZIPNAME="Lightning.Kernel_$(TZ=Europe/Istanbul date +"%Y%m%d-%H%M").zip"
TC_DIR="$HOME/tc/r498229b"
GCC_64_DIR="$HOME/tc/aarch64-linux-android-4.9"
GCC_32_DIR="$HOME/tc/arm-linux-androideabi-4.9"
AK3_DIR="$HOME/android/AnyKernel3"
DEFCONFIG="vendor/ginkgo-perf_defconfig"
KSU=true
export PATH="$TC_DIR/bin:$PATH"
export KBUILD_BUILD_USER="siimsek"
export KBUILD_BUILD_HOST="linux"
export KBUILD_BUILD_VERSION="1"
if ! [ -d "${TC_DIR}" ]; then
echo "Clang not found! Cloning to ${TC_DIR}..."
if ! git clone --depth=1 https://gitlab.com/prebuilts_clang_host_linux-x86/clang-r498229b.git ${TC_DIR}; then
echo "Cloning failed! Aborting..."
exit 1
fi
fi
if ! [ -d "${GCC_64_DIR}" ]; then
echo "gcc not found! Cloning to ${GCC_64_DIR}..."
if ! git clone --depth=1 -b lineage-19.1 https://github.com/LineageOS/android_prebuilts_gcc_linux-x86_aarch64_aarch64-linux-android-4.9.git ${GCC_64_DIR}; then
echo "Cloning failed! Aborting..."
exit 1
fi
fi
if ! [ -d "${GCC_32_DIR}" ]; then
echo "gcc_32 not found! Cloning to ${GCC_32_DIR}..."
if ! git clone --depth=1 -b lineage-19.1 https://github.com/LineageOS/android_prebuilts_gcc_linux-x86_arm_arm-linux-androideabi-4.9.git ${GCC_32_DIR}; then
echo "Cloning failed! Aborting..."
exit 1
fi
fi
rm -rf KernelSU && curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/main/kernel/setup.sh" | bash -s v0.9.4
if [ "$KSU" = true ]; then
sed -i 's/CONFIG_LOCALVERSION="\(.*\)"/CONFIG_LOCALVERSION="\1-KSU"/' arch/arm64/configs/$DEFCONFIG
sed -i 's/CONFIG_KSU=n/CONFIG_KSU=y/' arch/arm64/configs/$DEFCONFIG
ZIPNAME="Lightning.Kernel_$(TZ=Europe/Istanbul date +"%Y%m%d-%H%M")_KSU.zip"
fi
mkdir -p out
make O=out ARCH=arm64 $DEFCONFIG
echo -e "\nStarting compilation...\n"
make -j$(nproc --all) O=out ARCH=arm64 CC=clang LD=ld.lld AR=llvm-ar AS=llvm-as NM=llvm-nm OBJCOPY=llvm-objcopy OBJDUMP=llvm-objdump STRIP=llvm-strip CROSS_COMPILE=$GCC_64_DIR/bin/aarch64-linux-android- CROSS_COMPILE_ARM32=$GCC_32_DIR/bin/arm-linux-androideabi- CLANG_TRIPLE=aarch64-linux-gnu- Image.gz-dtb dtbo.img
sed -i 's/CONFIG_LOCALVERSION="\(.*\)-KSU"/CONFIG_LOCALVERSION="\1"/' arch/arm64/configs/$DEFCONFIG
sed -i 's/CONFIG_KSU=y/CONFIG_KSU=n/' arch/arm64/configs/$DEFCONFIG
if [ -f "out/arch/arm64/boot/Image.gz-dtb" ] && [ -f "out/arch/arm64/boot/dtbo.img" ]; then
echo -e "\nKernel compiled succesfully! Zipping up...\n"
if [ -d "$AK3_DIR" ]; then
cp -r $AK3_DIR AnyKernel3
elif ! git clone -q https://github.com/siimsek/AnyKernel3; then
echo -e "\nAnyKernel3 repo not found locally and cloning failed! Aborting..."
exit 1
fi
cp out/arch/arm64/boot/Image.gz-dtb AnyKernel3
cp out/arch/arm64/boot/dtbo.img AnyKernel3
rm -f *zip
cd AnyKernel3
git checkout ginkgo &> /dev/null
zip -r9 "../$ZIPNAME" * -x '*.git*' README.md *placeholder
cd ..
rm -rf AnyKernel3
rm -rf out/arch/arm64/boot
echo -e "\nCompleted in $((SECONDS / 60)) minute(s) and $((SECONDS % 60)) second(s) !"
echo "Zip: $ZIPNAME"
echo "----------------------------------"
rm -rf KernelSU
else
echo -e "\nCompilation failed!"
exit 1
fi
修改了两个地方:
- 开启Kernel SU 支持:
KSU=true
- 指定Kernel SU 版本:
rm -rf KernelSU && curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/main/kernel/setup.sh" | bash -s v0.9.4
编译内核
我个人在编译过程中遇到的报错只有bc
软件包没有安装导致报错,以及没有zip
软件包导致没有zip压缩包输出,安装软件包后即可正常编译:
pacman -S bc zip
在内核项目的文件夹内,执行build.sh,即可编译。
./build.sh
不出意外的话,编译成功后会在项目的文件夹生成一个zip
文件,例如Lightning.Kernel_20250408-1131_KSU.zip
,这就是我们需要的内核。
这个是我编译好的内核,需要的可以拿去用:
Lightning.Kernel_20250408-0902_KSU.zip
以及对应的apk安装包:
KernelSU_v0.9.4_11838-release.apk
刷入内核
把编译出来的zip文件复制到手机。
进入TWRP的recovery,点击install,选择编译出来的那个zip文件即可。
安装Kernel SU应用
应用版本要和内核的版本匹配,对于我这里,就要安装0.9.4
的版本。
安装完成后看到正常运行就是成功了。
修复类原生网络感叹号
adb shell settings delete global captive_portal_https_url
adb shell settings delete global captive_portal_http_url
adb shell settings put global captive_portal_http_url http://connect.rom.miui.com/generate_204
adb shell settings put global captive_portal_https_url https://connect.rom.miui.com/generate_204
设置完成后重新开关一下WiFi就可以了。
更换时间服务器
adb shell settings put global ntp_server ntp1.aliyun.com
安装必备模块
为了提高root可玩性,安装以下模块:
LSPosed-v1.9.2-7024-zygisk-release.zip
Zygisk-Next-1.2.8-512-4b5d6ad-release.zip
装修毛坯房
这一步无非就是安装各种日常使用的应用,鉴于国内软件大部分都是一坨大便,个人建议是安装play版来使用,或者使用定制版。
在网上这些资源还是很好找的,我就不放出来了。
不过,我还是强烈推荐一款叫做Iconify
的应用,可以详细个性化类原生,虽然不如国内定制系统那么个性化。但是相比于不能更改,还是要好很多的。
至此,折腾完毕。