diff --git a/manager/app/src/main/java/me/weishu/kernelsu/ui/util/KsuCli.kt b/manager/app/src/main/java/me/weishu/kernelsu/ui/util/KsuCli.kt index 1a2416b280d2..f7b9781fa187 100644 --- a/manager/app/src/main/java/me/weishu/kernelsu/ui/util/KsuCli.kt +++ b/manager/app/src/main/java/me/weishu/kernelsu/ui/util/KsuCli.kt @@ -4,15 +4,16 @@ import android.content.ContentResolver import android.content.Context import android.database.Cursor import android.net.Uri +import android.os.Build import android.os.Environment import android.os.Parcelable import android.os.SystemClock import android.provider.OpenableColumns -import android.system.Os import android.util.Log import com.topjohnwu.superuser.CallbackList import com.topjohnwu.superuser.Shell import com.topjohnwu.superuser.ShellUtils +import com.topjohnwu.superuser.io.SuFile import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import kotlinx.parcelize.Parcelize @@ -335,7 +336,18 @@ fun isAbDevice(): Boolean { } fun isInitBoot(): Boolean { - return !Os.uname().release.contains("android12-") + val shell = getRootShell() + if (shell.isRoot) { + // if we have root, use /dev/block/by-name/init_boot to check + val abDevice = isAbDevice() + val initBootBlock = "/dev/block/by-name/init_boot${if (abDevice) "_a" else ""}" + val file = SuFile(initBootBlock) + file.shell = shell + return file.exists() + } + // https://source.android.com/docs/core/architecture/partitions/generic-boot + return ShellUtils.fastCmd(shell, "getprop ro.product.first_api_level").trim() + .toInt() >= Build.VERSION_CODES.TIRAMISU } suspend fun getCurrentKmi(): String = withContext(Dispatchers.IO) {