This commit is contained in:
liankong
2025-04-01 12:29:06 +08:00
6 changed files with 39 additions and 53 deletions

View File

@@ -51,7 +51,6 @@ import androidx.compose.animation.shrinkVertically
import androidx.compose.runtime.saveable.rememberSaveable
import shirkneko.zako.sukisu.ui.theme.CardConfig
import androidx.core.content.edit
import shirkneko.zako.sukisu.ui.util.KernelConfigUtils.isKpmEnabled
@OptIn(ExperimentalMaterial3Api::class)
@Destination<RootGraph>(start = true)
@@ -156,11 +155,10 @@ fun HomeScreen(navigator: DestinationsNavigator) {
}
InfoCard()
if (!isSimpleMode) {
ContributionCard()
DonateCard()
LearnMoreCard()
ContributionCard()
}
Spacer(Modifier)
}
}
@@ -349,15 +347,6 @@ private fun StatusCard(
style = MaterialTheme.typography.bodyMedium
)
}
Spacer(modifier = Modifier.height(4.dp))
if (isKpmEnabled()) {
val kpmVersion = getKpmVersion()
Text(
text = stringResource(R.string.home_kpm_version, kpmVersion),
style = MaterialTheme.typography.bodyMedium
)
}
}
}
@@ -559,6 +548,12 @@ private fun InfoCard() {
InfoCardItem(stringResource(R.string.home_selinux_status), getSELinuxStatus())
if (!isSimpleMode) {
Spacer(Modifier.height(16.dp))
InfoCardItem(stringResource(R.string.home_kpm_version), getKpmVersion())
}
if (!isSimpleMode) {
Spacer(modifier = Modifier.height(16.dp))

View File

@@ -102,19 +102,25 @@ fun KpmScreen(
if (confirmResult == ConfirmResult.Confirmed) {
val success = loadingDialog.withLoading {
loadKpmModule(tempFile.absolutePath)
try {
val process = ProcessBuilder("nsenter", "-t", "1", "-m").start()
process.waitFor()
loadKpmModule(tempFile.absolutePath)
} catch (e: Exception) {
Log.e("KsuCli", "Failed to execute nsenter command: ${e.message}")
"failed"
}
}
Log.d("KsuCli", "loadKpmModule result: $success")
if (success == "success") {
if (success.contains("Success", ignoreCase = true)) {
viewModel.fetchModuleList()
snackBarHost.showSnackbar(
message = kpmInstallSuccess,
duration = SnackbarDuration.Long
)
} else {
// 修正为显示安装失败的消息
snackBarHost.showSnackbar(
message = kpmInstallFailed,
duration = SnackbarDuration.Long
@@ -157,7 +163,7 @@ fun KpmScreen(
onClick = {
selectPatchLauncher.launch(
Intent(Intent.ACTION_GET_CONTENT).apply {
type = "application/*"
type = "*/*"
}
)
},
@@ -238,7 +244,7 @@ fun KpmScreen(
unloadKpmModule(module.id)
}
Log.d("KsuCli", "unloadKpmModule result: $success")
if (success == "success") {
if (success.contains("Success", ignoreCase = true)) {
viewModel.fetchModuleList()
snackBarHost.showSnackbar(
message = kpmUninstallSuccess,

View File

@@ -1,15 +0,0 @@
package shirkneko.zako.sukisu.ui.util
import java.io.File
object KernelConfigUtils {
fun isKpmEnabled(): Boolean {
return try {
val config = File("/proc/config.gz").readText()
config.contains("CONFIG_KPM=y")
} catch (e: Exception) {
false
}
}
}

View File

@@ -486,51 +486,51 @@ private fun getKpmmgrPath(): String {
}
fun loadKpmModule(path: String, args: String? = null): String {
fun loadKpmModule(path: String, args: String? = null): Boolean {
val shell = getRootShell()
val cmd = "${getKpmmgrPath()} load $path ${args ?: ""}"
val result = ShellUtils.fastCmd(shell, cmd)
return result
return result.contains("Success")
}
fun unloadKpmModule(name: String): String {
fun unloadKpmModule(name: String): Boolean {
val shell = getRootShell()
val cmd = "${getKpmmgrPath()} unload $name"
val result = ShellUtils.fastCmd(shell, cmd)
return result
return result.trim().toIntOrNull() == 0
}
fun getKpmModuleCount(): String {
fun getKpmModuleCount(): Int {
val shell = getRootShell()
val cmd = "${getKpmmgrPath()} num"
val result = ShellUtils.fastCmd(shell, cmd)
return result
return result.trim().toIntOrNull() ?: 0
}
fun listKpmModules(): String {
val shell = getRootShell()
val cmd = "${getKpmmgrPath()} list"
val result = ShellUtils.fastCmd(shell, cmd)
return result
return result.trim()
}
fun getKpmModuleInfo(name: String): String {
val shell = getRootShell()
val cmd = "${getKpmmgrPath()} info $name"
val result = ShellUtils.fastCmd(shell, cmd)
return result
return result.trim()
}
fun controlKpmModule(name: String, args: String? = null): String {
fun controlKpmModule(name: String, args: String? = null): Int {
val shell = getRootShell()
val cmd = "${getKpmmgrPath()} control $name ${args ?: ""}"
val result = ShellUtils.fastCmd(shell, cmd)
return result
return result.trim().toIntOrNull() ?: -1
}
fun getKpmVersion(): String {
val shell = getRootShell()
val cmd = "${getKpmmgrPath()} version"
val result = ShellUtils.fastCmd(shell, cmd)
return result
return result.trim()
}

View File

@@ -230,11 +230,11 @@
<string name="kpm_uninstall_confirm">确定要卸载内核模块 %1$s 吗?</string>
<string name="kpm_uninstall_success">卸载成功</string>
<string name="kpm_uninstall_failed">卸载失败</string>
<string name="kpm_install">安装kpm模块</string>
<string name="kpm_install_confirm">确认安装吗?</string>
<string name="kpm_install_success">安装kpm模块成功</string>
<string name="kpm_install_failed">安装kpm模块失败</string>
<string name="home_kpm_version">KPM 版本: %s</string>
<string name="kpm_install">加载kpm模块</string>
<string name="kpm_install_confirm">确认加载吗?</string>
<string name="kpm_install_success">加载kpm模块成功</string>
<string name="kpm_install_failed">加载kpm模块失败</string>
<string name="home_kpm_version">KPM 版本</string>
<string name="close_notice">关闭</string>
<string name="kernel_module_notice">以下内核模块功能由KernelPatch开发经过修改后加入SukiSU Ultra的内核模块功能</string>
<string name="home_ContributionCard_kernelsu">SukiSU Ultra展望</string>

View File

@@ -232,13 +232,13 @@
<string name="kpm_uninstall_confirm">Determine the kernel module to uninstall: %1$s </string>
<string name="kpm_uninstall_success">Uninstalled successfully</string>
<string name="kpm_uninstall_failed">Failed to uninstall</string>
<string name="kpm_install">Installing the kpm module</string>
<string name="kpm_install_confirm">Confirm installation?</string>
<string name="kpm_install_success">Installation of kpm module successful</string>
<string name="kpm_install_failed">Installation of kpm module failed</string>
<string name="kpm_install">Load the kpm module</string>
<string name="kpm_install_confirm">Confirm Load?</string>
<string name="kpm_install_success">Load of kpm module successful</string>
<string name="kpm_install_failed">Load of kpm module failed</string>
<string name="kpm_args">kpm parameters</string>
<string name="kpm_control">kpm control</string>
<string name="home_kpm_version">KPM Version: %s</string>
<string name="home_kpm_version">KPM Version</string>
<string name="close_notice">close</string>
<string name="kernel_module_notice">The following kernel module functions were developed by KernelPatch and modified to include the kernel module functions of SukiSU Ultra</string>
<string name="home_ContributionCard_kernelsu">SukiSU Ultra Look forward to</string>