61 lines
1.3 KiB
Kotlin
61 lines
1.3 KiB
Kotlin
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)
|
|
}
|
|
} |