From a77faa1fe28a926f3dfc4bfb8c50d271ede557b3 Mon Sep 17 00:00:00 2001
From: ShirkNeko <109797057+ShirkNeko@users.noreply.github.com>
Date: Fri, 19 Sep 2025 22:04:14 +0800
Subject: [PATCH] Manager: Added functionality to clean up the user-mode
scanning environment after execution
fmt ksud
---
.../com/sukisu/ultra/ui/screen/Settings.kt | 33 +++++++++++++++++++
.../java/com/sukisu/ultra/ui/util/KsuCli.kt | 10 ++++++
.../src/main/res/values-zh-rCN/strings.xml | 6 ++++
manager/app/src/main/res/values/strings.xml | 6 ++++
userspace/ksud/src/uid_scanner.rs | 3 +-
5 files changed, 56 insertions(+), 2 deletions(-)
diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Settings.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Settings.kt
index 2a38c5ab..c84b8897 100644
--- a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Settings.kt
+++ b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/Settings.kt
@@ -47,6 +47,7 @@ import com.sukisu.ultra.ui.theme.CardConfig.cardAlpha
import com.sukisu.ultra.ui.theme.getCardColors
import com.sukisu.ultra.ui.theme.getCardElevation
import com.sukisu.ultra.ui.util.LocalSnackbarHost
+import com.sukisu.ultra.ui.util.cleanRuntimeEnvironment
import com.sukisu.ultra.ui.util.getBugreportFile
import com.sukisu.ultra.ui.util.setUidAutoScan
import com.sukisu.ultra.ui.util.setUidMultiUserScan
@@ -252,6 +253,38 @@ fun SettingScreen(navigator: DestinationsNavigator) {
}
)
}
+ // 清理运行环境
+ AnimatedVisibility(
+ visible = uidAutoScanEnabled,
+ enter = fadeIn() + expandVertically(),
+ exit = fadeOut() + shrinkVertically()
+ ) {
+ val confirmDialog = rememberConfirmDialog()
+ val scope = rememberCoroutineScope()
+
+ SettingItem(
+ icon = Icons.Filled.CleaningServices,
+ title = stringResource(R.string.clean_runtime_environment),
+ summary = stringResource(R.string.clean_runtime_environment_summary),
+ onClick = {
+ scope.launch {
+ val result = confirmDialog.awaitConfirm(
+ title = context.getString(R.string.clean_runtime_environment),
+ content = context.getString(R.string.clean_runtime_environment_confirm)
+ )
+ if (result == ConfirmResult.Confirmed) {
+ uidAutoScanEnabled = false
+ prefs.edit { putBoolean("uid_auto_scan", false) }
+
+ uidMultiUserScanEnabled = false
+ prefs.edit { putBoolean("uid_multi_user_scan", false) }
+
+ snackBarHost.showSnackbar(context.getString(R.string.clean_runtime_environment_success))
+ }
+ }
+ }
+ )
+ }
}
}
)
diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/util/KsuCli.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/util/KsuCli.kt
index 1c1b0709..f6acea8f 100644
--- a/manager/app/src/main/java/com/sukisu/ultra/ui/util/KsuCli.kt
+++ b/manager/app/src/main/java/com/sukisu/ultra/ui/util/KsuCli.kt
@@ -614,3 +614,13 @@ fun setUidMultiUserScan(enabled: Boolean): Boolean {
val result = ShellUtils.fastCmdResult(shell, cmd)
return result
}
+
+fun cleanRuntimeEnvironment(): Boolean {
+ val shell = getRootShell()
+ val cmd = "$targetPath stop && rm -f /data/misc/user_uid && rm -rf $targetPath && rm -rf /data/adb/ksu/bin/user_uid && rm -rf /data/adb/service.d/uid_scanner.sh"
+ return try {
+ ShellUtils.fastCmdResult(shell, cmd)
+ } catch (_: Exception) {
+ false
+ }
+}
diff --git a/manager/app/src/main/res/values-zh-rCN/strings.xml b/manager/app/src/main/res/values-zh-rCN/strings.xml
index 3c7602ef..21413349 100644
--- a/manager/app/src/main/res/values-zh-rCN/strings.xml
+++ b/manager/app/src/main/res/values-zh-rCN/strings.xml
@@ -660,4 +660,10 @@
开启后将扫描所有用户的应用,包括工作资料等
设置失败,请检查权限
设置失败: %s
+ 清理运行环境
+ 清理运行时文件并停止扫描服务
+ 您确定要清理运行环境吗?这将停止扫描服务并删除相关文件
+ 运行环境清理成功
+ 运行环境清理失败
+ 清理运行环境时出错:%s
diff --git a/manager/app/src/main/res/values/strings.xml b/manager/app/src/main/res/values/strings.xml
index 35988549..f796ada5 100644
--- a/manager/app/src/main/res/values/strings.xml
+++ b/manager/app/src/main/res/values/strings.xml
@@ -668,4 +668,10 @@ Important Note:\n
When enabled, scans applications for all users, including work profiles
Setting failed, please check permissions
Setting failed: %s
+ Clean Runtime Environment
+ Clean up runtime files and stop the scanner service
+ Are you sure you want to clean the runtime environment? This will stop the scanner service and remove related files.
+ Runtime environment cleaned successfully
+ Failed to clean runtime environment
+ Error cleaning runtime environment: %s
\ No newline at end of file
diff --git a/userspace/ksud/src/uid_scanner.rs b/userspace/ksud/src/uid_scanner.rs
index 0a5ea1b1..7083d774 100644
--- a/userspace/ksud/src/uid_scanner.rs
+++ b/userspace/ksud/src/uid_scanner.rs
@@ -1,5 +1,4 @@
-use crate::utils;
-use anyhow::{Context, Result};
+use anyhow::Result;
use log::{info, warn};
use std::{
fs,