diff --git a/manager/app/src/main/assets/ksu_susfs_2.0.0 b/manager/app/src/main/assets/ksu_susfs_2.0.0 index dbb0b6be..854b3a19 100644 Binary files a/manager/app/src/main/assets/ksu_susfs_2.0.0 and b/manager/app/src/main/assets/ksu_susfs_2.0.0 differ diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/susfs/SuSFSConfig.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/susfs/SuSFSConfig.kt index f6d62f5b..0a959705 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/susfs/SuSFSConfig.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/susfs/SuSFSConfig.kt @@ -12,7 +12,6 @@ import androidx.compose.material.icons.filled.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.platform.LocalContext @@ -42,7 +41,6 @@ import com.sukisu.ultra.ui.susfs.content.KstatConfigContent import com.sukisu.ultra.ui.susfs.content.PathSettingsContent import com.sukisu.ultra.ui.susfs.content.SusLoopPathsContent import com.sukisu.ultra.ui.susfs.content.SusMapsContent -import com.sukisu.ultra.ui.susfs.content.SusMountsContent import com.sukisu.ultra.ui.susfs.content.SusPathsContent import com.sukisu.ultra.ui.susfs.content.TryUmountContent import com.sukisu.ultra.ui.susfs.util.SuSFSManager @@ -63,7 +61,6 @@ enum class SuSFSTab(val displayNameRes: Int) { SUS_PATHS(R.string.susfs_tab_sus_paths), SUS_LOOP_PATHS(R.string.susfs_tab_sus_loop_paths), SUS_MAPS(R.string.susfs_tab_sus_maps), - SUS_MOUNTS(R.string.susfs_tab_sus_mounts), TRY_UMOUNT(R.string.susfs_tab_try_umount), KSTAT_CONFIG(R.string.susfs_tab_kstat_config), PATH_SETTINGS(R.string.susfs_tab_path_settings), @@ -112,7 +109,6 @@ fun SuSFSConfigScreen( var susPaths by remember { mutableStateOf(emptySet()) } var susLoopPaths by remember { mutableStateOf(emptySet()) } var susMaps by remember { mutableStateOf(emptySet()) } - var susMounts by remember { mutableStateOf(emptySet()) } var tryUmounts by remember { mutableStateOf(emptySet()) } var androidDataPath by remember { mutableStateOf("") } var sdcardPath by remember { mutableStateOf("") } @@ -138,7 +134,6 @@ fun SuSFSConfigScreen( var showAddLoopPathDialog by remember { mutableStateOf(false) } var showAddSusMapDialog by remember { mutableStateOf(false) } var showAddAppPathDialog by remember { mutableStateOf(false) } - var showAddMountDialog by remember { mutableStateOf(false) } var showAddUmountDialog by remember { mutableStateOf(false) } var showAddKstatStaticallyDialog by remember { mutableStateOf(false) } var showAddKstatDialog by remember { mutableStateOf(false) } @@ -147,7 +142,6 @@ fun SuSFSConfigScreen( var editingPath by remember { mutableStateOf(null) } var editingLoopPath by remember { mutableStateOf(null) } var editingSusMap by remember { mutableStateOf(null) } - var editingMount by remember { mutableStateOf(null) } var editingUmount by remember { mutableStateOf(null) } var editingKstatConfig by remember { mutableStateOf(null) } var editingKstatPath by remember { mutableStateOf(null) } @@ -156,7 +150,6 @@ fun SuSFSConfigScreen( var showResetPathsDialog by remember { mutableStateOf(false) } var showResetLoopPathsDialog by remember { mutableStateOf(false) } var showResetSusMapsDialog by remember { mutableStateOf(false) } - var showResetMountsDialog by remember { mutableStateOf(false) } var showResetUmountsDialog by remember { mutableStateOf(false) } var showResetKstatDialog by remember { mutableStateOf(false) } @@ -211,7 +204,6 @@ fun SuSFSConfigScreen( susPaths = SuSFSManager.getSusPaths(context) susLoopPaths = SuSFSManager.getSusLoopPaths(context) susMaps = SuSFSManager.getSusMaps(context) - susMounts = SuSFSManager.getSusMounts(context) tryUmounts = SuSFSManager.getTryUmounts(context) androidDataPath = SuSFSManager.getAndroidDataPath(context) sdcardPath = SuSFSManager.getSdcardPath(context) @@ -371,34 +363,6 @@ fun SuSFSConfigScreen( existingSusPaths = susPaths ) - AddPathDialog( - showDialog = showAddMountDialog, - onDismiss = { - showAddMountDialog = false - editingMount = null - }, - onConfirm = { mount -> - coroutineScope.launch { - isLoading = true - val success = if (editingMount != null) { - SuSFSManager.editSusMount(context, editingMount!!, mount) - } else { - SuSFSManager.addSusMount(context, mount) - } - if (success) { - susMounts = SuSFSManager.getSusMounts(context) - } - isLoading = false - showAddMountDialog = false - editingMount = null - } - }, - isLoading = isLoading, - titleRes = if (editingMount != null) R.string.susfs_edit_sus_mount else R.string.susfs_add_sus_mount, - labelRes = R.string.susfs_mount_path_label, - initialValue = editingMount ?: "" - ) - AddTryUmountDialog( showDialog = showAddUmountDialog, onDismiss = { @@ -581,26 +545,6 @@ fun SuSFSConfigScreen( isLoading = isLoading ) - ConfirmDialog( - showDialog = showResetMountsDialog, - onDismiss = { showResetMountsDialog = false }, - onConfirm = { - coroutineScope.launch { - isLoading = true - SuSFSManager.saveSusMounts(context, emptySet()) - susMounts = emptySet() - if (SuSFSManager.isAutoStartEnabled(context)) { - SuSFSManager.configureAutoStart(context, true) - } - isLoading = false - showResetMountsDialog = false - } - }, - titleRes = R.string.susfs_reset_mounts_title, - messageRes = R.string.susfs_reset_mounts_message, - isLoading = isLoading - ) - ConfirmDialog( showDialog = showResetUmountsDialog, onDismiss = { showResetUmountsDialog = false }, @@ -785,6 +729,20 @@ fun SuSFSConfigScreen( isLoading = false } }, + hideSusMountsForAllProcs = hideSusMountsForAllProcs, + onHideSusMountsForAllProcsChange = { hideForAll: Boolean -> + coroutineScope.launch { + isLoading = true + if (SuSFSManager.setHideSusMountsForAllProcs( + context, + hideForAll + ) + ) { + hideSusMountsForAllProcs = hideForAll + } + isLoading = false + } + }, onReset = { showConfirmReset = true }, onApply = { coroutineScope.launch { @@ -816,7 +774,6 @@ fun SuSFSConfigScreen( susPaths = SuSFSManager.getSusPaths(context) susLoopPaths = SuSFSManager.getSusLoopPaths(context) susMaps = SuSFSManager.getSusMaps(context) - susMounts = SuSFSManager.getSusMounts(context) tryUmounts = SuSFSManager.getTryUmounts(context) androidDataPath = SuSFSManager.getAndroidDataPath(context) sdcardPath = SuSFSManager.getSdcardPath(context) @@ -900,42 +857,6 @@ fun SuSFSConfigScreen( onReset = { showResetSusMapsDialog = true } ) } - SuSFSTab.SUS_MOUNTS -> { - SusMountsContent( - susMounts = susMounts, - hideSusMountsForAllProcs = hideSusMountsForAllProcs, - isLoading = isLoading, - onAddMount = { showAddMountDialog = true }, - onRemoveMount = { mount -> - coroutineScope.launch { - isLoading = true - if (SuSFSManager.removeSusMount(context, mount)) { - susMounts = SuSFSManager.getSusMounts(context) - } - isLoading = false - } - }, - onEditMount = { mount -> - editingMount = mount - showAddMountDialog = true - }, - onToggleHideSusMountsForAllProcs = { hideForAll -> - coroutineScope.launch { - isLoading = true - if (SuSFSManager.setHideSusMountsForAllProcs( - context, - hideForAll - ) - ) { - hideSusMountsForAllProcs = hideForAll - } - isLoading = false - } - }, - onReset = { showResetMountsDialog = true } - ) - } - SuSFSTab.TRY_UMOUNT -> { TryUmountContent( tryUmounts = tryUmounts, diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/susfs/component/SuSFSConfigDialogs.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/susfs/component/SuSFSConfigDialogs.kt index b934a159..77230aca 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/susfs/component/SuSFSConfigDialogs.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/susfs/component/SuSFSConfigDialogs.kt @@ -25,7 +25,6 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp -import androidx.compose.ui.unit.sp import androidx.compose.ui.graphics.ImageBitmap import androidx.compose.ui.graphics.asImageBitmap import androidx.compose.foundation.Image @@ -1431,101 +1430,3 @@ fun FeatureStatusCard( } } -@Composable -fun SusMountHidingControlCard( - hideSusMountsForAllProcs: Boolean, - isLoading: Boolean, - onToggleHiding: (Boolean) -> Unit -) { - Card( - modifier = Modifier.fillMaxWidth(), - colors = CardDefaults.defaultColors( - color = colorScheme.surface - ) - ) { - Column( - modifier = Modifier.padding(12.dp), - verticalArrangement = Arrangement.spacedBy(12.dp) - ) { - // 标题行 - Row( - verticalAlignment = Alignment.CenterVertically - ) { - Icon( - imageVector = if (hideSusMountsForAllProcs) Icons.Default.VisibilityOff else Icons.Default.Visibility, - contentDescription = null, - tint = colorScheme.primary, - modifier = Modifier.size(20.dp) - ) - Spacer(modifier = Modifier.width(8.dp)) - Text( - text = stringResource(R.string.susfs_hide_mounts_control_title), - style = MiuixTheme.textStyles.title2, - fontWeight = FontWeight.Bold, - color = colorScheme.onSurface - ) - } - - // 描述文本 - Text( - text = stringResource(R.string.susfs_hide_mounts_control_description), - style = MiuixTheme.textStyles.body1, - color = colorScheme.onSurfaceVariantSummary, - lineHeight = 16.sp - ) - - // 控制开关 - SuperSwitch( - title = stringResource(R.string.susfs_hide_mounts_for_all_procs_label), - summary = if (hideSusMountsForAllProcs) { - stringResource(R.string.susfs_hide_mounts_for_all_procs_enabled_description) - } else { - stringResource(R.string.susfs_hide_mounts_for_all_procs_disabled_description) - }, - leftAction = { - Icon( - if (hideSusMountsForAllProcs) Icons.Default.VisibilityOff else Icons.Default.Visibility, - modifier = Modifier.padding(end = 16.dp), - contentDescription = stringResource(R.string.susfs_hide_mounts_for_all_procs_label), - tint = colorScheme.onBackground - ) - }, - checked = hideSusMountsForAllProcs, - onCheckedChange = onToggleHiding, - enabled = !isLoading - ) - - // 当前设置显示 - Text( - text = stringResource( - R.string.susfs_hide_mounts_current_setting, - if (hideSusMountsForAllProcs) { - stringResource(R.string.susfs_hide_mounts_setting_all) - } else { - stringResource(R.string.susfs_hide_mounts_setting_non_ksu) - } - ), - style = MiuixTheme.textStyles.body1, - color = colorScheme.primary, - fontWeight = FontWeight.Medium - ) - - // 建议文本 - Card( - modifier = Modifier.fillMaxWidth(), - colors = CardDefaults.defaultColors( - color = colorScheme.surfaceVariant.copy(alpha = 0.2f) - ), - cornerRadius = 8.dp - ) { - Text( - text = stringResource(R.string.susfs_hide_mounts_recommendation), - style = MiuixTheme.textStyles.body2, - color = colorScheme.onSurfaceVariantSummary, - lineHeight = 18.sp, - modifier = Modifier.padding(12.dp) - ) - } - } - } -} diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/susfs/content/BasicSettingsContent.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/susfs/content/BasicSettingsContent.kt index c12c52c3..cb1f87d3 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/susfs/content/BasicSettingsContent.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/susfs/content/BasicSettingsContent.kt @@ -44,6 +44,8 @@ fun BasicSettingsContent( onEnableCleanupResidueChange: (Boolean) -> Unit, enableAvcLogSpoofing: Boolean, onEnableAvcLogSpoofingChange: (Boolean) -> Unit, + hideSusMountsForAllProcs: Boolean, + onHideSusMountsForAllProcsChange: (Boolean) -> Unit, onReset: (() -> Unit)? = null, onApply: (() -> Unit)? = null, onConfigReload: () -> Unit @@ -243,6 +245,27 @@ fun BasicSettingsContent( onCheckedChange = onEnableAvcLogSpoofingChange, enabled = !isLoading ) + + // 对所有进程隐藏SuS挂载开关 + SuperSwitch( + title = stringResource(R.string.susfs_hide_mounts_for_all_procs_label), + summary = if (hideSusMountsForAllProcs) { + stringResource(R.string.susfs_hide_mounts_for_all_procs_enabled_description) + } else { + stringResource(R.string.susfs_hide_mounts_for_all_procs_disabled_description) + }, + leftAction = { + Icon( + if (hideSusMountsForAllProcs) Icons.Default.VisibilityOff else Icons.Default.Visibility, + modifier = Modifier.padding(end = 16.dp), + contentDescription = stringResource(R.string.susfs_hide_mounts_for_all_procs_label), + tint = colorScheme.onBackground + ) + }, + checked = hideSusMountsForAllProcs, + onCheckedChange = onHideSusMountsForAllProcsChange, + enabled = !isLoading + ) } // 槽位信息按钮 diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/susfs/content/SusMountsContent.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/susfs/content/SusMountsContent.kt deleted file mode 100644 index 1d766180..00000000 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/susfs/content/SusMountsContent.kt +++ /dev/null @@ -1,70 +0,0 @@ -package com.sukisu.ultra.ui.susfs.content - -import androidx.compose.foundation.layout.* -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Storage -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.unit.dp -import com.sukisu.ultra.R -import com.sukisu.ultra.ui.susfs.component.BottomActionButtons -import com.sukisu.ultra.ui.susfs.component.EmptyStateCard -import com.sukisu.ultra.ui.susfs.component.PathItemCard -import com.sukisu.ultra.ui.susfs.component.ResetButton -import com.sukisu.ultra.ui.susfs.component.SusMountHidingControlCard - -@Composable -fun SusMountsContent( - susMounts: Set, - hideSusMountsForAllProcs: Boolean, - isLoading: Boolean, - onAddMount: () -> Unit, - onRemoveMount: (String) -> Unit, - onEditMount: ((String) -> Unit)? = null, - onToggleHideSusMountsForAllProcs: (Boolean) -> Unit, - onReset: (() -> Unit)? = null -) { - Column( - modifier = Modifier.fillMaxWidth(), - verticalArrangement = Arrangement.spacedBy(12.dp) - ) { - SusMountHidingControlCard( - hideSusMountsForAllProcs = hideSusMountsForAllProcs, - isLoading = isLoading, - onToggleHiding = onToggleHideSusMountsForAllProcs - ) - - if (susMounts.isEmpty()) { - EmptyStateCard( - message = stringResource(R.string.susfs_no_mounts_configured) - ) - } else { - susMounts.toList().forEach { mount -> - PathItemCard( - path = mount, - icon = Icons.Default.Storage, - onDelete = { onRemoveMount(mount) }, - onEdit = if (onEditMount != null) { - { onEditMount(mount) } - } else null, - isLoading = isLoading - ) - } - } - } - - BottomActionButtons( - primaryButtonText = stringResource(R.string.add), - onPrimaryClick = onAddMount, - isLoading = isLoading - ) - - if (onReset != null && susMounts.isNotEmpty()) { - ResetButton( - title = stringResource(R.string.susfs_reset_mounts_title), - onClick = onReset - ) - } -} - diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/susfs/util/SuSFSManager.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/susfs/util/SuSFSManager.kt index bf88d42d..698a1f05 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/susfs/util/SuSFSManager.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/susfs/util/SuSFSManager.kt @@ -39,7 +39,6 @@ object SuSFSManager { private const val KEY_SUS_LOOP_PATHS = "sus_loop_paths" private const val KEY_SUS_MAPS = "sus_maps" - private const val KEY_SUS_MOUNTS = "sus_mounts" private const val KEY_TRY_UMOUNTS = "try_umounts" private const val KEY_ANDROID_DATA_PATH = "android_data_path" private const val KEY_SDCARD_PATH = "sdcard_path" @@ -147,7 +146,6 @@ object SuSFSManager { val susPaths: Set, val susLoopPaths: Set, val susMaps: Set, - val susMounts: Set, val tryUmounts: Set, val androidDataPath: String, val sdcardPath: String, @@ -169,7 +167,6 @@ object SuSFSManager { susPaths.isNotEmpty() || susLoopPaths.isNotEmpty() || susMaps.isNotEmpty() || - susMounts.isNotEmpty() || tryUmounts.isNotEmpty() || kstatConfigs.isNotEmpty() || addKstatPaths.isNotEmpty() @@ -265,7 +262,6 @@ object SuSFSManager { susPaths = getSusPaths(context), susLoopPaths = getSusLoopPaths(context), susMaps = getSusMaps(context), - susMounts = getSusMounts(context), tryUmounts = getTryUmounts(context), androidDataPath = getAndroidDataPath(context), sdcardPath = getSdcardPath(context), @@ -368,12 +364,6 @@ object SuSFSManager { fun getSusMaps(context: Context): Set = getPrefs(context).getStringSet(KEY_SUS_MAPS, emptySet()) ?: emptySet() - fun saveSusMounts(context: Context, mounts: Set) = - getPrefs(context).edit { putStringSet(KEY_SUS_MOUNTS, mounts) } - - fun getSusMounts(context: Context): Set = - getPrefs(context).getStringSet(KEY_SUS_MOUNTS, emptySet()) ?: emptySet() - fun saveTryUmounts(context: Context, umounts: Set) = getPrefs(context).edit { putStringSet(KEY_TRY_UMOUNTS, umounts) } @@ -532,7 +522,6 @@ object SuSFSManager { KEY_SUS_PATHS to getSusPaths(context), KEY_SUS_LOOP_PATHS to getSusLoopPaths(context), KEY_SUS_MAPS to getSusMaps(context), - KEY_SUS_MOUNTS to getSusMounts(context), KEY_TRY_UMOUNTS to getTryUmounts(context), KEY_ANDROID_DATA_PATH to getAndroidDataPath(context), KEY_SDCARD_PATH to getSdcardPath(context), @@ -769,7 +758,6 @@ object SuSFSManager { "CONFIG_KSU_SUSFS_SPOOF_CMDLINE_OR_BOOTCONFIG" to context.getString(R.string.spoof_cmdline_feature_label), "CONFIG_KSU_SUSFS_OPEN_REDIRECT" to context.getString(R.string.open_redirect_feature_label), "CONFIG_KSU_SUSFS_ENABLE_LOG" to context.getString(R.string.enable_log_feature_label), - "CONFIG_KSU_SUSFS_AUTO_ADD_TRY_UMOUNT_FOR_BIND_MOUNT" to context.getString(R.string.auto_try_umount_bind_feature_label), "CONFIG_KSU_SUSFS_HIDE_KSU_SUSFS_SYMBOLS" to context.getString(R.string.hide_symbols_feature_label), "CONFIG_KSU_SUSFS_SUS_KSTAT" to context.getString(R.string.sus_kstat_feature_label), ) @@ -799,7 +787,6 @@ object SuSFSManager { "spoof_cmdline_feature_label" to context.getString(R.string.spoof_cmdline_feature_label), "open_redirect_feature_label" to context.getString(R.string.open_redirect_feature_label), "enable_log_feature_label" to context.getString(R.string.enable_log_feature_label), - "auto_try_umount_bind_feature_label" to context.getString(R.string.auto_try_umount_bind_feature_label), "hide_symbols_feature_label" to context.getString(R.string.hide_symbols_feature_label), "sus_kstat_feature_label" to context.getString(R.string.sus_kstat_feature_label), @@ -1075,54 +1062,6 @@ object SuSFSManager { } } - // 添加SUS挂载 - suspend fun addSusMount(context: Context, mount: String): Boolean { - val success = executeSusfsCommand(context, "add_sus_mount '$mount'") - if (success) { - saveSusMounts(context, getSusMounts(context) + mount) - if (isAutoStartEnabled(context)) updateMagiskModule(context) - } - return success - } - - suspend fun removeSusMount(context: Context, mount: String): Boolean { - saveSusMounts(context, getSusMounts(context) - mount) - if (isAutoStartEnabled(context)) updateMagiskModule(context) - showToast(context, "Removed SUS mount: $mount") - return true - } - - // 编辑SUS挂载 - suspend fun editSusMount(context: Context, oldMount: String, newMount: String): Boolean { - return try { - val currentMounts = getSusMounts(context).toMutableSet() - if (!currentMounts.remove(oldMount)) { - showToast(context, "Original mount not found: $oldMount") - return false - } - - saveSusMounts(context, currentMounts) - - val success = addSusMount(context, newMount) - - if (success) { - showToast(context, "SUS mount updated: $oldMount -> $newMount") - return true - } else { - // 如果添加新挂载点失败,恢复旧挂载点 - currentMounts.add(oldMount) - saveSusMounts(context, currentMounts) - if (isAutoStartEnabled(context)) updateMagiskModule(context) - showToast(context, "Failed to update mount, reverted to original") - return false - } - } catch (e: Exception) { - e.printStackTrace() - showToast(context, "Error updating SUS mount: ${e.message}") - false - } - } - // 添加尝试卸载 suspend fun addTryUmount(context: Context, path: String, mode: Int): Boolean { val commandSuccess = executeSusfsCommand(context, "add_try_umount '$path' $mode") diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/susfs/util/SuSFSModuleScripts.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/susfs/util/SuSFSModuleScripts.kt index 92b7eb43..79cf298f 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/susfs/util/SuSFSModuleScripts.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/susfs/util/SuSFSModuleScripts.kt @@ -427,16 +427,6 @@ object ScriptGenerator { appendLine(generateBinaryCheck(config.targetPath)) appendLine() - // 添加SUS挂载 - if (config.susMounts.isNotEmpty()) { - appendLine("# 添加SUS挂载") - config.susMounts.forEach { mount -> - appendLine($$"\"$SUSFS_BIN\" add_sus_mount '$$mount'") - appendLine($$"echo \"$(get_current_time): 添加SUS挂载: $$mount\" >> \"$LOG_FILE\"") - } - appendLine() - } - // 添加尝试卸载 if (config.tryUmounts.isNotEmpty()) { appendLine("# 添加尝试卸载") diff --git a/manager/app/src/main/jniLibs/arm64-v8a/libksu_susfs.so b/manager/app/src/main/jniLibs/arm64-v8a/libksu_susfs.so index dbb0b6be..854b3a19 100644 Binary files a/manager/app/src/main/jniLibs/arm64-v8a/libksu_susfs.so and b/manager/app/src/main/jniLibs/arm64-v8a/libksu_susfs.so differ 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 ecdb737d..65e0fcd0 100644 --- a/manager/app/src/main/res/values-zh-rCN/strings.xml +++ b/manager/app/src/main/res/values-zh-rCN/strings.xml @@ -374,20 +374,16 @@ 基本设置 SuS 路径 - SuS 挂载 尝试卸载 路径设置 启用功能状态 添加 SuS 路径 - 添加 SuS 挂载 添加尝试卸载 SuS 路径添加成功 路径未找到错误 路径 - 挂载路径 暂无 SuS 路径配置 - 暂无 SuS 挂载配置 暂无尝试卸载配置 卸载模式 @@ -402,8 +398,6 @@ 重置 SuS 路径 这将清除所有 SuS 路径配置,确定要继续吗? - 重置 SuS 挂载 - 这将清除所有 SuS 挂载配置,确定要继续吗? 重置尝试卸载 这将清除所有尝试卸载配置,确定要继续吗? 重置路径设置 @@ -423,7 +417,6 @@ 欺骗 Cmdline/Bootconfig 开放重定向支持 日志记录支持 - 自动尝试卸载绑定挂载 隐藏 KSU SuSFS 符号 SuS Kstat 支持 @@ -473,17 +466,11 @@ Kstat 路径管理 暂无 Kstat 配置,点击下方按钮添加配置 - SuS 挂载隐藏控制 - 控制 SuS 挂载对进程的隐藏行为 对所有进程隐藏 SuS 挂载 启用后,SuS 挂载将对所有进程隐藏,包括 KSU 进程 禁用后,SuS 挂载仅对非 KSU 进程隐藏,KSU 进程可以看到挂载 已启用对所有进程隐藏 SuS 挂载 已禁用对所有进程隐藏 SuS 挂载 - 建议在屏幕解锁后或在 service.sh 或 boot-completed.sh 阶段设置为禁用,这可以修复一些依赖 KSU 进程挂载的 root 应用的问题 - 当前设置: %s - 对所有进程隐藏 - 仅对非 KSU 进程隐藏 Android Data 路径已设置为: %s SDCard 路径已设置为: %s 路径设置可能未完全成功,但将继续添加 SuS 路径 @@ -512,7 +499,6 @@ 清理工具残留 清理各种模块以及工具的残留文件和目录(可能会误删导致丢失以及无法启动,谨慎使用) 编辑 SuS 路径 - 编辑 SuS 挂载 编辑尝试卸载 编辑 Kstat 静态配置 编辑 Kstat 路径 diff --git a/manager/app/src/main/res/values/strings.xml b/manager/app/src/main/res/values/strings.xml index 9063c9e6..ae5ef99d 100644 --- a/manager/app/src/main/res/values/strings.xml +++ b/manager/app/src/main/res/values/strings.xml @@ -382,20 +382,16 @@ Basic Settings SUS Paths - SUS Mounts Try Umount Path Settings Enabled Features Status Add SUS Path - Add SUS Mount Add Try Umount SUS path added successfully Path not found error Path - Mount Path No SUS paths configured - No SUS mounts configured No try umount configured Umount Mode @@ -409,8 +405,6 @@ Reset SUS Paths This will clear all SUS path configurations. Are you sure you want to continue? - Reset SUS Mounts - This will clear all SUS mount configurations. Are you sure you want to continue? Reset Try Umount This will clear all try umount configurations. Are you sure you want to continue? Reset Path Settings @@ -430,7 +424,6 @@ Spoof Cmdline/Bootconfig Open Redirect Support Logging Support - Auto Try Umount Bind Mount Hide KSU SUSFS Symbols SUS Kstat Support @@ -480,17 +473,11 @@ Kstat Path Management No Kstat configuration yet, click the button below to add - SUS Mount Hiding Control - Control the hiding behavior of SUS mounts for processes Hide SUS mounts for all processes When enabled, SUS mounts will be hidden from all processes, including KSU processes When disabled, SUS mounts will only be hidden from non-KSU processes, KSU processes can see the mounts Enabled hiding SUS mounts for all processes Disabled hiding SUS mounts for all processes - It is recommended to set to disabled after screen is unlocked, or during service.sh or boot-completed.sh stage, as this should fix the issue on some rooted apps that rely on mounts mounted by KSU process - Current setting: %s - Hide for all processes - Hide only for non-KSU processes Android Data path has been set to: %s SD card path has been set to: %s Path setup may not be fully successful, but SUS paths will continue to be added @@ -519,7 +506,6 @@ Cleanup Residue Clean up the residual files and directories of various modules and tools (May be deleted by mistake, resulting in loss and failure to start, use with caution) Edit SUS Path - Edit SUS Mount Edit Try Umount Edit Kstat Static Configuration Edit Kstat Path