package me.weishu.kernelsu import android.system.Os /** * @author weishu * @date 2022/12/10. */ data class KernelVersion(val major: Int, val patchLevel: Int, val subLevel: Int) { override fun toString(): String { return "$major.$patchLevel.$subLevel" } fun isGKI(): Boolean { // kernel 6.x if (major > 5) { return true } // kernel 5.10.x if (major == 5) { return patchLevel >= 10 } return false } } fun parseKernelVersion(version: String): KernelVersion { val find = "(\\d+)\\.(\\d+)\\.(\\d+)".toRegex().find(version) return if (find != null) { KernelVersion(find.groupValues[1].toInt(), find.groupValues[2].toInt(), find.groupValues[3].toInt()) } else { KernelVersion(-1, -1, -1) } } fun parseKMI(input: String): String? { val regex = Regex("(.* )?(\\d+\\.\\d+)(\\S+)?(android\\d+)(.*)") val result = regex.find(input) return result?.let { val androidVersion = it.groups[4]?.value ?: "" val kernelVersion = it.groups[2]?.value ?: "" "$androidVersion-$kernelVersion" } } fun getKMI(): String? { Os.uname().release.let { return parseKMI(it) } } fun getKernelVersion(): KernelVersion { Os.uname().release.let { return parseKernelVersion(it) } }