之前获取 Root 权限一直用的是 Root 大师,不过后来发现它的手机客户端增加了许多不必要的功能,于是想着切换到 SuperSU。
下载了 SuperSU v2.0.0 后,一路成功安装。然而,当打开后却显示“SU 二进制文件需要更新,是否继续?”,如下图所示。
若点击“取消”,则软件直接退出了;若点击“继续”,然后再点击“常规方式”,此时虽然显示“安装成功”,然而当再次打开后却依然提示需要更新。
网上搜索了下,发现遇到这个问题的还真不少,试了这里的更新 host 文件方法,依然无效。
百思不得其解。
又在网上苦寻了一番,依然无果。怒了,于是想着从源头解决这个问题,看看 SuperSu 在更新二进制文件时到底做了哪些事,然后再手动照着做一遍,看下到底问题出于何处。
从这里下载了 SuperSU 的压缩包文件,这个是用来卡刷的。将其解压后,仔细查看了下各个文件,终于在如下文件里发现了端倪:
# file UPDATE-SuperSU-v2.00.zip/META-INF/com/google/android/update-binary
...
ui_print "- Placing files"
mkdir /system/bin/.ext
cp $BIN/su /system/xbin/daemonsu
cp $BIN/su /system/xbin/su
if ($SUGOTE); then
cp $BIN/su /system/xbin/sugote
cp $MKSH /system/xbin/sugote-mksh
fi
cp $BIN/su /system/bin/.ext/.su
cp $COM/Superuser.apk /system/app/Superuser.apk
cp $COM/install-recovery.sh /system/etc/install-recovery.sh
cp $COM/99SuperSUDaemon /system/etc/init.d/99SuperSUDaemon
echo 1 > /system/etc/.installed_su_daemon
...
ui_print "- Setting permissions"
set_perm 0 0 0777 /system/bin/.ext
set_perm 0 0 $SUMOD /system/bin/.ext/.su
set_perm 0 0 $SUMOD /system/xbin/su
...
其中比较重要的是如下这几行:
...
cp $BIN/su /system/xbin/su
cp $BIN/su /system/bin/.ext/.su
...
set_perm 0 0 $SUMOD /system/bin/.ext/.su
set_perm 0 0 $SUMOD /system/xbin/su
...
前面两行,将 SU 可执行文件复制到了两个目录下,后面两行为其设置 set UID 权限。
使用 RootExplorer 在手机上分别打开目录 /system/bin/,/system/bin/.ext/ 和 /system/xbin/,结果如图:
可以看到,在目录 /system/bin/ 和 /system/xbin/下均有个大小为 358.39K 的 su 文件,而在目录 /system/bin/.ext/ 下有个大小为 122.48K 的 .su 文件。
经过一番分析,可知大小为 358.39K 的那个文件是由 Root 大师产生的,而大小为 122.48K 的文件才是 SuperSU 自带的。猜想是 SuperSU 检测到目录 /system/bin/ 中已有了 SU 文件,故将其直接复制到了目录 /system/xbin/ 下,而当再次打开 SuperSU 时,会发现两个 bin/ 目录下的文件与自己所需的不符,故会再次提示需要更新,周而复始,一直失败。
如此一来,解决方法也简单了:只需要将目录 /system/bin/.ext/ 下的 .su 文件复制到目录 /system/xbin/ 下,将其改名为 su,再删掉目录 /system/bin/ 下的 su 和 .suv 文件(这两个文件均是由 Root 大师产生)。如图所示:
此时,再次打开 SuperSU,可以看到没有需要更新的提示了。然后就可以卸载 Root 大师软件。
好了,一切搞定!
(完)
参考资料: