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 00353b2b..bc24c184 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 @@ -47,7 +47,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), @@ -99,7 +98,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("") } @@ -125,7 +123,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) } @@ -134,7 +131,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) } @@ -143,7 +139,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) } @@ -304,7 +299,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) @@ -477,7 +471,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) @@ -649,35 +642,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, - placeholderRes = R.string.susfs_path_placeholder, - initialValue = editingMount ?: "" - ) - AddTryUmountDialog( showDialog = showAddUmountDialog, onDismiss = { @@ -865,27 +829,6 @@ fun SuSFSConfigScreen( isDestructive = true ) - 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, - isDestructive = true - ) - ConfirmDialog( showDialog = showResetUmountsDialog, onDismiss = { showResetUmountsDialog = false }, @@ -1106,28 +1049,6 @@ fun SuSFSConfigScreen( } } - SuSFSTab.SUS_MOUNTS -> { - OutlinedButton( - onClick = { showResetMountsDialog = true }, - enabled = !isLoading && susMounts.isNotEmpty(), - shape = RoundedCornerShape(8.dp), - modifier = Modifier - .fillMaxWidth() - .height(40.dp) - ) { - Icon( - imageVector = Icons.Default.RestoreFromTrash, - contentDescription = null, - modifier = Modifier.size(16.dp) - ) - Spacer(modifier = Modifier.width(6.dp)) - Text( - stringResource(R.string.susfs_reset_mounts_title), - fontWeight = FontWeight.Medium - ) - } - } - SuSFSTab.TRY_UMOUNT -> { OutlinedButton( onClick = { showResetUmountsDialog = true }, @@ -1325,6 +1246,20 @@ fun SuSFSConfigScreen( } isLoading = false } + }, + hideSusMountsForAllProcs = hideSusMountsForAllProcs, + onHideSusMountsForAllProcsChange = { hideForAll -> + coroutineScope.launch { + isLoading = true + if (SuSFSManager.setHideSusMountsForAllProcs( + context, + hideForAll + ) + ) { + hideSusMountsForAllProcs = hideForAll + } + isLoading = false + } } ) } @@ -1390,43 +1325,6 @@ fun SuSFSConfigScreen( } ) } - SuSFSTab.SUS_MOUNTS -> { - val isSusVersion158 = remember { isSusVersion158() } - - SusMountsContent( - susMounts = susMounts, - hideSusMountsForAllProcs = hideSusMountsForAllProcs, - isSusVersion158 = isSusVersion158, - 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 - } - } - ) - } SuSFSTab.TRY_UMOUNT -> { TryUmountContent( @@ -1570,7 +1468,9 @@ private fun BasicSettingsContent( enableCleanupResidue: Boolean, onEnableCleanupResidueChange: (Boolean) -> Unit, enableAvcLogSpoofing: Boolean, - onEnableAvcLogSpoofingChange: (Boolean) -> Unit + onEnableAvcLogSpoofingChange: (Boolean) -> Unit, + hideSusMountsForAllProcs: Boolean, + onHideSusMountsForAllProcsChange: (Boolean) -> Unit ) { var scriptLocationExpanded by remember { mutableStateOf(false) } val isAbDevice = produceState(initialValue = false) { @@ -1946,6 +1846,16 @@ private fun BasicSettingsContent( } } + // 对所有进程隐藏sus挂载开关(仅在1.5.8+版本显示) + val isSusVersion158 = isSusVersion158() + if (isSusVersion158) { + SusMountHidingControlCard( + hideSusMountsForAllProcs = hideSusMountsForAllProcs, + isLoading = isLoading, + onToggleHiding = onHideSusMountsForAllProcsChange + ) + } + // 槽位信息按钮 if (isAbDevice) { Card( diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/susfs/component/SuSFSConfigTabs.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/susfs/component/SuSFSConfigTabs.kt index be683f23..16a52b09 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/susfs/component/SuSFSConfigTabs.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/susfs/component/SuSFSConfigTabs.kt @@ -420,82 +420,6 @@ fun SusMapsContent( } } -/** - * SUS挂载内容组件 - */ -@Composable -fun SusMountsContent( - susMounts: Set, - hideSusMountsForAllProcs: Boolean, - isSusVersion158: Boolean, - isLoading: Boolean, - onAddMount: () -> Unit, - onRemoveMount: (String) -> Unit, - onEditMount: ((String) -> Unit)? = null, - onToggleHideSusMountsForAllProcs: (Boolean) -> Unit -) { - Box(modifier = Modifier.fillMaxSize()) { - LazyColumn( - modifier = Modifier.fillMaxSize(), - verticalArrangement = Arrangement.spacedBy(12.dp) - ) { - if (isSusVersion158) { - item { - SusMountHidingControlCard( - hideSusMountsForAllProcs = hideSusMountsForAllProcs, - isLoading = isLoading, - onToggleHiding = onToggleHideSusMountsForAllProcs - ) - } - } - - if (susMounts.isEmpty()) { - item { - EmptyStateCard( - message = stringResource(R.string.susfs_no_mounts_configured) - ) - } - } else { - items(susMounts.toList()) { mount -> - PathItemCard( - path = mount, - icon = Icons.Default.Storage, - onDelete = { onRemoveMount(mount) }, - onEdit = if (onEditMount != null) { { onEditMount(mount) } } else null, - isLoading = isLoading - ) - } - } - - item { - Row( - modifier = Modifier - .fillMaxWidth() - .padding(vertical = 16.dp), - horizontalArrangement = Arrangement.spacedBy(8.dp), - verticalAlignment = Alignment.CenterVertically - ) { - Button( - onClick = onAddMount, - modifier = Modifier - .weight(1f) - .height(48.dp), - shape = RoundedCornerShape(8.dp) - ) { - Icon( - imageVector = Icons.Default.Add, - contentDescription = null, - modifier = Modifier.size(24.dp) - ) - Spacer(modifier = Modifier.width(8.dp)) - Text(text = stringResource(R.string.add)) - } - } - } - } - } -} - /** * 尝试卸载内容组件 */ 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 e199568b..d7c2c880 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 @@ -44,7 +44,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" @@ -157,7 +156,6 @@ object SuSFSManager { val susPaths: Set, val susLoopPaths: Set, val susMaps: Set, - val susMounts: Set, val tryUmounts: Set, val androidDataPath: String, val sdcardPath: String, @@ -180,7 +178,6 @@ object SuSFSManager { susPaths.isNotEmpty() || susLoopPaths.isNotEmpty() || susMaps.isNotEmpty() || - susMounts.isNotEmpty() || tryUmounts.isNotEmpty() || kstatConfigs.isNotEmpty() || addKstatPaths.isNotEmpty() @@ -271,7 +268,6 @@ object SuSFSManager { susPaths = getSusPaths(context), susLoopPaths = getSusLoopPaths(context), susMaps = getSusMaps(context), - susMounts = getSusMounts(context), tryUmounts = getTryUmounts(context), androidDataPath = getAndroidDataPath(context), sdcardPath = getSdcardPath(context), @@ -381,12 +377,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) } @@ -547,7 +537,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), @@ -860,13 +849,11 @@ object SuSFSManager { val featureMap = mapOf( "CONFIG_KSU_SUSFS_SUS_PATH" to context.getString(R.string.sus_path_feature_label), - "CONFIG_KSU_SUSFS_SUS_MOUNT" to context.getString(R.string.sus_mount_feature_label), "CONFIG_KSU_SUSFS_TRY_UMOUNT" to context.getString(R.string.try_umount_feature_label), "CONFIG_KSU_SUSFS_SPOOF_UNAME" to context.getString(R.string.spoof_uname_feature_label), "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), ) @@ -890,13 +877,11 @@ object SuSFSManager { private fun getDefaultDisabledFeatures(context: Context): List { val defaultFeatures = listOf( "sus_path_feature_label" to context.getString(R.string.sus_path_feature_label), - "sus_mount_feature_label" to context.getString(R.string.sus_mount_feature_label), "try_umount_feature_label" to context.getString(R.string.try_umount_feature_label), "spoof_uname_feature_label" to context.getString(R.string.spoof_uname_feature_label), "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), ) @@ -1182,54 +1167,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 e0d9baef..68427897 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 @@ -26,13 +26,13 @@ object ScriptGenerator { } // 日志相关的通用脚本片段 - private fun generateLogSetup(logFileName: String): String = """ + private fun generateLogSetup(logFileName: String): String = $$""" # 日志目录 - LOG_DIR="$LOG_DIR" - LOG_FILE="${'$'}LOG_DIR/$logFileName" + LOG_DIR="$$LOG_DIR" + LOG_FILE="$LOG_DIR/$$logFileName" # 创建日志目录 - mkdir -p "${'$'}LOG_DIR" + mkdir -p "$LOG_DIR" # 获取当前时间 get_current_time() { @@ -41,11 +41,11 @@ object ScriptGenerator { """.trimIndent() // 二进制文件检查的通用脚本片段 - private fun generateBinaryCheck(targetPath: String): String = """ + private fun generateBinaryCheck(targetPath: String): String = $$""" # 检查SuSFS二进制文件 - SUSFS_BIN="$targetPath" - if [ ! -f "${'$'}SUSFS_BIN" ]; then - echo "$(get_current_time): SuSFS二进制文件未找到: ${'$'}SUSFS_BIN" >> "${'$'}LOG_FILE" + SUSFS_BIN="$$targetPath" + if [ ! -f "$SUSFS_BIN" ]; then + echo "$(get_current_time): SuSFS二进制文件未找到: $SUSFS_BIN" >> "$LOG_FILE" exit 1 fi """.trimIndent() @@ -94,7 +94,7 @@ object ScriptGenerator { generateCleanupResidueSection() } - appendLine("echo \"$(get_current_time): Service脚本执行完成\" >> \"${'$'}LOG_FILE\"") + appendLine($$"echo \"$(get_current_time): Service脚本执行完成\" >> \"$LOG_FILE\"") } } @@ -112,16 +112,16 @@ object ScriptGenerator { private fun StringBuilder.generateLogSettingSection(enableLog: Boolean) { appendLine("# 设置日志启用状态") val logValue = if (enableLog) 1 else 0 - appendLine("\"${'$'}SUSFS_BIN\" enable_log $logValue") - appendLine("echo \"$(get_current_time): 日志功能设置为: ${if (enableLog) "启用" else "禁用"}\" >> \"${'$'}LOG_FILE\"") + appendLine($$"\"$SUSFS_BIN\" enable_log $$logValue") + appendLine($$"echo \"$(get_current_time): 日志功能设置为: $${if (enableLog) "启用" else "禁用"}\" >> \"$LOG_FILE\"") appendLine() } private fun StringBuilder.generateAvcLogSpoofingSection(enableAvcLogSpoofing: Boolean) { appendLine("# 设置AVC日志欺骗状态") val avcLogValue = if (enableAvcLogSpoofing) 1 else 0 - appendLine("\"${'$'}SUSFS_BIN\" enable_avc_log_spoofing $avcLogValue") - appendLine("echo \"$(get_current_time): AVC日志欺骗功能设置为: ${if (enableAvcLogSpoofing) "启用" else "禁用"}\" >> \"${'$'}LOG_FILE\"") + appendLine($$"\"$SUSFS_BIN\" enable_avc_log_spoofing $$avcLogValue") + appendLine($$"echo \"$(get_current_time): AVC日志欺骗功能设置为: $${if (enableAvcLogSpoofing) "启用" else "禁用"}\" >> \"$LOG_FILE\"") appendLine() } @@ -129,8 +129,8 @@ object ScriptGenerator { if (susPaths.isNotEmpty()) { appendLine("# 添加SUS路径") susPaths.forEach { path -> - appendLine("\"${'$'}SUSFS_BIN\" add_sus_path '$path'") - appendLine("echo \"$(get_current_time): 添加SUS路径: $path\" >> \"${'$'}LOG_FILE\"") + appendLine($$"\"$SUSFS_BIN\" add_sus_path '$$path'") + appendLine($$"echo \"$(get_current_time): 添加SUS路径: $$path\" >> \"$LOG_FILE\"") } appendLine() } @@ -140,8 +140,8 @@ object ScriptGenerator { if (susLoopPaths.isNotEmpty()) { appendLine("# 添加SUS循环路径") susLoopPaths.forEach { path -> - appendLine("\"${'$'}SUSFS_BIN\" add_sus_path_loop '$path'") - appendLine("echo \"$(get_current_time): 添加SUS循环路径: $path\" >> \"${'$'}LOG_FILE\"") + appendLine($$"\"$SUSFS_BIN\" add_sus_path_loop '$$path'") + appendLine($$"echo \"$(get_current_time): 添加SUS循环路径: $$path\" >> \"$LOG_FILE\"") } appendLine() } @@ -156,8 +156,8 @@ object ScriptGenerator { if (addKstatPaths.isNotEmpty()) { appendLine("# 添加Kstat路径") addKstatPaths.forEach { path -> - appendLine("\"${'$'}SUSFS_BIN\" add_sus_kstat '$path'") - appendLine("echo \"$(get_current_time): 添加Kstat路径: $path\" >> \"${'$'}LOG_FILE\"") + appendLine($$"\"$SUSFS_BIN\" add_sus_kstat '$$path'") + appendLine($$"echo \"$(get_current_time): 添加Kstat路径: $$path\" >> \"$LOG_FILE\"") } appendLine() } @@ -171,11 +171,11 @@ object ScriptGenerator { val path = parts[0] val params = parts.drop(1).joinToString("' '", "'", "'") appendLine() - appendLine("\"${'$'}SUSFS_BIN\" add_sus_kstat_statically '$path' $params") - appendLine("echo \"$(get_current_time): 添加Kstat静态配置: $path\" >> \"${'$'}LOG_FILE\"") + appendLine($$"\"$SUSFS_BIN\" add_sus_kstat_statically '$$path' $$params") + appendLine($$"echo \"$(get_current_time): 添加Kstat静态配置: $$path\" >> \"$LOG_FILE\"") appendLine() - appendLine("\"${'$'}SUSFS_BIN\" update_sus_kstat '$path'") - appendLine("echo \"$(get_current_time): 更新Kstat配置: $path\" >> \"${'$'}LOG_FILE\"") + appendLine($$"\"$SUSFS_BIN\" update_sus_kstat '$$path'") + appendLine($$"echo \"$(get_current_time): 更新Kstat配置: $$path\" >> \"$LOG_FILE\"") } } appendLine() @@ -185,8 +185,8 @@ object ScriptGenerator { private fun StringBuilder.generateUnameSection(config: SuSFSManager.ModuleConfig) { if (!config.executeInPostFsData && (config.unameValue != DEFAULT_UNAME || config.buildTimeValue != DEFAULT_BUILD_TIME)) { appendLine("# 设置uname和构建时间") - appendLine("\"${'$'}SUSFS_BIN\" set_uname '${config.unameValue}' '${config.buildTimeValue}'") - appendLine("echo \"$(get_current_time): 设置uname为: ${config.unameValue}, 构建时间为: ${config.buildTimeValue}\" >> \"${'$'}LOG_FILE\"") + appendLine($$"\"$SUSFS_BIN\" set_uname '$${config.unameValue}' '$${config.buildTimeValue}'") + appendLine($$"echo \"$(get_current_time): 设置uname为: $${config.unameValue}, 构建时间为: $${config.buildTimeValue}\" >> \"$LOG_FILE\"") appendLine() } } @@ -194,44 +194,44 @@ object ScriptGenerator { private fun StringBuilder.generateHideBlSection() { appendLine("# 隐藏BL 来自 Shamiko 脚本") appendLine( - """ + $$""" RESETPROP_BIN="/data/adb/ksu/bin/resetprop" check_reset_prop() { local NAME=$1 local EXPECTED=$2 - local VALUE=$("${'$'}RESETPROP_BIN" ${'$'}NAME) - [ -z ${'$'}VALUE ] || [ ${'$'}VALUE = ${'$'}EXPECTED ] || "${'$'}RESETPROP_BIN" ${'$'}NAME ${'$'}EXPECTED + local VALUE=$("$RESETPROP_BIN" $NAME) + [ -z $VALUE ] || [ $VALUE = $EXPECTED ] || "$RESETPROP_BIN" $NAME $EXPECTED } check_missing_prop() { local NAME=$1 local EXPECTED=$2 - local VALUE=$("${'$'}RESETPROP_BIN" ${'$'}NAME) - [ -z ${'$'}VALUE ] && "${'$'}RESETPROP_BIN" ${'$'}NAME ${'$'}EXPECTED + local VALUE=$("$RESETPROP_BIN" $NAME) + [ -z $VALUE ] && "$RESETPROP_BIN" $NAME $EXPECTED } check_missing_match_prop() { local NAME=$1 local EXPECTED=$2 - local VALUE=$("${'$'}RESETPROP_BIN" ${'$'}NAME) - [ -z ${'$'}VALUE ] || [ ${'$'}VALUE = ${'$'}EXPECTED ] || "${'$'}RESETPROP_BIN" ${'$'}NAME ${'$'}EXPECTED - [ -z ${'$'}VALUE ] && "${'$'}RESETPROP_BIN" ${'$'}NAME ${'$'}EXPECTED + local VALUE=$("$RESETPROP_BIN" $NAME) + [ -z $VALUE ] || [ $VALUE = $EXPECTED ] || "$RESETPROP_BIN" $NAME $EXPECTED + [ -z $VALUE ] && "$RESETPROP_BIN" $NAME $EXPECTED } contains_reset_prop() { local NAME=$1 local CONTAINS=$2 local NEWVAL=$3 - case "$("${'$'}RESETPROP_BIN" ${'$'}NAME)" in - *"${'$'}CONTAINS"*) "${'$'}RESETPROP_BIN" ${'$'}NAME ${'$'}NEWVAL ;; + case "$("$RESETPROP_BIN" $NAME)" in + *"$CONTAINS"*) "$RESETPROP_BIN" $NAME $NEWVAL ;; esac } """.trimIndent()) appendLine() appendLine("sleep 30") appendLine() - appendLine("\"${'$'}RESETPROP_BIN\" -w sys.boot_completed 0") + appendLine($$"\"$RESETPROP_BIN\" -w sys.boot_completed 0") // 添加所有系统属性重置 val systemProps = listOf( @@ -292,27 +292,28 @@ object ScriptGenerator { // 清理残留脚本生成 private fun StringBuilder.generateCleanupResidueSection() { appendLine("# 清理工具残留文件") - appendLine("echo \"$(get_current_time): 开始清理工具残留\" >> \"${'$'}LOG_FILE\"") + appendLine($$"echo \"$(get_current_time): 开始清理工具残留\" >> \"$LOG_FILE\"") appendLine() // 定义清理函数 - appendLine(""" + appendLine( + $$""" cleanup_path() { local path="$1" local desc="$2" local current="$3" local total="$4" - if [ -n "${'$'}desc" ]; then - echo "$(get_current_time): [${'$'}current/${'$'}total] 清理: ${'$'}path (${'$'}desc)" >> "${'$'}LOG_FILE" + if [ -n "$desc" ]; then + echo "$(get_current_time): [$current/$total] 清理: $path ($desc)" >> "$LOG_FILE" else - echo "$(get_current_time): [${'$'}current/${'$'}total] 清理: ${'$'}path" >> "${'$'}LOG_FILE" + echo "$(get_current_time): [$current/$total] 清理: $path" >> "$LOG_FILE" fi - if rm -rf "${'$'}path" 2>/dev/null; then - echo "$(get_current_time): ✓ 成功清理: ${'$'}path" >> "${'$'}LOG_FILE" + if rm -rf "$path" 2>/dev/null; then + echo "$(get_current_time): ✓ 成功清理: $path" >> "$LOG_FILE" else - echo "$(get_current_time): ✗ 清理失败或不存在: ${'$'}path" >> "${'$'}LOG_FILE" + echo "$(get_current_time): ✗ 清理失败或不存在: $path" >> "$LOG_FILE" fi } """.trimIndent()) @@ -360,11 +361,11 @@ object ScriptGenerator { cleanupPaths.forEachIndexed { index, (path, desc) -> val current = index + 1 - appendLine("cleanup_path '$path' '$desc' $current \$TOTAL") + appendLine($$"cleanup_path '$$path' '$$desc' $$current $TOTAL") } appendLine() - appendLine("echo \"$(get_current_time): 工具残留清理完成\" >> \"${'$'}LOG_FILE\"") + appendLine($$"echo \"$(get_current_time): 工具残留清理完成\" >> \"$LOG_FILE\"") appendLine() } @@ -381,14 +382,14 @@ object ScriptGenerator { appendLine() appendLine(generateBinaryCheck(config.targetPath)) appendLine() - appendLine("echo \"$(get_current_time): Post-FS-Data脚本开始执行\" >> \"${'$'}LOG_FILE\"") + appendLine($$"echo \"$(get_current_time): Post-FS-Data脚本开始执行\" >> \"$LOG_FILE\"") appendLine() // 设置uname和构建时间 - 只有在选择在post-fs-data中执行时才执行 if (config.executeInPostFsData && (config.unameValue != DEFAULT_UNAME || config.buildTimeValue != DEFAULT_BUILD_TIME)) { appendLine("# 设置uname和构建时间") - appendLine("\"${'$'}SUSFS_BIN\" set_uname '${config.unameValue}' '${config.buildTimeValue}'") - appendLine("echo \"$(get_current_time): 设置uname为: ${config.unameValue}, 构建时间为: ${config.buildTimeValue}\" >> \"${'$'}LOG_FILE\"") + appendLine($$"\"$SUSFS_BIN\" set_uname '$${config.unameValue}' '$${config.buildTimeValue}'") + appendLine($$"echo \"$(get_current_time): 设置uname为: $${config.unameValue}, 构建时间为: $${config.buildTimeValue}\" >> \"$LOG_FILE\"") appendLine() } @@ -397,7 +398,7 @@ object ScriptGenerator { // 添加AVC日志欺骗设置 generateAvcLogSpoofingSection(config.enableAvcLogSpoofing) - appendLine("echo \"$(get_current_time): Post-FS-Data脚本执行完成\" >> \"${'$'}LOG_FILE\"") + appendLine($$"echo \"$(get_current_time): Post-FS-Data脚本执行完成\" >> \"$LOG_FILE\"") } } @@ -406,8 +407,8 @@ object ScriptGenerator { if (support158) { appendLine("# 设置Zygote隔离服务卸载状态") val umountValue = if (umountForZygoteIsoService) 1 else 0 - appendLine("\"${'$'}SUSFS_BIN\" umount_for_zygote_iso_service $umountValue") - appendLine("echo \"$(get_current_time): Zygote隔离服务卸载设置为: ${if (umountForZygoteIsoService) "启用" else "禁用"}\" >> \"${'$'}LOG_FILE\"") + appendLine($$"\"$SUSFS_BIN\" umount_for_zygote_iso_service $$umountValue") + appendLine($$"echo \"$(get_current_time): Zygote隔离服务卸载设置为: $${if (umountForZygoteIsoService) "启用" else "禁用"}\" >> \"$LOG_FILE\"") appendLine() } } @@ -423,21 +424,11 @@ object ScriptGenerator { appendLine() appendLine(generateLogSetup("susfs_post_mount.log")) appendLine() - appendLine("echo \"$(get_current_time): Post-Mount脚本开始执行\" >> \"${'$'}LOG_FILE\"") + appendLine($$"echo \"$(get_current_time): Post-Mount脚本开始执行\" >> \"$LOG_FILE\"") appendLine() 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("# 添加尝试卸载") @@ -446,14 +437,14 @@ object ScriptGenerator { if (parts.size == 2) { val path = parts[0] val mode = parts[1] - appendLine("\"${'$'}SUSFS_BIN\" add_try_umount '$path' $mode") - appendLine("echo \"$(get_current_time): 添加尝试卸载: $path (模式: $mode)\" >> \"${'$'}LOG_FILE\"") + appendLine($$"\"$SUSFS_BIN\" add_try_umount '$$path' $$mode") + appendLine($$"echo \"$(get_current_time): 添加尝试卸载: $$path (模式: $$mode)\" >> \"$LOG_FILE\"") } } appendLine() } - appendLine("echo \"$(get_current_time): Post-Mount脚本执行完成\" >> \"${'$'}LOG_FILE\"") + appendLine($$"echo \"$(get_current_time): Post-Mount脚本执行完成\" >> \"$LOG_FILE\"") } } @@ -469,7 +460,7 @@ object ScriptGenerator { appendLine() appendLine(generateLogSetup("susfs_boot_completed.log")) appendLine() - appendLine("echo \"$(get_current_time): Boot-Completed脚本开始执行\" >> \"${'$'}LOG_FILE\"") + appendLine($$"echo \"$(get_current_time): Boot-Completed脚本开始执行\" >> \"$LOG_FILE\"") appendLine() appendLine(generateBinaryCheck(config.targetPath)) appendLine() @@ -479,8 +470,8 @@ object ScriptGenerator { // SUS挂载隐藏控制 val hideValue = if (config.hideSusMountsForAllProcs) 1 else 0 appendLine("# 设置SUS挂载隐藏控制") - appendLine("\"${'$'}SUSFS_BIN\" hide_sus_mnts_for_all_procs $hideValue") - appendLine("echo \"$(get_current_time): SUS挂载隐藏控制设置为: ${if (config.hideSusMountsForAllProcs) "对所有进程隐藏" else "仅对非KSU进程隐藏"}\" >> \"${'$'}LOG_FILE\"") + appendLine($$"\"$SUSFS_BIN\" hide_sus_mnts_for_all_procs $$hideValue") + appendLine($$"echo \"$(get_current_time): SUS挂载隐藏控制设置为: $${if (config.hideSusMountsForAllProcs) "对所有进程隐藏" else "仅对非KSU进程隐藏"}\" >> \"$LOG_FILE\"") appendLine() // 路径设置和SUS路径设置 @@ -504,7 +495,7 @@ object ScriptGenerator { } } - appendLine("echo \"$(get_current_time): Boot-Completed脚本执行完成\" >> \"${'$'}LOG_FILE\"") + appendLine($$"echo \"$(get_current_time): Boot-Completed脚本执行完成\" >> \"$LOG_FILE\"") } } @@ -512,8 +503,8 @@ object ScriptGenerator { if (susMaps.isNotEmpty()) { appendLine("# 添加SUS映射") susMaps.forEach { map -> - appendLine("\"${'$'}SUSFS_BIN\" add_sus_map '$map'") - appendLine("echo \"$(get_current_time): 添加SUS映射: $map\" >> \"${'$'}LOG_FILE\"") + appendLine($$"\"$SUSFS_BIN\" add_sus_map '$$map'") + appendLine($$"echo \"$(get_current_time): 添加SUS映射: $$map\" >> \"$LOG_FILE\"") } appendLine() } @@ -526,12 +517,12 @@ object ScriptGenerator { appendLine("until [ -d \"/sdcard/Android\" ]; do sleep 1; done") appendLine("sleep 60") appendLine() - appendLine("\"${'$'}SUSFS_BIN\" set_android_data_root_path '$androidDataPath'") - appendLine("echo \"$(get_current_time): Android Data路径设置为: $androidDataPath\" >> \"${'$'}LOG_FILE\"") + appendLine($$"\"$SUSFS_BIN\" set_android_data_root_path '$$androidDataPath'") + appendLine($$"echo \"$(get_current_time): Android Data路径设置为: $$androidDataPath\" >> \"$LOG_FILE\"") appendLine() appendLine("# 设置SD卡路径") - appendLine("\"${'$'}SUSFS_BIN\" set_sdcard_root_path '$sdcardPath'") - appendLine("echo \"$(get_current_time): SD卡路径设置为: $sdcardPath\" >> \"${'$'}LOG_FILE\"") + appendLine($$"\"$SUSFS_BIN\" set_sdcard_root_path '$$sdcardPath'") + appendLine($$"echo \"$(get_current_time): SD卡路径设置为: $$sdcardPath\" >> \"$LOG_FILE\"") 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-idn/strings.xml b/manager/app/src/main/res/values-idn/strings.xml index 3dbe03ec..ebc4323b 100644 --- a/manager/app/src/main/res/values-idn/strings.xml +++ b/manager/app/src/main/res/values-idn/strings.xml @@ -382,21 +382,17 @@ Tanamkan: Secara permanen memasang ke sistem Pengaturan Dasar Jalur SUS - Kaitan SUS Coba Lepas Kait Pengaturan Jalur Status Fitur Diaktifkan Tambah Jalur SUS - Tambah Kaitan SUS Tambah Coba Lepas Kait Jalur SUS berhasil ditambahkan Kesalahan: Jalur tidak ditemukan Jalur - Jalur Kaitan misalnya: /system/addon.d Tidak ada jalur SUS yang dikonfigurasi - Tidak ada kaitan SUS yang dikonfigurasi Tidak ada coba lepas kait yang dikonfigurasi Mode Lepas Kait @@ -411,8 +407,6 @@ Tanamkan: Secara permanen memasang ke sistem Atur Ulang Jalur SUS Ini akan menghapus semua konfigurasi jalur SUS. Apakah Anda yakin ingin melanjutkan? - Atur Ulang Kaitan SUS - Ini akan menghapus semua konfigurasi kaitan SUS. Apakah Anda yakin ingin melanjutkan? Atur Ulang Coba Lepas Kait Ini akan menghapus semua konfigurasi coba lepas kait. Apakah Anda yakin ingin melanjutkan? Atur Ulang Pengaturan Jalur @@ -428,18 +422,13 @@ Tanamkan: Secara permanen memasang ke sistem Dinonaktifkan Dukungan Jalur SUS - Dukungan Kaitan SUS Dukungan Coba Lepas Kait Dukungan Spoof Uname Spoof Cmdline/Bootconfig Dukungan Open Redirect Dukungan Logging - Kaitan Bawaan Otomatis - Kaitan Bind Otomatis - Coba Lepas Kaitan Bind Otomatis Sembunyikan Simbol KSU SUSFS Dukungan SUS Kstat - Fitur Toggle Mode SUS SU Fitur SuSFS yang Dapat Dikonfigurasi Aktifkan Log SuSFS diff --git a/manager/app/src/main/res/values-in/strings.xml b/manager/app/src/main/res/values-in/strings.xml index 64027ac4..1c267f10 100644 --- a/manager/app/src/main/res/values-in/strings.xml +++ b/manager/app/src/main/res/values-in/strings.xml @@ -389,21 +389,17 @@ Pengaturan Dasar Jalur SUS - Pemasangan SUS Coba Umount Pengaturan Path Status Fitur yang Diaktifkan Tambahkan Jalur SUS - Tambahkan Pemasangan SUS Tambahkan Coba Umount Jalur SUS berhasil ditambahkan Kesalahan jalur tidak ditemukan Jalur - Jalur Pemasangan contoh: /system/addon.d Tidak ada jalur SUS yang dikonfigurasi - Tidak ada pemasangan SUS yang dikonfigurasi Tidak ada coba umount yang dikonfigurasi Mode Umount @@ -418,8 +414,6 @@ Setel Ulang Jalur SUS Ini akan menghapus semua konfigurasi jalur SUS. Apakah Anda yakin ingin melanjutkan? - Setel Ulang Pemasangan SUS - Ini akan menghapus semua konfigurasi mount SUS. Apakah Anda yakin ingin melanjutkan? Setel Ulang Coba Umount Ini akan menghapus semua konfigurasi umount. Apakah Anda yakin ingin melanjutkan? Setel Ulang Pengaturan Jalur @@ -435,18 +429,13 @@ Dinonaktifkan Dukungan Jalur SUS - Dukungan Pemasangan SUS Dukungan Coba Umount Dukungan Spoof uname Spoof Cmdline/Bootconfig Dukungan Pengalihan Terbuka Dukungan Logging - Pemasangan Default Otomatis - Pemasangan Bind Otomatis - Coba Umount Bind Mount Otomatis Sembunyikan Simbol KSU SUSFS Dukungan SUS Kstat - Fungsi pengalihan mode SUS SU Fitur SuSFS yang Dapat Dikonfigurasi Aktifkan Log SuSFS @@ -542,7 +531,6 @@ Bersihkan Residu Bersihkan file dan direktori sisa dari berbagai modul dan alat (mungkin terhapus secara tidak sengaja, mengakibatkan kehilangan dan gagal memulai, gunakan dengan hati-hati) Edit Jalur SUS - Edit Pemasangan SUS Edit Coba Umount Edit Konfigurasi Statis Kstat Edit Jalur Kstat diff --git a/manager/app/src/main/res/values-ja/strings.xml b/manager/app/src/main/res/values-ja/strings.xml index fdbfa061..f0258a74 100644 --- a/manager/app/src/main/res/values-ja/strings.xml +++ b/manager/app/src/main/res/values-ja/strings.xml @@ -380,21 +380,17 @@ 基本設定 SUS のパス - SUS マウント アンマウントを試す パスの設定 有効な機能のステータス SUS パスを追加 - SUS マウントを追加 アンマウントを試すを追加 SUS パスが正常に追加されました パスが見つかりません パス - マウントのパス 例: /system/addon.d SUS パスが未構成です - SUS マウントが未構成です アンマウントを試すが未構成です アンマウントモード @@ -409,8 +405,6 @@ SUS パスをリセット すべての SUS パスの構成が消去されます。続行してもよろしいですか? - SUS マウントをリセット - すべての SUS マウントの構成が消去されます。続行してもよろしいですか? リセットしてアンマウントを試す すべてのアンマウント構成がリセットされます。続行してもよろしいですか? パスの設定をリセット @@ -426,18 +420,13 @@ 無効 SUS パスの対応 - SUS マウントの対応 アンマウントを試すの対応 uname 偽装の対応 Cmdline/Bootconfig を偽装 オープンリダイレクトの対応 ログの対応 - 自動でデフォルトのマウント - 自動でバインドマウント - 自動でバインドマウントのアンマウントを試す KSU SUSFS シンボルを非表示 SUS Kstat の対応 - SUS SU モード切り替え機能 構成可能な SuSFS の機能 SuSFS のログ取得を有効化 @@ -533,7 +522,6 @@ 残骸をクリーンアップ 様々なモジュールや残骸となったツールのファイルとディレクトリをクリーンアップします (誤って削除すると損失や起動の失敗に繋がる可能性があるため、注意して使用してください) SUS のパスを編集 - SUS マウントを編集 アンマウントを試すを編集 Kstat 静的構成を編集 Kstat のパスを編集 diff --git a/manager/app/src/main/res/values-ru/strings.xml b/manager/app/src/main/res/values-ru/strings.xml index 1c6aedec..1e49d082 100644 --- a/manager/app/src/main/res/values-ru/strings.xml +++ b/manager/app/src/main/res/values-ru/strings.xml @@ -390,21 +390,17 @@ Базовые настройки SUS пути - SUS монтирование Попробовать размонтировать Настройки пути Статус включённых функций Добавить SUS путь - Добавить SUS монтирование Добавить попробовать размонтировать Путь SUS успешно добавлен Ошибка пути Путь - Путь монтирования например: /system/addon.d SUS пути не настроены - SUS монтирование не настроено Попытка размонтировать не настроена Режим размонтирования @@ -419,8 +415,6 @@ Сбросить SUS пути Это очистит все конфигурации пути SUS. Вы уверены, что хотите продолжить? - Сброс SUS монтирования - Это очистит все конфигурации SUS монтирования. Вы уверены, что хотите продолжить? Сбросить Umount Это очистит все конфигурации размонтирования. Вы уверены, что хотите продолжить? Сбросить настройки пути @@ -436,18 +430,13 @@ Выключено Поддержка SUS пути - Поддержка SUS монтирования Поддержка размонтирования Поддержка подмены uname Подмена Cmdline/Bootconfig Поддержка Open Redirect Поддержка логов - Автомонтирование по умолчанию - Автоматическое бинд монтирование - Автоматически попробовать размонтировать привязать монтировать Скрытие KSU SUSFS Symbols Поддержка SUS Kstat - Функция переключения режима SUS SU Настраиваемые функции SuSFS SuSFS включить лог @@ -543,7 +532,6 @@ Очистка Очистка остаточных файлов и каталогов различных модулей и инструментов (может быть удален по ошибке, в результате потери и неспособности начаться, используйте с осторожностью) Редактировать путь SUS - Редактировать точку монтирования SUS Изменить попробовать размонтировать Изменить статическую конфигурацию Kstat Редактировать путь Kstat diff --git a/manager/app/src/main/res/values-tr/strings.xml b/manager/app/src/main/res/values-tr/strings.xml index 3ee11121..58b02427 100644 --- a/manager/app/src/main/res/values-tr/strings.xml +++ b/manager/app/src/main/res/values-tr/strings.xml @@ -387,21 +387,17 @@ Temel Ayarlar SUS Yolları - SUS Bağlama Noktaları Bağlamayı Kaldırmayı Dene Yol Ayarları Etkinleştirilen Özellikler Durumu SUS Yolu Ekle - SUS Bağlama Noktası Ekle Bağlamayı Kaldırmayı Dene Ekle SUS yolu başarıyla eklendi Yol bulunamadı hatası Yol - Bağlama Yolu örn.: /system/addon.d Yapılandırılmış SUS yolu yok - Yapılandırılmış SUS bağlama noktası yok Yapılandırılmış bağlamayı kaldırmayı dene yok Bağlamayı Kaldır Modu @@ -416,8 +412,6 @@ SUS Yollarını Sıfırla Bu, tüm SUS yol yapılandırmalarını temizleyecektir. Devam etmek istiyor musunuz? - SUS Bağlama Noktalarını Sıfırla - Bu, tüm SUS bağlama noktası yapılandırmalarını temizleyecektir. Devam etmek istiyor musunuz? Bağlamayı Kaldırmayı Dene Sıfırla Bu, tüm bağlamayı kaldırmayı dene yapılandırmalarını temizleyecektir. Devam etmek istiyor musunuz? Yol Ayarlarını Sıfırla @@ -433,18 +427,13 @@ Devre Dışı Bırakıldı SUS Yol Desteği - SUS Bağlama Noktası Desteği Bağlamayı Kaldırmayı Dene Desteği Uname Taklit Desteği Cmdline/Bootconfig Taklit Açık Yönlendirme Desteği Günlük Kaydı Desteği - Otomatik Varsayılan Bağlama - Otomatik Bağlama Noktası Bağlama - Otomatik Bağlamayı Kaldırmayı Dene Bağlama KSU SUSFS Sembollerini Gizle SUS Kstat Desteği - SUS SU mod değiştirme işlevi Yapılandırılabilir SuSFS Özellikleri SuSFS Günlük Kaydını Etkinleştir @@ -540,7 +529,6 @@ Kalıntıları Temizle Çeşitli modüllerin ve araçların kalıntı dosyalarını ve dizinlerini temizleyin (yanlışlıkla silinerek kayba ve başlatılamamaya neden olabilir, dikkatli kullanın) SUS Yolunu Düzenle - SUS Bağlama Noktasını Düzenle Ayırmayı Deneme Yolunu Düzenle Kstat Statik Yapılandırmasını Düzenle Kstat Yolunu Düzenle diff --git a/manager/app/src/main/res/values-uk/strings.xml b/manager/app/src/main/res/values-uk/strings.xml index e4071105..f421781c 100644 --- a/manager/app/src/main/res/values-uk/strings.xml +++ b/manager/app/src/main/res/values-uk/strings.xml @@ -377,21 +377,17 @@ Основні налаштування Шляхи SUS - Монтування SUS Спроба відмонтування Налаштування шляхів Статус увімкнених функцій Додати шлях SUS - Додати монтування SUS Додати спробу відмонтування Шлях SUS успішно додано Помилка: шлях не знайдено Шлях - Шлях монтування напр.: /system/addon.d Немає налаштованих шляхів SUS - Немає налаштованих монтувань SUS Немає налаштованих спроб відмонтування Режим відмонтування @@ -406,8 +402,6 @@ Скинути шляхи SUS Це видалить усі конфігурації шляхів SUS. Ви впевнені, що хочете продовжити? - Скинути монтування SUS - Це видалить усі конфігурації монтувань SUS. Ви впевнені, що хочете продовжити? Скинути спроби відмонтування Це видалить усі конфігурації спроб відмонтування. Ви впевнені, що хочете продовжити? Скинути налаштування шляхів @@ -423,18 +417,13 @@ Вимкнено Підтримка шляхів SUS - Підтримка монтувань SUS Підтримка спроб відмонтування Підтримка підміни uname Підміна Cmdline/Bootconfig Підтримка Open Redirect Підтримка логування - Автоматичне монтування за замовчуванням - Автоматичне прив\'язане монтування - Автоматична спроба відмонтування прив\'язаного монтування Приховати символи KSU SUSFS Підтримка SUS Kstat - Функція перемикання режиму SUS SU Настроювані функції SuSFS Увімкнути лог SuSFS diff --git a/manager/app/src/main/res/values-vi/strings.xml b/manager/app/src/main/res/values-vi/strings.xml index b62325b1..4e0562f7 100644 --- a/manager/app/src/main/res/values-vi/strings.xml +++ b/manager/app/src/main/res/values-vi/strings.xml @@ -378,21 +378,17 @@ Cài đặt cơ bản Đường dẫn SuS - SuS Mount Try Umount Cài đặt Đường dẫn Trạng thái tính năng Thêm Đường dẫn SuS - Thêm SuS Mount Thêm Try Umount Đường dẫn SuS đã được thêm thành công Lỗi không tìm thấy đường dẫn Đường dẫn - Đường dẫn Mount Ví dụ: /system/addon.d Không có Đường dẫn SuS nào được cấu hình - Không có SuS Mount nào được cấu hình Không có Try Umount nào được cấu hình Chế độ Umount @@ -407,8 +403,6 @@ Đặt lại Đường dẫn SuS Thao tác này sẽ xóa tất cả các cấu hình Đường dẫn SuS. Bạn có chắc chắn muốn tiếp tục không? - Đặt lại SuS Mount - Thao tác này sẽ xóa tất cả các cấu hình SuS Mount. Bạn có chắc chắn muốn tiếp tục không? Đặt lại Try Umount Thao tác này sẽ xóa tất cả các cấu hình Try Umount. Bạn có chắc chắn muốn tiếp tục không? Reset Cài đặt Đường dẫn @@ -424,18 +418,13 @@ Đã tắt Hỗ trợ Đường dẫn SuS - Hỗ trợ SuS Mount Hỗ trợ Try Umount Hỗ trợ giả mạo Uname Giả mạo Cmdline/Bootconfig Mở hỗ trợ chuyển hướng Hỗ trợ ghi nhật ký - Tự động Mount mặc định - Tự động Bind Mount - Tự động Try Umount Bind Mount Ẩn biểu tượng KSU SuSFS Hỗ trợ SuS Kstat - Chức năng chuyển đổi chế độ SuS SU Nhấn để bật/tắt ghi nhật ký Kích hoạt nhật ký SuSFS @@ -531,7 +520,6 @@ Dọn rác Dọn dẹp các file và folder còn sót lại của các module và công cụ (Có thể bị xóa nhầm, dẫn đến mất dữ liệu và không khởi động được) Chỉnh sửa Đường dẫn SuS - Chỉnh sửa SuS Mount Chỉnh sửa Try Umount Chỉnh sửa cấu hình Kstat tĩnh Chỉnh sửa Đường dẫn Kstat 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 f7146b9f..eeb0b206 100644 --- a/manager/app/src/main/res/values-zh-rCN/strings.xml +++ b/manager/app/src/main/res/values-zh-rCN/strings.xml @@ -396,21 +396,17 @@ 基本设置 SuS 路径 - SuS 挂载 尝试卸载 路径设置 启用功能状态 添加 SuS 路径 - 添加 SuS 挂载 添加尝试卸载 SuS 路径添加成功 路径未找到错误 路径 - 挂载路径 例如: /system/addon.d 暂无 SuS 路径配置 - 暂无 SuS 挂载配置 暂无尝试卸载配置 卸载模式 @@ -425,8 +421,6 @@ 重置 SuS 路径 这将清除所有 SuS 路径配置,确定要继续吗? - 重置 SuS 挂载 - 这将清除所有 SuS 挂载配置,确定要继续吗? 重置尝试卸载 这将清除所有尝试卸载配置,确定要继续吗? 重置路径设置 @@ -442,18 +436,13 @@ 已禁用 SuS 路径支持 - SuS 挂载支持 尝试卸载支持 欺骗 uname 支持 欺骗 Cmdline/Bootconfig 开放重定向支持 日志记录支持 - 自动默认挂载 - 自动绑定挂载 - 自动尝试卸载绑定挂载 隐藏 KSU SuSFS 符号 SuS Kstat 支持 - SuS SU 模式切换功能 可配置的 SuSFS 功能 SuSFS 启用日志 @@ -549,7 +538,6 @@ 清理工具残留 清理各种模块以及工具的残留文件和目录(可能会误删导致丢失以及无法启动,谨慎使用) 编辑 SuS 路径 - 编辑 SuS 挂载 编辑尝试卸载 编辑 Kstat 静态配置 编辑 Kstat 路径 @@ -736,7 +724,6 @@ 卸载标志 0=正常卸载, 8=MNT_DETACH, -1=自动 标志 - 默认条目 确认删除 确定要删除路径 %s 吗? 路径已添加,重启后生效 diff --git a/manager/app/src/main/res/values-zh-rHK/strings.xml b/manager/app/src/main/res/values-zh-rHK/strings.xml index e78faec6..d755de66 100644 --- a/manager/app/src/main/res/values-zh-rHK/strings.xml +++ b/manager/app/src/main/res/values-zh-rHK/strings.xml @@ -376,21 +376,17 @@ 基本配置 SuS 路徑 - SuS 掛載 嘗試卸載 路徑配置 啟用功能狀態 添加 SuS 路徑 - 添加 SuS 掛載 嘗試添加卸載 SuS 路徑添加成功 錯誤冇此找到路徑 路徑 - 掛載路徑 例如: /system/addon.d 暫冇 SuS 路徑配置 - 暫冇 SuS 掛載配置 暫冇嘗試卸載配置 卸載模式 @@ -405,8 +401,6 @@ 重置 SuS 路徑 這將清除所有 SuS 路徑配置,確定要繼續嗎? - 重置 SuS 掛載 - 這將清除所有 SuS 掛載配置,確定要繼續嗎? 重置嘗試卸載 這將清除所有嘗試卸載配置,確定要繼續嗎? 重置路徑配置 @@ -422,18 +416,13 @@ 已禁用 SuS 路徑支援 - SuS 掛載支援 嘗試卸載支援 欺騙 uname 支援 欺騙 Cmdline/Bootconfig 開放重定向支援 日誌記錄支援 - 自動默認掛載 - 自動綁定掛載 - 自動嘗試卸載綁定掛載 隱藏 KSU SuSFS 符號 SuS Kstat 支援 - SuS SU 模式切換功能 可配置嘅 SuSFS 功能 SuSFS 啟用日誌 @@ -529,7 +518,6 @@ 清理工具殘留 清理各種模組以及工具嘅殘留檔案同目錄(可能會誤刪導致丟失以及無法啟動,謹慎使用) 編輯 SuS 路徑 - 編輯 SuS 掛載 編輯嘗試解除安裝 編輯 Kstat 靜態配置 編輯 Kstat 路徑 diff --git a/manager/app/src/main/res/values-zh-rTW/strings.xml b/manager/app/src/main/res/values-zh-rTW/strings.xml index deac5de4..351205f9 100644 --- a/manager/app/src/main/res/values-zh-rTW/strings.xml +++ b/manager/app/src/main/res/values-zh-rTW/strings.xml @@ -378,21 +378,17 @@ 基本設定 SuS 路徑 - SuS 掛載 嘗試卸載 路徑設定 啟用功能狀態 新增 SuS 路徑 - 新增 SuS 掛載 新增嘗試卸載 成功添加 SuS 路径 未找到路径 路徑 - 掛載路徑 例如:/system/addon.d 暫無 SuS 路徑設定 - 暫無 SuS 掛載設定 暫無嘗試卸載設定 卸載模式 @@ -407,8 +403,6 @@ 重設 SuS 路徑 這將清除所有 SuS 路徑設定,確定要繼續嗎? - 重設 SuS 掛載 - 這將清除所有 SuS 掛載設定,確定要繼續嗎? 重設嘗試卸載 這將清除所有嘗試卸載設定,確定要繼續嗎? 重置路徑設定 @@ -424,18 +418,13 @@ 已停用 SuS 路徑支援 - SuS 掛載支援 嘗試卸載支援 偽裝 uname 支援 偽裝 Cmdline/Bootconfig 開放重定向支援 日誌記錄支援 - 自動預設掛載 - 自動綁定掛載 - 自動嘗試卸載綁定掛載 隱藏 KSU SuSFS 符號 SuS 內核統計支援 - SuS SU 模式切換功能 可設定的 SuSFS 功能 SuSFS 啟用日誌 @@ -531,7 +520,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 700bcfc7..e7b9c124 100644 --- a/manager/app/src/main/res/values/strings.xml +++ b/manager/app/src/main/res/values/strings.xml @@ -399,21 +399,17 @@ 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 e.g.: /system/addon.d No SUS paths configured - No SUS mounts configured No try umount configured Umount Mode @@ -428,8 +424,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 @@ -445,18 +439,13 @@ Disabled SUS Path Support - SUS Mount Support Try Umount Support Spoof uname Support Spoof Cmdline/Bootconfig Open Redirect Support Logging Support - Auto Default Mount - Auto Bind Mount - Auto Try Umount Bind Mount Hide KSU SUSFS Symbols SUS Kstat Support - SUS SU mode switching function Configurable SuSFS Features SuSFS Enable Log @@ -552,7 +541,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 @@ -745,7 +733,6 @@ Important Note:\n Unmount Flags 0=Normal unmount, 8=MNT_DETACH, -1=Auto Flags - Default Entry Confirm Delete Are you sure you want to delete the path %s? Path added, will take effect after reboot