manager: Updated the susfs binary file
- made the umount manager publicly available - and removed the “try umount” functionality - susfs interface and fixed path issues (on Android 16).
This commit is contained in:
Binary file not shown.
@@ -505,9 +505,7 @@ fun SettingScreen(navigator: DestinationsNavigator) {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
val lkmMode = Natives.isLkmMode
|
|
||||||
KsuIsValid {
|
KsuIsValid {
|
||||||
if (lkmMode) {
|
|
||||||
SettingItem(
|
SettingItem(
|
||||||
icon = Icons.Filled.FolderOff,
|
icon = Icons.Filled.FolderOff,
|
||||||
title = stringResource(R.string.umount_path_manager),
|
title = stringResource(R.string.umount_path_manager),
|
||||||
@@ -517,7 +515,6 @@ fun SettingScreen(navigator: DestinationsNavigator) {
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (showBottomsheet) {
|
if (showBottomsheet) {
|
||||||
LogBottomSheet(
|
LogBottomSheet(
|
||||||
@@ -560,7 +557,7 @@ fun SettingScreen(navigator: DestinationsNavigator) {
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
if (lkmMode) {
|
if (Natives.isLkmMode) {
|
||||||
UninstallItem(navigator) {
|
UninstallItem(navigator) {
|
||||||
loadingDialog.withLoading(it)
|
loadingDialog.withLoading(it)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,7 +47,6 @@ enum class SuSFSTab(val displayNameRes: Int) {
|
|||||||
SUS_PATHS(R.string.susfs_tab_sus_paths),
|
SUS_PATHS(R.string.susfs_tab_sus_paths),
|
||||||
SUS_LOOP_PATHS(R.string.susfs_tab_sus_loop_paths),
|
SUS_LOOP_PATHS(R.string.susfs_tab_sus_loop_paths),
|
||||||
SUS_MAPS(R.string.susfs_tab_sus_maps),
|
SUS_MAPS(R.string.susfs_tab_sus_maps),
|
||||||
TRY_UMOUNT(R.string.susfs_tab_try_umount),
|
|
||||||
KSTAT_CONFIG(R.string.susfs_tab_kstat_config),
|
KSTAT_CONFIG(R.string.susfs_tab_kstat_config),
|
||||||
PATH_SETTINGS(R.string.susfs_tab_path_settings),
|
PATH_SETTINGS(R.string.susfs_tab_path_settings),
|
||||||
ENABLED_FEATURES(R.string.susfs_tab_enabled_features);
|
ENABLED_FEATURES(R.string.susfs_tab_enabled_features);
|
||||||
@@ -98,7 +97,6 @@ fun SuSFSConfigScreen(
|
|||||||
var susPaths by remember { mutableStateOf(emptySet<String>()) }
|
var susPaths by remember { mutableStateOf(emptySet<String>()) }
|
||||||
var susLoopPaths by remember { mutableStateOf(emptySet<String>()) }
|
var susLoopPaths by remember { mutableStateOf(emptySet<String>()) }
|
||||||
var susMaps by remember { mutableStateOf(emptySet<String>()) }
|
var susMaps by remember { mutableStateOf(emptySet<String>()) }
|
||||||
var tryUmounts by remember { mutableStateOf(emptySet<String>()) }
|
|
||||||
var androidDataPath by remember { mutableStateOf("") }
|
var androidDataPath by remember { mutableStateOf("") }
|
||||||
var sdcardPath by remember { mutableStateOf("") }
|
var sdcardPath by remember { mutableStateOf("") }
|
||||||
|
|
||||||
@@ -123,7 +121,6 @@ fun SuSFSConfigScreen(
|
|||||||
var showAddLoopPathDialog by remember { mutableStateOf(false) }
|
var showAddLoopPathDialog by remember { mutableStateOf(false) }
|
||||||
var showAddSusMapDialog by remember { mutableStateOf(false) }
|
var showAddSusMapDialog by remember { mutableStateOf(false) }
|
||||||
var showAddAppPathDialog by remember { mutableStateOf(false) }
|
var showAddAppPathDialog by remember { mutableStateOf(false) }
|
||||||
var showAddUmountDialog by remember { mutableStateOf(false) }
|
|
||||||
var showAddKstatStaticallyDialog by remember { mutableStateOf(false) }
|
var showAddKstatStaticallyDialog by remember { mutableStateOf(false) }
|
||||||
var showAddKstatDialog by remember { mutableStateOf(false) }
|
var showAddKstatDialog by remember { mutableStateOf(false) }
|
||||||
|
|
||||||
@@ -131,7 +128,6 @@ fun SuSFSConfigScreen(
|
|||||||
var editingPath by remember { mutableStateOf<String?>(null) }
|
var editingPath by remember { mutableStateOf<String?>(null) }
|
||||||
var editingLoopPath by remember { mutableStateOf<String?>(null) }
|
var editingLoopPath by remember { mutableStateOf<String?>(null) }
|
||||||
var editingSusMap by remember { mutableStateOf<String?>(null) }
|
var editingSusMap by remember { mutableStateOf<String?>(null) }
|
||||||
var editingUmount by remember { mutableStateOf<String?>(null) }
|
|
||||||
var editingKstatConfig by remember { mutableStateOf<String?>(null) }
|
var editingKstatConfig by remember { mutableStateOf<String?>(null) }
|
||||||
var editingKstatPath by remember { mutableStateOf<String?>(null) }
|
var editingKstatPath by remember { mutableStateOf<String?>(null) }
|
||||||
|
|
||||||
@@ -139,7 +135,6 @@ fun SuSFSConfigScreen(
|
|||||||
var showResetPathsDialog by remember { mutableStateOf(false) }
|
var showResetPathsDialog by remember { mutableStateOf(false) }
|
||||||
var showResetLoopPathsDialog by remember { mutableStateOf(false) }
|
var showResetLoopPathsDialog by remember { mutableStateOf(false) }
|
||||||
var showResetSusMapsDialog by remember { mutableStateOf(false) }
|
var showResetSusMapsDialog by remember { mutableStateOf(false) }
|
||||||
var showResetUmountsDialog by remember { mutableStateOf(false) }
|
|
||||||
var showResetKstatDialog by remember { mutableStateOf(false) }
|
var showResetKstatDialog by remember { mutableStateOf(false) }
|
||||||
|
|
||||||
// 备份还原相关状态
|
// 备份还原相关状态
|
||||||
@@ -299,7 +294,6 @@ fun SuSFSConfigScreen(
|
|||||||
susPaths = SuSFSManager.getSusPaths(context)
|
susPaths = SuSFSManager.getSusPaths(context)
|
||||||
susLoopPaths = SuSFSManager.getSusLoopPaths(context)
|
susLoopPaths = SuSFSManager.getSusLoopPaths(context)
|
||||||
susMaps = SuSFSManager.getSusMaps(context)
|
susMaps = SuSFSManager.getSusMaps(context)
|
||||||
tryUmounts = SuSFSManager.getTryUmounts(context)
|
|
||||||
androidDataPath = SuSFSManager.getAndroidDataPath(context)
|
androidDataPath = SuSFSManager.getAndroidDataPath(context)
|
||||||
sdcardPath = SuSFSManager.getSdcardPath(context)
|
sdcardPath = SuSFSManager.getSdcardPath(context)
|
||||||
kstatConfigs = SuSFSManager.getKstatConfigs(context)
|
kstatConfigs = SuSFSManager.getKstatConfigs(context)
|
||||||
@@ -471,7 +465,6 @@ fun SuSFSConfigScreen(
|
|||||||
susPaths = SuSFSManager.getSusPaths(context)
|
susPaths = SuSFSManager.getSusPaths(context)
|
||||||
susLoopPaths = SuSFSManager.getSusLoopPaths(context)
|
susLoopPaths = SuSFSManager.getSusLoopPaths(context)
|
||||||
susMaps = SuSFSManager.getSusMaps(context)
|
susMaps = SuSFSManager.getSusMaps(context)
|
||||||
tryUmounts = SuSFSManager.getTryUmounts(context)
|
|
||||||
androidDataPath = SuSFSManager.getAndroidDataPath(context)
|
androidDataPath = SuSFSManager.getAndroidDataPath(context)
|
||||||
sdcardPath = SuSFSManager.getSdcardPath(context)
|
sdcardPath = SuSFSManager.getSdcardPath(context)
|
||||||
kstatConfigs = SuSFSManager.getKstatConfigs(context)
|
kstatConfigs = SuSFSManager.getKstatConfigs(context)
|
||||||
@@ -642,33 +635,6 @@ fun SuSFSConfigScreen(
|
|||||||
existingSusPaths = susPaths
|
existingSusPaths = susPaths
|
||||||
)
|
)
|
||||||
|
|
||||||
AddTryUmountDialog(
|
|
||||||
showDialog = showAddUmountDialog,
|
|
||||||
onDismiss = {
|
|
||||||
showAddUmountDialog = false
|
|
||||||
editingUmount = null
|
|
||||||
},
|
|
||||||
onConfirm = { path, mode ->
|
|
||||||
coroutineScope.launch {
|
|
||||||
isLoading = true
|
|
||||||
val success = if (editingUmount != null) {
|
|
||||||
SuSFSManager.editTryUmount(context, editingUmount!!, path, mode)
|
|
||||||
} else {
|
|
||||||
SuSFSManager.addTryUmount(context, path, mode)
|
|
||||||
}
|
|
||||||
if (success) {
|
|
||||||
tryUmounts = SuSFSManager.getTryUmounts(context)
|
|
||||||
}
|
|
||||||
isLoading = false
|
|
||||||
showAddUmountDialog = false
|
|
||||||
editingUmount = null
|
|
||||||
}
|
|
||||||
},
|
|
||||||
isLoading = isLoading,
|
|
||||||
initialPath = editingUmount?.split("|")?.get(0) ?: "",
|
|
||||||
initialMode = editingUmount?.split("|")?.get(1)?.toIntOrNull() ?: 0
|
|
||||||
)
|
|
||||||
|
|
||||||
AddKstatStaticallyDialog(
|
AddKstatStaticallyDialog(
|
||||||
showDialog = showAddKstatStaticallyDialog,
|
showDialog = showAddKstatStaticallyDialog,
|
||||||
onDismiss = {
|
onDismiss = {
|
||||||
@@ -829,27 +795,6 @@ fun SuSFSConfigScreen(
|
|||||||
isDestructive = true
|
isDestructive = true
|
||||||
)
|
)
|
||||||
|
|
||||||
ConfirmDialog(
|
|
||||||
showDialog = showResetUmountsDialog,
|
|
||||||
onDismiss = { showResetUmountsDialog = false },
|
|
||||||
onConfirm = {
|
|
||||||
coroutineScope.launch {
|
|
||||||
isLoading = true
|
|
||||||
SuSFSManager.saveTryUmounts(context, emptySet())
|
|
||||||
tryUmounts = emptySet()
|
|
||||||
if (SuSFSManager.isAutoStartEnabled(context)) {
|
|
||||||
SuSFSManager.configureAutoStart(context, true)
|
|
||||||
}
|
|
||||||
isLoading = false
|
|
||||||
showResetUmountsDialog = false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
titleRes = R.string.susfs_reset_umounts_title,
|
|
||||||
messageRes = R.string.susfs_reset_umounts_message,
|
|
||||||
isLoading = isLoading,
|
|
||||||
isDestructive = true
|
|
||||||
)
|
|
||||||
|
|
||||||
ConfirmDialog(
|
ConfirmDialog(
|
||||||
showDialog = showResetKstatDialog,
|
showDialog = showResetKstatDialog,
|
||||||
onDismiss = { showResetKstatDialog = false },
|
onDismiss = { showResetKstatDialog = false },
|
||||||
@@ -1049,28 +994,6 @@ fun SuSFSConfigScreen(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SuSFSTab.TRY_UMOUNT -> {
|
|
||||||
OutlinedButton(
|
|
||||||
onClick = { showResetUmountsDialog = true },
|
|
||||||
enabled = !isLoading && tryUmounts.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_umounts_title),
|
|
||||||
fontWeight = FontWeight.Medium
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SuSFSTab.KSTAT_CONFIG -> {
|
SuSFSTab.KSTAT_CONFIG -> {
|
||||||
OutlinedButton(
|
OutlinedButton(
|
||||||
onClick = { showResetKstatDialog = true },
|
onClick = { showResetKstatDialog = true },
|
||||||
@@ -1260,6 +1183,18 @@ fun SuSFSConfigScreen(
|
|||||||
}
|
}
|
||||||
isLoading = false
|
isLoading = false
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
umountForZygoteIsoService = umountForZygoteIsoService,
|
||||||
|
onUmountForZygoteIsoServiceChange = { enabled ->
|
||||||
|
coroutineScope.launch {
|
||||||
|
isLoading = true
|
||||||
|
val success =
|
||||||
|
SuSFSManager.setUmountForZygoteIsoService(context, enabled)
|
||||||
|
if (success) {
|
||||||
|
umountForZygoteIsoService = enabled
|
||||||
|
}
|
||||||
|
isLoading = false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -1326,39 +1261,6 @@ fun SuSFSConfigScreen(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
SuSFSTab.TRY_UMOUNT -> {
|
|
||||||
TryUmountContent(
|
|
||||||
tryUmounts = tryUmounts,
|
|
||||||
umountForZygoteIsoService = umountForZygoteIsoService,
|
|
||||||
isLoading = isLoading,
|
|
||||||
onAddUmount = { showAddUmountDialog = true },
|
|
||||||
onRemoveUmount = { umountEntry ->
|
|
||||||
coroutineScope.launch {
|
|
||||||
isLoading = true
|
|
||||||
if (SuSFSManager.removeTryUmount(context, umountEntry)) {
|
|
||||||
tryUmounts = SuSFSManager.getTryUmounts(context)
|
|
||||||
}
|
|
||||||
isLoading = false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
onEditUmount = { umountEntry ->
|
|
||||||
editingUmount = umountEntry
|
|
||||||
showAddUmountDialog = true
|
|
||||||
},
|
|
||||||
onToggleUmountForZygoteIsoService = { enabled ->
|
|
||||||
coroutineScope.launch {
|
|
||||||
isLoading = true
|
|
||||||
val success =
|
|
||||||
SuSFSManager.setUmountForZygoteIsoService(context, enabled)
|
|
||||||
if (success) {
|
|
||||||
umountForZygoteIsoService = enabled
|
|
||||||
}
|
|
||||||
isLoading = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
SuSFSTab.KSTAT_CONFIG -> {
|
SuSFSTab.KSTAT_CONFIG -> {
|
||||||
KstatConfigContent(
|
KstatConfigContent(
|
||||||
kstatConfigs = kstatConfigs,
|
kstatConfigs = kstatConfigs,
|
||||||
@@ -1470,7 +1372,9 @@ private fun BasicSettingsContent(
|
|||||||
enableAvcLogSpoofing: Boolean,
|
enableAvcLogSpoofing: Boolean,
|
||||||
onEnableAvcLogSpoofingChange: (Boolean) -> Unit,
|
onEnableAvcLogSpoofingChange: (Boolean) -> Unit,
|
||||||
hideSusMountsForAllProcs: Boolean,
|
hideSusMountsForAllProcs: Boolean,
|
||||||
onHideSusMountsForAllProcsChange: (Boolean) -> Unit
|
onHideSusMountsForAllProcsChange: (Boolean) -> Unit,
|
||||||
|
umountForZygoteIsoService: Boolean,
|
||||||
|
onUmountForZygoteIsoServiceChange: (Boolean) -> Unit
|
||||||
) {
|
) {
|
||||||
var scriptLocationExpanded by remember { mutableStateOf(false) }
|
var scriptLocationExpanded by remember { mutableStateOf(false) }
|
||||||
val isAbDevice = produceState(initialValue = false) {
|
val isAbDevice = produceState(initialValue = false) {
|
||||||
@@ -1856,6 +1760,59 @@ private fun BasicSettingsContent(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 卸载 Zygote 隔离服务开关(仅在1.5.8+版本显示)
|
||||||
|
if (isSusVersion158) {
|
||||||
|
Card(
|
||||||
|
modifier = Modifier.fillMaxWidth(),
|
||||||
|
colors = CardDefaults.cardColors(
|
||||||
|
containerColor = MaterialTheme.colorScheme.surface
|
||||||
|
),
|
||||||
|
shape = RoundedCornerShape(12.dp)
|
||||||
|
) {
|
||||||
|
Row(
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.padding(12.dp),
|
||||||
|
horizontalArrangement = Arrangement.SpaceBetween,
|
||||||
|
verticalAlignment = Alignment.CenterVertically
|
||||||
|
) {
|
||||||
|
Column(
|
||||||
|
modifier = Modifier.weight(1f)
|
||||||
|
) {
|
||||||
|
Row(
|
||||||
|
verticalAlignment = Alignment.CenterVertically
|
||||||
|
) {
|
||||||
|
Icon(
|
||||||
|
imageVector = Icons.Default.Security,
|
||||||
|
contentDescription = null,
|
||||||
|
tint = MaterialTheme.colorScheme.primary,
|
||||||
|
modifier = Modifier.size(18.dp)
|
||||||
|
)
|
||||||
|
Spacer(modifier = Modifier.width(8.dp))
|
||||||
|
Text(
|
||||||
|
text = stringResource(R.string.umount_zygote_iso_service),
|
||||||
|
style = MaterialTheme.typography.titleMedium,
|
||||||
|
fontWeight = FontWeight.Medium,
|
||||||
|
color = MaterialTheme.colorScheme.onSurface
|
||||||
|
)
|
||||||
|
}
|
||||||
|
Spacer(modifier = Modifier.height(6.dp))
|
||||||
|
Text(
|
||||||
|
text = stringResource(R.string.umount_zygote_iso_service_description),
|
||||||
|
style = MaterialTheme.typography.bodyMedium,
|
||||||
|
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||||
|
lineHeight = 14.sp
|
||||||
|
)
|
||||||
|
}
|
||||||
|
Switch(
|
||||||
|
checked = umountForZygoteIsoService,
|
||||||
|
onCheckedChange = onUmountForZygoteIsoServiceChange,
|
||||||
|
enabled = !isLoading
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 槽位信息按钮
|
// 槽位信息按钮
|
||||||
if (isAbDevice) {
|
if (isAbDevice) {
|
||||||
Card(
|
Card(
|
||||||
|
|||||||
@@ -401,126 +401,6 @@ fun AppIcon(
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 添加尝试卸载对话框
|
|
||||||
*/
|
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
|
||||||
@Composable
|
|
||||||
fun AddTryUmountDialog(
|
|
||||||
showDialog: Boolean,
|
|
||||||
onDismiss: () -> Unit,
|
|
||||||
onConfirm: (String, Int) -> Unit,
|
|
||||||
isLoading: Boolean,
|
|
||||||
initialPath: String = "",
|
|
||||||
initialMode: Int = 0
|
|
||||||
) {
|
|
||||||
var newUmountPath by remember { mutableStateOf("") }
|
|
||||||
var newUmountMode by remember { mutableIntStateOf(0) }
|
|
||||||
var umountModeExpanded by remember { mutableStateOf(false) }
|
|
||||||
|
|
||||||
// 当对话框显示时,设置初始值
|
|
||||||
LaunchedEffect(showDialog, initialPath, initialMode) {
|
|
||||||
if (showDialog) {
|
|
||||||
newUmountPath = initialPath
|
|
||||||
newUmountMode = initialMode
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (showDialog) {
|
|
||||||
AlertDialog(
|
|
||||||
onDismissRequest = onDismiss,
|
|
||||||
title = {
|
|
||||||
Text(
|
|
||||||
stringResource(if (initialPath.isNotEmpty()) R.string.susfs_edit_try_umount else R.string.susfs_add_try_umount),
|
|
||||||
style = MaterialTheme.typography.titleLarge,
|
|
||||||
fontWeight = FontWeight.Bold
|
|
||||||
)
|
|
||||||
},
|
|
||||||
text = {
|
|
||||||
Column(
|
|
||||||
verticalArrangement = Arrangement.spacedBy(12.dp)
|
|
||||||
) {
|
|
||||||
OutlinedTextField(
|
|
||||||
value = newUmountPath,
|
|
||||||
onValueChange = { newUmountPath = it },
|
|
||||||
label = { Text(stringResource(R.string.susfs_path_label)) },
|
|
||||||
placeholder = { Text(stringResource(R.string.susfs_path_placeholder)) },
|
|
||||||
modifier = Modifier.fillMaxWidth(),
|
|
||||||
shape = RoundedCornerShape(8.dp)
|
|
||||||
)
|
|
||||||
|
|
||||||
ExposedDropdownMenuBox(
|
|
||||||
expanded = umountModeExpanded,
|
|
||||||
onExpandedChange = { umountModeExpanded = !umountModeExpanded }
|
|
||||||
) {
|
|
||||||
OutlinedTextField(
|
|
||||||
value = if (newUmountMode == 0)
|
|
||||||
stringResource(R.string.susfs_umount_mode_normal)
|
|
||||||
else
|
|
||||||
stringResource(R.string.susfs_umount_mode_detach),
|
|
||||||
onValueChange = { },
|
|
||||||
readOnly = true,
|
|
||||||
label = { Text(stringResource(R.string.susfs_umount_mode_label)) },
|
|
||||||
trailingIcon = { ExposedDropdownMenuDefaults.TrailingIcon(expanded = umountModeExpanded) },
|
|
||||||
modifier = Modifier
|
|
||||||
.fillMaxWidth()
|
|
||||||
.menuAnchor(ExposedDropdownMenuAnchorType.PrimaryEditable, true),
|
|
||||||
shape = RoundedCornerShape(8.dp)
|
|
||||||
)
|
|
||||||
ExposedDropdownMenu(
|
|
||||||
expanded = umountModeExpanded,
|
|
||||||
onDismissRequest = { umountModeExpanded = false }
|
|
||||||
) {
|
|
||||||
DropdownMenuItem(
|
|
||||||
text = { Text(stringResource(R.string.susfs_umount_mode_normal)) },
|
|
||||||
onClick = {
|
|
||||||
newUmountMode = 0
|
|
||||||
umountModeExpanded = false
|
|
||||||
}
|
|
||||||
)
|
|
||||||
DropdownMenuItem(
|
|
||||||
text = { Text(stringResource(R.string.susfs_umount_mode_detach)) },
|
|
||||||
onClick = {
|
|
||||||
newUmountMode = 1
|
|
||||||
umountModeExpanded = false
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
confirmButton = {
|
|
||||||
Button(
|
|
||||||
onClick = {
|
|
||||||
if (newUmountPath.isNotBlank()) {
|
|
||||||
onConfirm(newUmountPath.trim(), newUmountMode)
|
|
||||||
newUmountPath = ""
|
|
||||||
newUmountMode = 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
enabled = newUmountPath.isNotBlank() && !isLoading,
|
|
||||||
shape = RoundedCornerShape(8.dp)
|
|
||||||
) {
|
|
||||||
Text(stringResource(if (initialPath.isNotEmpty()) R.string.susfs_save else R.string.add))
|
|
||||||
}
|
|
||||||
},
|
|
||||||
dismissButton = {
|
|
||||||
TextButton(
|
|
||||||
onClick = {
|
|
||||||
onDismiss()
|
|
||||||
newUmountPath = ""
|
|
||||||
newUmountMode = 0
|
|
||||||
},
|
|
||||||
shape = RoundedCornerShape(8.dp)
|
|
||||||
) {
|
|
||||||
Text(stringResource(R.string.cancel))
|
|
||||||
}
|
|
||||||
},
|
|
||||||
shape = RoundedCornerShape(12.dp)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 添加Kstat静态配置对话框
|
* 添加Kstat静态配置对话框
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ fun SusPathsContent(
|
|||||||
|
|
||||||
val (appPathGroups, otherPaths) = remember(susPaths) {
|
val (appPathGroups, otherPaths) = remember(susPaths) {
|
||||||
val appPathRegex = Regex(".*/Android/data/([^/]+)/?.*")
|
val appPathRegex = Regex(".*/Android/data/([^/]+)/?.*")
|
||||||
val uidPathRegex = Regex("/sys/fs/cgroup/uid_([0-9]+)")
|
val uidPathRegex = Regex("/sys/fs/cgroup(?:/[^/]+)*/uid_([0-9]+)")
|
||||||
val appPathMap = mutableMapOf<String, MutableList<String>>()
|
val appPathMap = mutableMapOf<String, MutableList<String>>()
|
||||||
val uidToPackageMap = mutableMapOf<String, String>()
|
val uidToPackageMap = mutableMapOf<String, String>()
|
||||||
val others = mutableListOf<String>()
|
val others = mutableListOf<String>()
|
||||||
@@ -420,134 +420,6 @@ fun SusMapsContent(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 尝试卸载内容组件
|
|
||||||
*/
|
|
||||||
@Composable
|
|
||||||
fun TryUmountContent(
|
|
||||||
tryUmounts: Set<String>,
|
|
||||||
umountForZygoteIsoService: Boolean,
|
|
||||||
isLoading: Boolean,
|
|
||||||
onAddUmount: () -> Unit,
|
|
||||||
onRemoveUmount: (String) -> Unit,
|
|
||||||
onEditUmount: ((String) -> Unit)? = null,
|
|
||||||
onToggleUmountForZygoteIsoService: (Boolean) -> Unit
|
|
||||||
) {
|
|
||||||
Box(modifier = Modifier.fillMaxSize()) {
|
|
||||||
LazyColumn(
|
|
||||||
modifier = Modifier.fillMaxSize(),
|
|
||||||
verticalArrangement = Arrangement.spacedBy(12.dp)
|
|
||||||
) {
|
|
||||||
if (isSusVersion158()) {
|
|
||||||
item {
|
|
||||||
Card(
|
|
||||||
modifier = Modifier.fillMaxWidth(),
|
|
||||||
colors = CardDefaults.cardColors(
|
|
||||||
containerColor = MaterialTheme.colorScheme.surface
|
|
||||||
),
|
|
||||||
shape = RoundedCornerShape(12.dp)
|
|
||||||
) {
|
|
||||||
Row(
|
|
||||||
modifier = Modifier
|
|
||||||
.fillMaxWidth()
|
|
||||||
.padding(12.dp),
|
|
||||||
horizontalArrangement = Arrangement.SpaceBetween,
|
|
||||||
verticalAlignment = Alignment.CenterVertically
|
|
||||||
) {
|
|
||||||
Column(
|
|
||||||
modifier = Modifier.weight(1f)
|
|
||||||
) {
|
|
||||||
Row(
|
|
||||||
verticalAlignment = Alignment.CenterVertically
|
|
||||||
) {
|
|
||||||
Icon(
|
|
||||||
imageVector = Icons.Default.Security,
|
|
||||||
contentDescription = null,
|
|
||||||
tint = MaterialTheme.colorScheme.primary,
|
|
||||||
modifier = Modifier.size(18.dp)
|
|
||||||
)
|
|
||||||
Spacer(modifier = Modifier.width(8.dp))
|
|
||||||
Text(
|
|
||||||
text = stringResource(R.string.umount_zygote_iso_service),
|
|
||||||
style = MaterialTheme.typography.titleMedium,
|
|
||||||
fontWeight = FontWeight.Medium,
|
|
||||||
color = MaterialTheme.colorScheme.onSurface
|
|
||||||
)
|
|
||||||
}
|
|
||||||
Spacer(modifier = Modifier.height(6.dp))
|
|
||||||
Text(
|
|
||||||
text = stringResource(R.string.umount_zygote_iso_service_description),
|
|
||||||
style = MaterialTheme.typography.bodyMedium,
|
|
||||||
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
|
||||||
lineHeight = 14.sp
|
|
||||||
)
|
|
||||||
}
|
|
||||||
Switch(
|
|
||||||
checked = umountForZygoteIsoService,
|
|
||||||
onCheckedChange = onToggleUmountForZygoteIsoService,
|
|
||||||
enabled = !isLoading
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tryUmounts.isEmpty()) {
|
|
||||||
item {
|
|
||||||
EmptyStateCard(
|
|
||||||
message = stringResource(R.string.susfs_no_umounts_configured)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
items(tryUmounts.toList()) { umountEntry ->
|
|
||||||
val parts = umountEntry.split("|")
|
|
||||||
val path = if (parts.isNotEmpty()) parts[0] else umountEntry
|
|
||||||
val mode = if (parts.size > 1) parts[1] else "0"
|
|
||||||
val modeText = if (mode == "0")
|
|
||||||
stringResource(R.string.susfs_umount_mode_normal_short)
|
|
||||||
else
|
|
||||||
stringResource(R.string.susfs_umount_mode_detach_short)
|
|
||||||
|
|
||||||
PathItemCard(
|
|
||||||
path = path,
|
|
||||||
icon = Icons.Default.Storage,
|
|
||||||
additionalInfo = stringResource(R.string.susfs_umount_mode_display, modeText, mode),
|
|
||||||
onDelete = { onRemoveUmount(umountEntry) },
|
|
||||||
onEdit = if (onEditUmount != null) { { onEditUmount(umountEntry) } } else null,
|
|
||||||
isLoading = isLoading
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
item {
|
|
||||||
Row(
|
|
||||||
modifier = Modifier
|
|
||||||
.fillMaxWidth()
|
|
||||||
.padding(vertical = 16.dp),
|
|
||||||
horizontalArrangement = Arrangement.spacedBy(8.dp),
|
|
||||||
verticalAlignment = Alignment.CenterVertically
|
|
||||||
) {
|
|
||||||
Button(
|
|
||||||
onClick = onAddUmount,
|
|
||||||
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))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Kstat配置内容组件
|
* Kstat配置内容组件
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import com.sukisu.ultra.ui.util.getRootShell
|
|||||||
import com.sukisu.ultra.ui.util.getSuSFSVersion
|
import com.sukisu.ultra.ui.util.getSuSFSVersion
|
||||||
import com.sukisu.ultra.ui.util.getSuSFSFeatures
|
import com.sukisu.ultra.ui.util.getSuSFSFeatures
|
||||||
import com.sukisu.ultra.ui.viewmodel.SuperUserViewModel
|
import com.sukisu.ultra.ui.viewmodel.SuperUserViewModel
|
||||||
|
import com.topjohnwu.superuser.io.SuFile
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.async
|
import kotlinx.coroutines.async
|
||||||
import kotlinx.coroutines.awaitAll
|
import kotlinx.coroutines.awaitAll
|
||||||
@@ -44,7 +45,6 @@ object SuSFSManager {
|
|||||||
private const val KEY_SUS_LOOP_PATHS = "sus_loop_paths"
|
private const val KEY_SUS_LOOP_PATHS = "sus_loop_paths"
|
||||||
|
|
||||||
private const val KEY_SUS_MAPS = "sus_maps"
|
private const val KEY_SUS_MAPS = "sus_maps"
|
||||||
private const val KEY_TRY_UMOUNTS = "try_umounts"
|
|
||||||
private const val KEY_ANDROID_DATA_PATH = "android_data_path"
|
private const val KEY_ANDROID_DATA_PATH = "android_data_path"
|
||||||
private const val KEY_SDCARD_PATH = "sdcard_path"
|
private const val KEY_SDCARD_PATH = "sdcard_path"
|
||||||
private const val KEY_ENABLE_LOG = "enable_log"
|
private const val KEY_ENABLE_LOG = "enable_log"
|
||||||
@@ -70,7 +70,7 @@ object SuSFSManager {
|
|||||||
const val MAX_SUSFS_VERSION = "2.0.0"
|
const val MAX_SUSFS_VERSION = "2.0.0"
|
||||||
private const val BACKUP_FILE_EXTENSION = ".susfs_backup"
|
private const val BACKUP_FILE_EXTENSION = ".susfs_backup"
|
||||||
private const val MEDIA_DATA_PATH = "/data/media/0/Android/data"
|
private const val MEDIA_DATA_PATH = "/data/media/0/Android/data"
|
||||||
private const val CGROUP_UID_PATH_PREFIX = "/sys/fs/cgroup/uid_"
|
private const val CGROUP_BASE_PATH = "/sys/fs/cgroup"
|
||||||
|
|
||||||
data class SlotInfo(val slotName: String, val uname: String, val buildTime: String)
|
data class SlotInfo(val slotName: String, val uname: String, val buildTime: String)
|
||||||
data class CommandResult(val isSuccess: Boolean, val output: String, val errorOutput: String = "")
|
data class CommandResult(val isSuccess: Boolean, val output: String, val errorOutput: String = "")
|
||||||
@@ -156,7 +156,6 @@ object SuSFSManager {
|
|||||||
val susPaths: Set<String>,
|
val susPaths: Set<String>,
|
||||||
val susLoopPaths: Set<String>,
|
val susLoopPaths: Set<String>,
|
||||||
val susMaps: Set<String>,
|
val susMaps: Set<String>,
|
||||||
val tryUmounts: Set<String>,
|
|
||||||
val androidDataPath: String,
|
val androidDataPath: String,
|
||||||
val sdcardPath: String,
|
val sdcardPath: String,
|
||||||
val enableLog: Boolean,
|
val enableLog: Boolean,
|
||||||
@@ -178,7 +177,6 @@ object SuSFSManager {
|
|||||||
susPaths.isNotEmpty() ||
|
susPaths.isNotEmpty() ||
|
||||||
susLoopPaths.isNotEmpty() ||
|
susLoopPaths.isNotEmpty() ||
|
||||||
susMaps.isNotEmpty() ||
|
susMaps.isNotEmpty() ||
|
||||||
tryUmounts.isNotEmpty() ||
|
|
||||||
kstatConfigs.isNotEmpty() ||
|
kstatConfigs.isNotEmpty() ||
|
||||||
addKstatPaths.isNotEmpty()
|
addKstatPaths.isNotEmpty()
|
||||||
}
|
}
|
||||||
@@ -268,7 +266,6 @@ object SuSFSManager {
|
|||||||
susPaths = getSusPaths(context),
|
susPaths = getSusPaths(context),
|
||||||
susLoopPaths = getSusLoopPaths(context),
|
susLoopPaths = getSusLoopPaths(context),
|
||||||
susMaps = getSusMaps(context),
|
susMaps = getSusMaps(context),
|
||||||
tryUmounts = getTryUmounts(context),
|
|
||||||
androidDataPath = getAndroidDataPath(context),
|
androidDataPath = getAndroidDataPath(context),
|
||||||
sdcardPath = getSdcardPath(context),
|
sdcardPath = getSdcardPath(context),
|
||||||
enableLog = getEnableLogState(context),
|
enableLog = getEnableLogState(context),
|
||||||
@@ -377,12 +374,6 @@ object SuSFSManager {
|
|||||||
fun getSusMaps(context: Context): Set<String> =
|
fun getSusMaps(context: Context): Set<String> =
|
||||||
getPrefs(context).getStringSet(KEY_SUS_MAPS, emptySet()) ?: emptySet()
|
getPrefs(context).getStringSet(KEY_SUS_MAPS, emptySet()) ?: emptySet()
|
||||||
|
|
||||||
fun saveTryUmounts(context: Context, umounts: Set<String>) =
|
|
||||||
getPrefs(context).edit { putStringSet(KEY_TRY_UMOUNTS, umounts) }
|
|
||||||
|
|
||||||
fun getTryUmounts(context: Context): Set<String> =
|
|
||||||
getPrefs(context).getStringSet(KEY_TRY_UMOUNTS, emptySet()) ?: emptySet()
|
|
||||||
|
|
||||||
fun saveKstatConfigs(context: Context, configs: Set<String>) =
|
fun saveKstatConfigs(context: Context, configs: Set<String>) =
|
||||||
getPrefs(context).edit { putStringSet(KEY_KSTAT_CONFIGS, configs) }
|
getPrefs(context).edit { putStringSet(KEY_KSTAT_CONFIGS, configs) }
|
||||||
|
|
||||||
@@ -484,7 +475,44 @@ object SuSFSManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun buildUidPath(uid: Int): String = "$CGROUP_UID_PATH_PREFIX$uid"
|
private fun checkPathExists(path: String): Boolean {
|
||||||
|
return try {
|
||||||
|
val shell = try {
|
||||||
|
getRootShell()
|
||||||
|
} catch (_: Exception) {
|
||||||
|
null
|
||||||
|
}
|
||||||
|
|
||||||
|
val file = if (shell != null) {
|
||||||
|
SuFile(path).apply { setShell(shell) }
|
||||||
|
} else {
|
||||||
|
File(path)
|
||||||
|
}
|
||||||
|
|
||||||
|
file.exists() && file.isDirectory
|
||||||
|
} catch (_: Exception) {
|
||||||
|
false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun buildUidPath(uid: Int): String {
|
||||||
|
val possiblePaths = listOf(
|
||||||
|
"$CGROUP_BASE_PATH/uid_$uid",
|
||||||
|
"$CGROUP_BASE_PATH/apps/uid_$uid",
|
||||||
|
"$CGROUP_BASE_PATH/system/uid_$uid",
|
||||||
|
"$CGROUP_BASE_PATH/freezer/uid_$uid",
|
||||||
|
"$CGROUP_BASE_PATH/memory/uid_$uid",
|
||||||
|
"$CGROUP_BASE_PATH/cpuset/uid_$uid",
|
||||||
|
"$CGROUP_BASE_PATH/cpu/uid_$uid"
|
||||||
|
)
|
||||||
|
|
||||||
|
for (path in possiblePaths) {
|
||||||
|
if (checkPathExists(path)) {
|
||||||
|
return path
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return possiblePaths[0]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// 快捷添加应用路径
|
// 快捷添加应用路径
|
||||||
@@ -537,7 +565,6 @@ object SuSFSManager {
|
|||||||
KEY_SUS_PATHS to getSusPaths(context),
|
KEY_SUS_PATHS to getSusPaths(context),
|
||||||
KEY_SUS_LOOP_PATHS to getSusLoopPaths(context),
|
KEY_SUS_LOOP_PATHS to getSusLoopPaths(context),
|
||||||
KEY_SUS_MAPS to getSusMaps(context),
|
KEY_SUS_MAPS to getSusMaps(context),
|
||||||
KEY_TRY_UMOUNTS to getTryUmounts(context),
|
|
||||||
KEY_ANDROID_DATA_PATH to getAndroidDataPath(context),
|
KEY_ANDROID_DATA_PATH to getAndroidDataPath(context),
|
||||||
KEY_SDCARD_PATH to getSdcardPath(context),
|
KEY_SDCARD_PATH to getSdcardPath(context),
|
||||||
KEY_ENABLE_LOG to getEnableLogState(context),
|
KEY_ENABLE_LOG to getEnableLogState(context),
|
||||||
@@ -849,7 +876,6 @@ object SuSFSManager {
|
|||||||
|
|
||||||
val featureMap = mapOf(
|
val featureMap = mapOf(
|
||||||
"CONFIG_KSU_SUSFS_SUS_PATH" to context.getString(R.string.sus_path_feature_label),
|
"CONFIG_KSU_SUSFS_SUS_PATH" to context.getString(R.string.sus_path_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_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_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_OPEN_REDIRECT" to context.getString(R.string.open_redirect_feature_label),
|
||||||
@@ -877,7 +903,6 @@ object SuSFSManager {
|
|||||||
private fun getDefaultDisabledFeatures(context: Context): List<EnabledFeature> {
|
private fun getDefaultDisabledFeatures(context: Context): List<EnabledFeature> {
|
||||||
val defaultFeatures = listOf(
|
val defaultFeatures = listOf(
|
||||||
"sus_path_feature_label" to context.getString(R.string.sus_path_feature_label),
|
"sus_path_feature_label" to context.getString(R.string.sus_path_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_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),
|
"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),
|
"open_redirect_feature_label" to context.getString(R.string.open_redirect_feature_label),
|
||||||
@@ -1167,59 +1192,6 @@ object SuSFSManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 添加尝试卸载
|
|
||||||
suspend fun addTryUmount(context: Context, path: String, mode: Int): Boolean {
|
|
||||||
val commandSuccess = executeSusfsCommand(context, "add_try_umount '$path' $mode")
|
|
||||||
saveTryUmounts(context, getTryUmounts(context) + "$path|$mode")
|
|
||||||
if (isAutoStartEnabled(context)) updateMagiskModule(context)
|
|
||||||
|
|
||||||
showToast(context, if (commandSuccess) {
|
|
||||||
context.getString(R.string.susfs_try_umount_added_success, path)
|
|
||||||
} else {
|
|
||||||
context.getString(R.string.susfs_try_umount_added_saved, path)
|
|
||||||
})
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
suspend fun removeTryUmount(context: Context, umountEntry: String): Boolean {
|
|
||||||
saveTryUmounts(context, getTryUmounts(context) - umountEntry)
|
|
||||||
if (isAutoStartEnabled(context)) updateMagiskModule(context)
|
|
||||||
val path = umountEntry.split("|").firstOrNull() ?: umountEntry
|
|
||||||
showToast(context, "Removed Try to uninstall: $path")
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
// 编辑尝试卸载
|
|
||||||
suspend fun editTryUmount(context: Context, oldEntry: String, newPath: String, newMode: Int): Boolean {
|
|
||||||
return try {
|
|
||||||
val currentUmounts = getTryUmounts(context).toMutableSet()
|
|
||||||
if (!currentUmounts.remove(oldEntry)) {
|
|
||||||
showToast(context, "Original umount entry not found: $oldEntry")
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
saveTryUmounts(context, currentUmounts)
|
|
||||||
|
|
||||||
val success = addTryUmount(context, newPath, newMode)
|
|
||||||
|
|
||||||
if (success) {
|
|
||||||
showToast(context, "Try umount updated: $oldEntry -> $newPath|$newMode")
|
|
||||||
return true
|
|
||||||
} else {
|
|
||||||
// 如果添加新条目失败,恢复旧条目
|
|
||||||
currentUmounts.add(oldEntry)
|
|
||||||
saveTryUmounts(context, currentUmounts)
|
|
||||||
if (isAutoStartEnabled(context)) updateMagiskModule(context)
|
|
||||||
showToast(context, "Failed to update umount entry, reverted to original")
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
} catch (e: Exception) {
|
|
||||||
e.printStackTrace()
|
|
||||||
showToast(context, "Error updating try umount: ${e.message}")
|
|
||||||
false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Zygote隔离服务卸载控制
|
// Zygote隔离服务卸载控制
|
||||||
suspend fun setUmountForZygoteIsoService(context: Context, enabled: Boolean): Boolean {
|
suspend fun setUmountForZygoteIsoService(context: Context, enabled: Boolean): Boolean {
|
||||||
if (!isSusVersion158()) {
|
if (!isSusVersion158()) {
|
||||||
|
|||||||
@@ -429,21 +429,6 @@ object ScriptGenerator {
|
|||||||
appendLine(generateBinaryCheck(config.targetPath))
|
appendLine(generateBinaryCheck(config.targetPath))
|
||||||
appendLine()
|
appendLine()
|
||||||
|
|
||||||
// 添加尝试卸载
|
|
||||||
if (config.tryUmounts.isNotEmpty()) {
|
|
||||||
appendLine("# 添加尝试卸载")
|
|
||||||
config.tryUmounts.forEach { umount ->
|
|
||||||
val parts = umount.split("|")
|
|
||||||
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()
|
|
||||||
}
|
|
||||||
|
|
||||||
appendLine($$"echo \"$(get_current_time): Post-Mount脚本执行完成\" >> \"$LOG_FILE\"")
|
appendLine($$"echo \"$(get_current_time): Post-Mount脚本执行完成\" >> \"$LOG_FILE\"")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Binary file not shown.
@@ -382,33 +382,20 @@ Tanamkan: Secara permanen memasang ke sistem</string>
|
|||||||
<!-- SuSFS Tab Titles -->
|
<!-- SuSFS Tab Titles -->
|
||||||
<string name="susfs_tab_basic_settings">Pengaturan Dasar</string>
|
<string name="susfs_tab_basic_settings">Pengaturan Dasar</string>
|
||||||
<string name="susfs_tab_sus_paths">Jalur SUS</string>
|
<string name="susfs_tab_sus_paths">Jalur SUS</string>
|
||||||
<string name="susfs_tab_try_umount">Coba Lepas Kait</string>
|
|
||||||
<string name="susfs_tab_path_settings">Pengaturan Jalur</string>
|
<string name="susfs_tab_path_settings">Pengaturan Jalur</string>
|
||||||
<string name="susfs_tab_enabled_features">Status Fitur Diaktifkan</string>
|
<string name="susfs_tab_enabled_features">Status Fitur Diaktifkan</string>
|
||||||
<!-- SuSFS Path Management -->
|
<!-- SuSFS Path Management -->
|
||||||
<string name="susfs_add_sus_path">Tambah Jalur SUS</string>
|
<string name="susfs_add_sus_path">Tambah Jalur SUS</string>
|
||||||
<string name="susfs_add_try_umount">Tambah Coba Lepas Kait</string>
|
|
||||||
<string name="susfs_sus_path_added_success">Jalur SUS berhasil ditambahkan</string>
|
<string name="susfs_sus_path_added_success">Jalur SUS berhasil ditambahkan</string>
|
||||||
<string name="susfs_path_not_found_error">Kesalahan: Jalur tidak ditemukan</string>
|
<string name="susfs_path_not_found_error">Kesalahan: Jalur tidak ditemukan</string>
|
||||||
<string name="susfs_path_label">Jalur</string>
|
<string name="susfs_path_label">Jalur</string>
|
||||||
<string name="susfs_path_placeholder">misalnya: /system/addon.d</string>
|
<string name="susfs_path_placeholder">misalnya: /system/addon.d</string>
|
||||||
<string name="susfs_no_paths_configured">Tidak ada jalur SUS yang dikonfigurasi</string>
|
<string name="susfs_no_paths_configured">Tidak ada jalur SUS yang dikonfigurasi</string>
|
||||||
<string name="susfs_no_umounts_configured">Tidak ada coba lepas kait yang dikonfigurasi</string>
|
|
||||||
<!-- SuSFS Umount Mode -->
|
<!-- SuSFS Umount Mode -->
|
||||||
<string name="susfs_umount_mode_label">Mode Lepas Kait</string>
|
|
||||||
<string name="susfs_umount_mode_normal">Lepas Kait Normal (0)</string>
|
|
||||||
<string name="susfs_umount_mode_detach">Lepas Kait Terpisah (1)</string>
|
|
||||||
<string name="susfs_umount_mode_normal_short">Normal</string>
|
|
||||||
<string name="susfs_umount_mode_detach_short">Terpisah</string>
|
|
||||||
<string name="susfs_umount_mode_display">Mode: %1$s (%2$s)</string>
|
|
||||||
<string name="susfs_try_umount_added_success">Jalur coba lepas kait berhasil ditambahkan: %s</string>
|
|
||||||
<string name="susfs_try_umount_added_saved">Berhasil menyimpan jalur coba lepas kait: %s</string>
|
|
||||||
<!-- SuSFS Run Umount -->
|
<!-- SuSFS Run Umount -->
|
||||||
<!-- SuSFS Reset Categories -->
|
<!-- SuSFS Reset Categories -->
|
||||||
<string name="susfs_reset_paths_title">Atur Ulang Jalur SUS</string>
|
<string name="susfs_reset_paths_title">Atur Ulang Jalur SUS</string>
|
||||||
<string name="susfs_reset_paths_message">Ini akan menghapus semua konfigurasi jalur SUS. Apakah Anda yakin ingin melanjutkan?</string>
|
<string name="susfs_reset_paths_message">Ini akan menghapus semua konfigurasi jalur SUS. Apakah Anda yakin ingin melanjutkan?</string>
|
||||||
<string name="susfs_reset_umounts_title">Atur Ulang Coba Lepas Kait</string>
|
|
||||||
<string name="susfs_reset_umounts_message">Ini akan menghapus semua konfigurasi coba lepas kait. Apakah Anda yakin ingin melanjutkan?</string>
|
|
||||||
<string name="susfs_reset_path_title">Atur Ulang Pengaturan Jalur</string>
|
<string name="susfs_reset_path_title">Atur Ulang Pengaturan Jalur</string>
|
||||||
<!-- SuSFS Path Settings -->
|
<!-- SuSFS Path Settings -->
|
||||||
<string name="susfs_android_data_path_label">Jalur Data Android</string>
|
<string name="susfs_android_data_path_label">Jalur Data Android</string>
|
||||||
@@ -422,7 +409,6 @@ Tanamkan: Secara permanen memasang ke sistem</string>
|
|||||||
<string name="susfs_feature_disabled">Dinonaktifkan</string>
|
<string name="susfs_feature_disabled">Dinonaktifkan</string>
|
||||||
<!-- Feature Labels -->
|
<!-- Feature Labels -->
|
||||||
<string name="sus_path_feature_label">Dukungan Jalur SUS</string>
|
<string name="sus_path_feature_label">Dukungan Jalur SUS</string>
|
||||||
<string name="try_umount_feature_label">Dukungan Coba Lepas Kait</string>
|
|
||||||
<string name="spoof_uname_feature_label">Dukungan Spoof Uname</string>
|
<string name="spoof_uname_feature_label">Dukungan Spoof Uname</string>
|
||||||
<string name="spoof_cmdline_feature_label">Spoof Cmdline/Bootconfig</string>
|
<string name="spoof_cmdline_feature_label">Spoof Cmdline/Bootconfig</string>
|
||||||
<string name="open_redirect_feature_label">Dukungan Open Redirect</string>
|
<string name="open_redirect_feature_label">Dukungan Open Redirect</string>
|
||||||
|
|||||||
@@ -389,33 +389,20 @@
|
|||||||
<!-- SuSFS Tab Titles -->
|
<!-- SuSFS Tab Titles -->
|
||||||
<string name="susfs_tab_basic_settings">Pengaturan Dasar</string>
|
<string name="susfs_tab_basic_settings">Pengaturan Dasar</string>
|
||||||
<string name="susfs_tab_sus_paths">Jalur SUS</string>
|
<string name="susfs_tab_sus_paths">Jalur SUS</string>
|
||||||
<string name="susfs_tab_try_umount">Coba Umount</string>
|
|
||||||
<string name="susfs_tab_path_settings">Pengaturan Path</string>
|
<string name="susfs_tab_path_settings">Pengaturan Path</string>
|
||||||
<string name="susfs_tab_enabled_features">Status Fitur yang Diaktifkan</string>
|
<string name="susfs_tab_enabled_features">Status Fitur yang Diaktifkan</string>
|
||||||
<!-- SuSFS Path Management -->
|
<!-- SuSFS Path Management -->
|
||||||
<string name="susfs_add_sus_path">Tambahkan Jalur SUS</string>
|
<string name="susfs_add_sus_path">Tambahkan Jalur SUS</string>
|
||||||
<string name="susfs_add_try_umount">Tambahkan Coba Umount</string>
|
|
||||||
<string name="susfs_sus_path_added_success">Jalur SUS berhasil ditambahkan</string>
|
<string name="susfs_sus_path_added_success">Jalur SUS berhasil ditambahkan</string>
|
||||||
<string name="susfs_path_not_found_error">Kesalahan jalur tidak ditemukan</string>
|
<string name="susfs_path_not_found_error">Kesalahan jalur tidak ditemukan</string>
|
||||||
<string name="susfs_path_label">Jalur</string>
|
<string name="susfs_path_label">Jalur</string>
|
||||||
<string name="susfs_path_placeholder">contoh: /system/addon.d</string>
|
<string name="susfs_path_placeholder">contoh: /system/addon.d</string>
|
||||||
<string name="susfs_no_paths_configured">Tidak ada jalur SUS yang dikonfigurasi</string>
|
<string name="susfs_no_paths_configured">Tidak ada jalur SUS yang dikonfigurasi</string>
|
||||||
<string name="susfs_no_umounts_configured">Tidak ada coba umount yang dikonfigurasi</string>
|
|
||||||
<!-- SuSFS Umount Mode -->
|
<!-- SuSFS Umount Mode -->
|
||||||
<string name="susfs_umount_mode_label">Mode Umount</string>
|
|
||||||
<string name="susfs_umount_mode_normal">Umount Normal (0)</string>
|
|
||||||
<string name="susfs_umount_mode_detach">Umount Lepas (1)</string>
|
|
||||||
<string name="susfs_umount_mode_normal_short">Normal</string>
|
|
||||||
<string name="susfs_umount_mode_detach_short">Lepas</string>
|
|
||||||
<string name="susfs_umount_mode_display">Mode: %1$s (%2$s)</string>
|
|
||||||
<string name="susfs_try_umount_added_success">Jalur coba umount berhasil ditambahkan: %s</string>
|
|
||||||
<string name="susfs_try_umount_added_saved">Jalur coba umount berhasil disimpan: %s</string>
|
|
||||||
<!-- SuSFS Run Umount -->
|
<!-- SuSFS Run Umount -->
|
||||||
<!-- SuSFS Reset Categories -->
|
<!-- SuSFS Reset Categories -->
|
||||||
<string name="susfs_reset_paths_title">Setel Ulang Jalur SUS</string>
|
<string name="susfs_reset_paths_title">Setel Ulang Jalur SUS</string>
|
||||||
<string name="susfs_reset_paths_message">Ini akan menghapus semua konfigurasi jalur SUS. Apakah Anda yakin ingin melanjutkan?</string>
|
<string name="susfs_reset_paths_message">Ini akan menghapus semua konfigurasi jalur SUS. Apakah Anda yakin ingin melanjutkan?</string>
|
||||||
<string name="susfs_reset_umounts_title">Setel Ulang Coba Umount</string>
|
|
||||||
<string name="susfs_reset_umounts_message">Ini akan menghapus semua konfigurasi umount. Apakah Anda yakin ingin melanjutkan?</string>
|
|
||||||
<string name="susfs_reset_path_title">Setel Ulang Pengaturan Jalur</string>
|
<string name="susfs_reset_path_title">Setel Ulang Pengaturan Jalur</string>
|
||||||
<!-- SuSFS Path Settings -->
|
<!-- SuSFS Path Settings -->
|
||||||
<string name="susfs_android_data_path_label">Jalur Data Android</string>
|
<string name="susfs_android_data_path_label">Jalur Data Android</string>
|
||||||
@@ -429,7 +416,6 @@
|
|||||||
<string name="susfs_feature_disabled">Dinonaktifkan</string>
|
<string name="susfs_feature_disabled">Dinonaktifkan</string>
|
||||||
<!-- Feature Labels -->
|
<!-- Feature Labels -->
|
||||||
<string name="sus_path_feature_label">Dukungan Jalur SUS</string>
|
<string name="sus_path_feature_label">Dukungan Jalur SUS</string>
|
||||||
<string name="try_umount_feature_label">Dukungan Coba Umount</string>
|
|
||||||
<string name="spoof_uname_feature_label">Dukungan Spoof uname</string>
|
<string name="spoof_uname_feature_label">Dukungan Spoof uname</string>
|
||||||
<string name="spoof_cmdline_feature_label">Spoof Cmdline/Bootconfig</string>
|
<string name="spoof_cmdline_feature_label">Spoof Cmdline/Bootconfig</string>
|
||||||
<string name="open_redirect_feature_label">Dukungan Pengalihan Terbuka</string>
|
<string name="open_redirect_feature_label">Dukungan Pengalihan Terbuka</string>
|
||||||
@@ -531,7 +517,6 @@
|
|||||||
<string name="cleanup_residue">Bersihkan Residu</string>
|
<string name="cleanup_residue">Bersihkan Residu</string>
|
||||||
<string name="cleanup_residue_description">Bersihkan file dan direktori sisa dari berbagai modul dan alat (mungkin terhapus secara tidak sengaja, mengakibatkan kehilangan dan gagal memulai, gunakan dengan hati-hati)</string>
|
<string name="cleanup_residue_description">Bersihkan file dan direktori sisa dari berbagai modul dan alat (mungkin terhapus secara tidak sengaja, mengakibatkan kehilangan dan gagal memulai, gunakan dengan hati-hati)</string>
|
||||||
<string name="susfs_edit_sus_path">Edit Jalur SUS</string>
|
<string name="susfs_edit_sus_path">Edit Jalur SUS</string>
|
||||||
<string name="susfs_edit_try_umount">Edit Coba Umount</string>
|
|
||||||
<string name="edit_kstat_statically_title">Edit Konfigurasi Statis Kstat</string>
|
<string name="edit_kstat_statically_title">Edit Konfigurasi Statis Kstat</string>
|
||||||
<string name="edit_kstat_path_title">Edit Jalur Kstat</string>
|
<string name="edit_kstat_path_title">Edit Jalur Kstat</string>
|
||||||
<string name="susfs_save">Simpan</string>
|
<string name="susfs_save">Simpan</string>
|
||||||
|
|||||||
@@ -380,33 +380,20 @@
|
|||||||
<!-- SuSFS Tab Titles -->
|
<!-- SuSFS Tab Titles -->
|
||||||
<string name="susfs_tab_basic_settings">基本設定</string>
|
<string name="susfs_tab_basic_settings">基本設定</string>
|
||||||
<string name="susfs_tab_sus_paths">SUS のパス</string>
|
<string name="susfs_tab_sus_paths">SUS のパス</string>
|
||||||
<string name="susfs_tab_try_umount">アンマウントを試す</string>
|
|
||||||
<string name="susfs_tab_path_settings">パスの設定</string>
|
<string name="susfs_tab_path_settings">パスの設定</string>
|
||||||
<string name="susfs_tab_enabled_features">有効な機能のステータス</string>
|
<string name="susfs_tab_enabled_features">有効な機能のステータス</string>
|
||||||
<!-- SuSFS Path Management -->
|
<!-- SuSFS Path Management -->
|
||||||
<string name="susfs_add_sus_path">SUS パスを追加</string>
|
<string name="susfs_add_sus_path">SUS パスを追加</string>
|
||||||
<string name="susfs_add_try_umount">アンマウントを試すを追加</string>
|
|
||||||
<string name="susfs_sus_path_added_success">SUS パスが正常に追加されました</string>
|
<string name="susfs_sus_path_added_success">SUS パスが正常に追加されました</string>
|
||||||
<string name="susfs_path_not_found_error">パスが見つかりません</string>
|
<string name="susfs_path_not_found_error">パスが見つかりません</string>
|
||||||
<string name="susfs_path_label">パス</string>
|
<string name="susfs_path_label">パス</string>
|
||||||
<string name="susfs_path_placeholder">例: /system/addon.d</string>
|
<string name="susfs_path_placeholder">例: /system/addon.d</string>
|
||||||
<string name="susfs_no_paths_configured">SUS パスが未構成です</string>
|
<string name="susfs_no_paths_configured">SUS パスが未構成です</string>
|
||||||
<string name="susfs_no_umounts_configured">アンマウントを試すが未構成です</string>
|
|
||||||
<!-- SuSFS Umount Mode -->
|
<!-- SuSFS Umount Mode -->
|
||||||
<string name="susfs_umount_mode_label">アンマウントモード</string>
|
|
||||||
<string name="susfs_umount_mode_normal">通常のアンマウント (0)</string>
|
|
||||||
<string name="susfs_umount_mode_detach">アンマウントを分離 (1)</string>
|
|
||||||
<string name="susfs_umount_mode_normal_short">通常</string>
|
|
||||||
<string name="susfs_umount_mode_detach_short">分離</string>
|
|
||||||
<string name="susfs_umount_mode_display">モード: %1$s (%2$s)</string>
|
|
||||||
<string name="susfs_try_umount_added_success">追加されたパスのアンマウントに成功しました: %s</string>
|
|
||||||
<string name="susfs_try_umount_added_saved">アンマウントのパスの保存に成功しました: %s</string>
|
|
||||||
<!-- SuSFS Run Umount -->
|
<!-- SuSFS Run Umount -->
|
||||||
<!-- SuSFS Reset Categories -->
|
<!-- SuSFS Reset Categories -->
|
||||||
<string name="susfs_reset_paths_title">SUS パスをリセット</string>
|
<string name="susfs_reset_paths_title">SUS パスをリセット</string>
|
||||||
<string name="susfs_reset_paths_message">すべての SUS パスの構成が消去されます。続行してもよろしいですか?</string>
|
<string name="susfs_reset_paths_message">すべての SUS パスの構成が消去されます。続行してもよろしいですか?</string>
|
||||||
<string name="susfs_reset_umounts_title">リセットしてアンマウントを試す</string>
|
|
||||||
<string name="susfs_reset_umounts_message">すべてのアンマウント構成がリセットされます。続行してもよろしいですか?</string>
|
|
||||||
<string name="susfs_reset_path_title">パスの設定をリセット</string>
|
<string name="susfs_reset_path_title">パスの設定をリセット</string>
|
||||||
<!-- SuSFS Path Settings -->
|
<!-- SuSFS Path Settings -->
|
||||||
<string name="susfs_android_data_path_label">Android データパス</string>
|
<string name="susfs_android_data_path_label">Android データパス</string>
|
||||||
@@ -420,7 +407,6 @@
|
|||||||
<string name="susfs_feature_disabled">無効</string>
|
<string name="susfs_feature_disabled">無効</string>
|
||||||
<!-- Feature Labels -->
|
<!-- Feature Labels -->
|
||||||
<string name="sus_path_feature_label">SUS パスの対応</string>
|
<string name="sus_path_feature_label">SUS パスの対応</string>
|
||||||
<string name="try_umount_feature_label">アンマウントを試すの対応</string>
|
|
||||||
<string name="spoof_uname_feature_label">uname 偽装の対応</string>
|
<string name="spoof_uname_feature_label">uname 偽装の対応</string>
|
||||||
<string name="spoof_cmdline_feature_label">Cmdline/Bootconfig を偽装</string>
|
<string name="spoof_cmdline_feature_label">Cmdline/Bootconfig を偽装</string>
|
||||||
<string name="open_redirect_feature_label">オープンリダイレクトの対応</string>
|
<string name="open_redirect_feature_label">オープンリダイレクトの対応</string>
|
||||||
@@ -522,7 +508,6 @@
|
|||||||
<string name="cleanup_residue">残骸をクリーンアップ</string>
|
<string name="cleanup_residue">残骸をクリーンアップ</string>
|
||||||
<string name="cleanup_residue_description">様々なモジュールや残骸となったツールのファイルとディレクトリをクリーンアップします (誤って削除すると損失や起動の失敗に繋がる可能性があるため、注意して使用してください)</string>
|
<string name="cleanup_residue_description">様々なモジュールや残骸となったツールのファイルとディレクトリをクリーンアップします (誤って削除すると損失や起動の失敗に繋がる可能性があるため、注意して使用してください)</string>
|
||||||
<string name="susfs_edit_sus_path">SUS のパスを編集</string>
|
<string name="susfs_edit_sus_path">SUS のパスを編集</string>
|
||||||
<string name="susfs_edit_try_umount">アンマウントを試すを編集</string>
|
|
||||||
<string name="edit_kstat_statically_title">Kstat 静的構成を編集</string>
|
<string name="edit_kstat_statically_title">Kstat 静的構成を編集</string>
|
||||||
<string name="edit_kstat_path_title">Kstat のパスを編集</string>
|
<string name="edit_kstat_path_title">Kstat のパスを編集</string>
|
||||||
<string name="susfs_save">保存</string>
|
<string name="susfs_save">保存</string>
|
||||||
|
|||||||
@@ -390,33 +390,20 @@
|
|||||||
<!-- SuSFS Tab Titles -->
|
<!-- SuSFS Tab Titles -->
|
||||||
<string name="susfs_tab_basic_settings">Базовые настройки</string>
|
<string name="susfs_tab_basic_settings">Базовые настройки</string>
|
||||||
<string name="susfs_tab_sus_paths">SUS пути</string>
|
<string name="susfs_tab_sus_paths">SUS пути</string>
|
||||||
<string name="susfs_tab_try_umount">Попробовать размонтировать</string>
|
|
||||||
<string name="susfs_tab_path_settings">Настройки пути</string>
|
<string name="susfs_tab_path_settings">Настройки пути</string>
|
||||||
<string name="susfs_tab_enabled_features">Статус включённых функций</string>
|
<string name="susfs_tab_enabled_features">Статус включённых функций</string>
|
||||||
<!-- SuSFS Path Management -->
|
<!-- SuSFS Path Management -->
|
||||||
<string name="susfs_add_sus_path">Добавить SUS путь</string>
|
<string name="susfs_add_sus_path">Добавить SUS путь</string>
|
||||||
<string name="susfs_add_try_umount">Добавить попробовать размонтировать</string>
|
|
||||||
<string name="susfs_sus_path_added_success">Путь SUS успешно добавлен</string>
|
<string name="susfs_sus_path_added_success">Путь SUS успешно добавлен</string>
|
||||||
<string name="susfs_path_not_found_error">Ошибка пути</string>
|
<string name="susfs_path_not_found_error">Ошибка пути</string>
|
||||||
<string name="susfs_path_label">Путь</string>
|
<string name="susfs_path_label">Путь</string>
|
||||||
<string name="susfs_path_placeholder">например: /system/addon.d</string>
|
<string name="susfs_path_placeholder">например: /system/addon.d</string>
|
||||||
<string name="susfs_no_paths_configured">SUS пути не настроены</string>
|
<string name="susfs_no_paths_configured">SUS пути не настроены</string>
|
||||||
<string name="susfs_no_umounts_configured">Попытка размонтировать не настроена</string>
|
|
||||||
<!-- SuSFS Umount Mode -->
|
<!-- SuSFS Umount Mode -->
|
||||||
<string name="susfs_umount_mode_label">Режим размонтирования</string>
|
|
||||||
<string name="susfs_umount_mode_normal">Обычное размонтирование (0)</string>
|
|
||||||
<string name="susfs_umount_mode_detach">Размонтирование отсоединением (1)</string>
|
|
||||||
<string name="susfs_umount_mode_normal_short">Нормальный</string>
|
|
||||||
<string name="susfs_umount_mode_detach_short">Отсоединить</string>
|
|
||||||
<string name="susfs_umount_mode_display">Режим: %1$s (%2$s)</string>
|
|
||||||
<string name="susfs_try_umount_added_success">Попытка размонтировать путь успешно добавлена: %s</string>
|
|
||||||
<string name="susfs_try_umount_added_saved">Попытка размонтировать путь успешно сохранена: %s</string>
|
|
||||||
<!-- SuSFS Run Umount -->
|
<!-- SuSFS Run Umount -->
|
||||||
<!-- SuSFS Reset Categories -->
|
<!-- SuSFS Reset Categories -->
|
||||||
<string name="susfs_reset_paths_title">Сбросить SUS пути</string>
|
<string name="susfs_reset_paths_title">Сбросить SUS пути</string>
|
||||||
<string name="susfs_reset_paths_message">Это очистит все конфигурации пути SUS. Вы уверены, что хотите продолжить?</string>
|
<string name="susfs_reset_paths_message">Это очистит все конфигурации пути SUS. Вы уверены, что хотите продолжить?</string>
|
||||||
<string name="susfs_reset_umounts_title">Сбросить Umount</string>
|
|
||||||
<string name="susfs_reset_umounts_message">Это очистит все конфигурации размонтирования. Вы уверены, что хотите продолжить?</string>
|
|
||||||
<string name="susfs_reset_path_title">Сбросить настройки пути</string>
|
<string name="susfs_reset_path_title">Сбросить настройки пути</string>
|
||||||
<!-- SuSFS Path Settings -->
|
<!-- SuSFS Path Settings -->
|
||||||
<string name="susfs_android_data_path_label">Путь к данным Android</string>
|
<string name="susfs_android_data_path_label">Путь к данным Android</string>
|
||||||
@@ -430,7 +417,6 @@
|
|||||||
<string name="susfs_feature_disabled">Выключено</string>
|
<string name="susfs_feature_disabled">Выключено</string>
|
||||||
<!-- Feature Labels -->
|
<!-- Feature Labels -->
|
||||||
<string name="sus_path_feature_label">Поддержка SUS пути</string>
|
<string name="sus_path_feature_label">Поддержка SUS пути</string>
|
||||||
<string name="try_umount_feature_label">Поддержка размонтирования</string>
|
|
||||||
<string name="spoof_uname_feature_label">Поддержка подмены uname</string>
|
<string name="spoof_uname_feature_label">Поддержка подмены uname</string>
|
||||||
<string name="spoof_cmdline_feature_label">Подмена Cmdline/Bootconfig</string>
|
<string name="spoof_cmdline_feature_label">Подмена Cmdline/Bootconfig</string>
|
||||||
<string name="open_redirect_feature_label">Поддержка Open Redirect</string>
|
<string name="open_redirect_feature_label">Поддержка Open Redirect</string>
|
||||||
@@ -532,7 +518,6 @@
|
|||||||
<string name="cleanup_residue">Очистка</string>
|
<string name="cleanup_residue">Очистка</string>
|
||||||
<string name="cleanup_residue_description">Очистка остаточных файлов и каталогов различных модулей и инструментов (может быть удален по ошибке, в результате потери и неспособности начаться, используйте с осторожностью)</string>
|
<string name="cleanup_residue_description">Очистка остаточных файлов и каталогов различных модулей и инструментов (может быть удален по ошибке, в результате потери и неспособности начаться, используйте с осторожностью)</string>
|
||||||
<string name="susfs_edit_sus_path">Редактировать путь SUS</string>
|
<string name="susfs_edit_sus_path">Редактировать путь SUS</string>
|
||||||
<string name="susfs_edit_try_umount">Изменить попробовать размонтировать</string>
|
|
||||||
<string name="edit_kstat_statically_title">Изменить статическую конфигурацию Kstat</string>
|
<string name="edit_kstat_statically_title">Изменить статическую конфигурацию Kstat</string>
|
||||||
<string name="edit_kstat_path_title">Редактировать путь Kstat</string>
|
<string name="edit_kstat_path_title">Редактировать путь Kstat</string>
|
||||||
<string name="susfs_save">Сохранить</string>
|
<string name="susfs_save">Сохранить</string>
|
||||||
|
|||||||
@@ -387,33 +387,20 @@
|
|||||||
<!-- SuSFS Tab Titles -->
|
<!-- SuSFS Tab Titles -->
|
||||||
<string name="susfs_tab_basic_settings">Temel Ayarlar</string>
|
<string name="susfs_tab_basic_settings">Temel Ayarlar</string>
|
||||||
<string name="susfs_tab_sus_paths">SUS Yolları</string>
|
<string name="susfs_tab_sus_paths">SUS Yolları</string>
|
||||||
<string name="susfs_tab_try_umount">Bağlamayı Kaldırmayı Dene</string>
|
|
||||||
<string name="susfs_tab_path_settings">Yol Ayarları</string>
|
<string name="susfs_tab_path_settings">Yol Ayarları</string>
|
||||||
<string name="susfs_tab_enabled_features">Etkinleştirilen Özellikler Durumu</string>
|
<string name="susfs_tab_enabled_features">Etkinleştirilen Özellikler Durumu</string>
|
||||||
<!-- SuSFS Path Management -->
|
<!-- SuSFS Path Management -->
|
||||||
<string name="susfs_add_sus_path">SUS Yolu Ekle</string>
|
<string name="susfs_add_sus_path">SUS Yolu Ekle</string>
|
||||||
<string name="susfs_add_try_umount">Bağlamayı Kaldırmayı Dene Ekle</string>
|
|
||||||
<string name="susfs_sus_path_added_success">SUS yolu başarıyla eklendi</string>
|
<string name="susfs_sus_path_added_success">SUS yolu başarıyla eklendi</string>
|
||||||
<string name="susfs_path_not_found_error">Yol bulunamadı hatası</string>
|
<string name="susfs_path_not_found_error">Yol bulunamadı hatası</string>
|
||||||
<string name="susfs_path_label">Yol</string>
|
<string name="susfs_path_label">Yol</string>
|
||||||
<string name="susfs_path_placeholder">örn.: /system/addon.d</string>
|
<string name="susfs_path_placeholder">örn.: /system/addon.d</string>
|
||||||
<string name="susfs_no_paths_configured">Yapılandırılmış SUS yolu yok</string>
|
<string name="susfs_no_paths_configured">Yapılandırılmış SUS yolu yok</string>
|
||||||
<string name="susfs_no_umounts_configured">Yapılandırılmış bağlamayı kaldırmayı dene yok</string>
|
|
||||||
<!-- SuSFS Umount Mode -->
|
<!-- SuSFS Umount Mode -->
|
||||||
<string name="susfs_umount_mode_label">Bağlamayı Kaldır Modu</string>
|
|
||||||
<string name="susfs_umount_mode_normal">Normal Bağlamayı Kaldır (0)</string>
|
|
||||||
<string name="susfs_umount_mode_detach">Ayrı Bağlamayı Kaldır (1)</string>
|
|
||||||
<string name="susfs_umount_mode_normal_short">Normal</string>
|
|
||||||
<string name="susfs_umount_mode_detach_short">Ayrı</string>
|
|
||||||
<string name="susfs_umount_mode_display">Mod: %1$s (%2$s)</string>
|
|
||||||
<string name="susfs_try_umount_added_success">Bağlamayı kaldırmayı dene yolu başarıyla eklendi: %s</string>
|
|
||||||
<string name="susfs_try_umount_added_saved">Bağlamayı kaldırmayı dene yolu kaydetme başarılı: %s</string>
|
|
||||||
<!-- SuSFS Run Umount -->
|
<!-- SuSFS Run Umount -->
|
||||||
<!-- SuSFS Reset Categories -->
|
<!-- SuSFS Reset Categories -->
|
||||||
<string name="susfs_reset_paths_title">SUS Yollarını Sıfırla</string>
|
<string name="susfs_reset_paths_title">SUS Yollarını Sıfırla</string>
|
||||||
<string name="susfs_reset_paths_message">Bu, tüm SUS yol yapılandırmalarını temizleyecektir. Devam etmek istiyor musunuz?</string>
|
<string name="susfs_reset_paths_message">Bu, tüm SUS yol yapılandırmalarını temizleyecektir. Devam etmek istiyor musunuz?</string>
|
||||||
<string name="susfs_reset_umounts_title">Bağlamayı Kaldırmayı Dene Sıfırla</string>
|
|
||||||
<string name="susfs_reset_umounts_message">Bu, tüm bağlamayı kaldırmayı dene yapılandırmalarını temizleyecektir. Devam etmek istiyor musunuz?</string>
|
|
||||||
<string name="susfs_reset_path_title">Yol Ayarlarını Sıfırla</string>
|
<string name="susfs_reset_path_title">Yol Ayarlarını Sıfırla</string>
|
||||||
<!-- SuSFS Path Settings -->
|
<!-- SuSFS Path Settings -->
|
||||||
<string name="susfs_android_data_path_label">Android Veri Yolu</string>
|
<string name="susfs_android_data_path_label">Android Veri Yolu</string>
|
||||||
@@ -427,7 +414,6 @@
|
|||||||
<string name="susfs_feature_disabled">Devre Dışı Bırakıldı</string>
|
<string name="susfs_feature_disabled">Devre Dışı Bırakıldı</string>
|
||||||
<!-- Feature Labels -->
|
<!-- Feature Labels -->
|
||||||
<string name="sus_path_feature_label">SUS Yol Desteği</string>
|
<string name="sus_path_feature_label">SUS Yol Desteği</string>
|
||||||
<string name="try_umount_feature_label">Bağlamayı Kaldırmayı Dene Desteği</string>
|
|
||||||
<string name="spoof_uname_feature_label">Uname Taklit Desteği</string>
|
<string name="spoof_uname_feature_label">Uname Taklit Desteği</string>
|
||||||
<string name="spoof_cmdline_feature_label">Cmdline/Bootconfig Taklit</string>
|
<string name="spoof_cmdline_feature_label">Cmdline/Bootconfig Taklit</string>
|
||||||
<string name="open_redirect_feature_label">Açık Yönlendirme Desteği</string>
|
<string name="open_redirect_feature_label">Açık Yönlendirme Desteği</string>
|
||||||
@@ -529,7 +515,6 @@
|
|||||||
<string name="cleanup_residue">Kalıntıları Temizle</string>
|
<string name="cleanup_residue">Kalıntıları Temizle</string>
|
||||||
<string name="cleanup_residue_description">Ç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)</string>
|
<string name="cleanup_residue_description">Ç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)</string>
|
||||||
<string name="susfs_edit_sus_path">SUS Yolunu Düzenle</string>
|
<string name="susfs_edit_sus_path">SUS Yolunu Düzenle</string>
|
||||||
<string name="susfs_edit_try_umount">Ayırmayı Deneme Yolunu Düzenle</string>
|
|
||||||
<string name="edit_kstat_statically_title">Kstat Statik Yapılandırmasını Düzenle</string>
|
<string name="edit_kstat_statically_title">Kstat Statik Yapılandırmasını Düzenle</string>
|
||||||
<string name="edit_kstat_path_title">Kstat Yolunu Düzenle</string>
|
<string name="edit_kstat_path_title">Kstat Yolunu Düzenle</string>
|
||||||
<string name="susfs_save">Kaydet</string>
|
<string name="susfs_save">Kaydet</string>
|
||||||
|
|||||||
@@ -377,33 +377,20 @@
|
|||||||
<!-- SuSFS Tab Titles -->
|
<!-- SuSFS Tab Titles -->
|
||||||
<string name="susfs_tab_basic_settings">Основні налаштування</string>
|
<string name="susfs_tab_basic_settings">Основні налаштування</string>
|
||||||
<string name="susfs_tab_sus_paths">Шляхи SUS</string>
|
<string name="susfs_tab_sus_paths">Шляхи SUS</string>
|
||||||
<string name="susfs_tab_try_umount">Спроба відмонтування</string>
|
|
||||||
<string name="susfs_tab_path_settings">Налаштування шляхів</string>
|
<string name="susfs_tab_path_settings">Налаштування шляхів</string>
|
||||||
<string name="susfs_tab_enabled_features">Статус увімкнених функцій</string>
|
<string name="susfs_tab_enabled_features">Статус увімкнених функцій</string>
|
||||||
<!-- SuSFS Path Management -->
|
<!-- SuSFS Path Management -->
|
||||||
<string name="susfs_add_sus_path">Додати шлях SUS</string>
|
<string name="susfs_add_sus_path">Додати шлях SUS</string>
|
||||||
<string name="susfs_add_try_umount">Додати спробу відмонтування</string>
|
|
||||||
<string name="susfs_sus_path_added_success">Шлях SUS успішно додано</string>
|
<string name="susfs_sus_path_added_success">Шлях SUS успішно додано</string>
|
||||||
<string name="susfs_path_not_found_error">Помилка: шлях не знайдено</string>
|
<string name="susfs_path_not_found_error">Помилка: шлях не знайдено</string>
|
||||||
<string name="susfs_path_label">Шлях</string>
|
<string name="susfs_path_label">Шлях</string>
|
||||||
<string name="susfs_path_placeholder">напр.: /system/addon.d</string>
|
<string name="susfs_path_placeholder">напр.: /system/addon.d</string>
|
||||||
<string name="susfs_no_paths_configured">Немає налаштованих шляхів SUS</string>
|
<string name="susfs_no_paths_configured">Немає налаштованих шляхів SUS</string>
|
||||||
<string name="susfs_no_umounts_configured">Немає налаштованих спроб відмонтування</string>
|
|
||||||
<!-- SuSFS Umount Mode -->
|
<!-- SuSFS Umount Mode -->
|
||||||
<string name="susfs_umount_mode_label">Режим відмонтування</string>
|
|
||||||
<string name="susfs_umount_mode_normal">Звичайне відмонтування (0)</string>
|
|
||||||
<string name="susfs_umount_mode_detach">Від\'єднане відмонтування (1)</string>
|
|
||||||
<string name="susfs_umount_mode_normal_short">Звичайний</string>
|
|
||||||
<string name="susfs_umount_mode_detach_short">Від\'єднаний</string>
|
|
||||||
<string name="susfs_umount_mode_display">Режим: %1$s (%2$s)</string>
|
|
||||||
<string name="susfs_try_umount_added_success">Шлях для спроби відмонтування успішно додано: %s</string>
|
|
||||||
<string name="susfs_try_umount_added_saved">Спроба збереження шляху відмонтування успішна: %s</string>
|
|
||||||
<!-- SuSFS Run Umount -->
|
<!-- SuSFS Run Umount -->
|
||||||
<!-- SuSFS Reset Categories -->
|
<!-- SuSFS Reset Categories -->
|
||||||
<string name="susfs_reset_paths_title">Скинути шляхи SUS</string>
|
<string name="susfs_reset_paths_title">Скинути шляхи SUS</string>
|
||||||
<string name="susfs_reset_paths_message">Це видалить усі конфігурації шляхів SUS. Ви впевнені, що хочете продовжити?</string>
|
<string name="susfs_reset_paths_message">Це видалить усі конфігурації шляхів SUS. Ви впевнені, що хочете продовжити?</string>
|
||||||
<string name="susfs_reset_umounts_title">Скинути спроби відмонтування</string>
|
|
||||||
<string name="susfs_reset_umounts_message">Це видалить усі конфігурації спроб відмонтування. Ви впевнені, що хочете продовжити?</string>
|
|
||||||
<string name="susfs_reset_path_title">Скинути налаштування шляхів</string>
|
<string name="susfs_reset_path_title">Скинути налаштування шляхів</string>
|
||||||
<!-- SuSFS Path Settings -->
|
<!-- SuSFS Path Settings -->
|
||||||
<string name="susfs_android_data_path_label">Шлях до Android Data</string>
|
<string name="susfs_android_data_path_label">Шлях до Android Data</string>
|
||||||
@@ -417,7 +404,6 @@
|
|||||||
<string name="susfs_feature_disabled">Вимкнено</string>
|
<string name="susfs_feature_disabled">Вимкнено</string>
|
||||||
<!-- Feature Labels -->
|
<!-- Feature Labels -->
|
||||||
<string name="sus_path_feature_label">Підтримка шляхів SUS</string>
|
<string name="sus_path_feature_label">Підтримка шляхів SUS</string>
|
||||||
<string name="try_umount_feature_label">Підтримка спроб відмонтування</string>
|
|
||||||
<string name="spoof_uname_feature_label">Підтримка підміни uname</string>
|
<string name="spoof_uname_feature_label">Підтримка підміни uname</string>
|
||||||
<string name="spoof_cmdline_feature_label">Підміна Cmdline/Bootconfig</string>
|
<string name="spoof_cmdline_feature_label">Підміна Cmdline/Bootconfig</string>
|
||||||
<string name="open_redirect_feature_label">Підтримка Open Redirect</string>
|
<string name="open_redirect_feature_label">Підтримка Open Redirect</string>
|
||||||
|
|||||||
@@ -378,33 +378,20 @@
|
|||||||
<!-- SuSFS Tab Titles -->
|
<!-- SuSFS Tab Titles -->
|
||||||
<string name="susfs_tab_basic_settings">Cài đặt cơ bản</string>
|
<string name="susfs_tab_basic_settings">Cài đặt cơ bản</string>
|
||||||
<string name="susfs_tab_sus_paths">Đường dẫn SuS</string>
|
<string name="susfs_tab_sus_paths">Đường dẫn SuS</string>
|
||||||
<string name="susfs_tab_try_umount">Try Umount</string>
|
|
||||||
<string name="susfs_tab_path_settings">Cài đặt Đường dẫn</string>
|
<string name="susfs_tab_path_settings">Cài đặt Đường dẫn</string>
|
||||||
<string name="susfs_tab_enabled_features">Trạng thái tính năng</string>
|
<string name="susfs_tab_enabled_features">Trạng thái tính năng</string>
|
||||||
<!-- SuSFS Path Management -->
|
<!-- SuSFS Path Management -->
|
||||||
<string name="susfs_add_sus_path">Thêm Đường dẫn SuS</string>
|
<string name="susfs_add_sus_path">Thêm Đường dẫn SuS</string>
|
||||||
<string name="susfs_add_try_umount">Thêm Try Umount</string>
|
|
||||||
<string name="susfs_sus_path_added_success">Đường dẫn SuS đã được thêm thành công</string>
|
<string name="susfs_sus_path_added_success">Đường dẫn SuS đã được thêm thành công</string>
|
||||||
<string name="susfs_path_not_found_error">Lỗi không tìm thấy đường dẫn</string>
|
<string name="susfs_path_not_found_error">Lỗi không tìm thấy đường dẫn</string>
|
||||||
<string name="susfs_path_label">Đường dẫn</string>
|
<string name="susfs_path_label">Đường dẫn</string>
|
||||||
<string name="susfs_path_placeholder">Ví dụ: /system/addon.d</string>
|
<string name="susfs_path_placeholder">Ví dụ: /system/addon.d</string>
|
||||||
<string name="susfs_no_paths_configured">Không có Đường dẫn SuS nào được cấu hình</string>
|
<string name="susfs_no_paths_configured">Không có Đường dẫn SuS nào được cấu hình</string>
|
||||||
<string name="susfs_no_umounts_configured">Không có Try Umount nào được cấu hình</string>
|
|
||||||
<!-- SuSFS Umount Mode -->
|
<!-- SuSFS Umount Mode -->
|
||||||
<string name="susfs_umount_mode_label">Chế độ Umount</string>
|
|
||||||
<string name="susfs_umount_mode_normal">Normal Umount (0)</string>
|
|
||||||
<string name="susfs_umount_mode_detach">Detach Umount (1)</string>
|
|
||||||
<string name="susfs_umount_mode_normal_short">Normal</string>
|
|
||||||
<string name="susfs_umount_mode_detach_short">Detach</string>
|
|
||||||
<string name="susfs_umount_mode_display">Chế độ: %1$s (%2$s)</string>
|
|
||||||
<string name="susfs_try_umount_added_success">Đường dẫn Try Umount đã thêm thành công: %s</string>
|
|
||||||
<string name="susfs_try_umount_added_saved">Đường dẫn Try Umount đã lưu thành công: %s</string>
|
|
||||||
<!-- SuSFS Run Umount -->
|
<!-- SuSFS Run Umount -->
|
||||||
<!-- SuSFS Reset Categories -->
|
<!-- SuSFS Reset Categories -->
|
||||||
<string name="susfs_reset_paths_title">Đặt lại Đường dẫn SuS</string>
|
<string name="susfs_reset_paths_title">Đặt lại Đường dẫn SuS</string>
|
||||||
<string name="susfs_reset_paths_message">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?</string>
|
<string name="susfs_reset_paths_message">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?</string>
|
||||||
<string name="susfs_reset_umounts_title">Đặt lại Try Umount</string>
|
|
||||||
<string name="susfs_reset_umounts_message">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?</string>
|
|
||||||
<string name="susfs_reset_path_title">Reset Cài đặt Đường dẫn</string>
|
<string name="susfs_reset_path_title">Reset Cài đặt Đường dẫn</string>
|
||||||
<!-- SuSFS Path Settings -->
|
<!-- SuSFS Path Settings -->
|
||||||
<string name="susfs_android_data_path_label">Đường dẫn Android Data</string>
|
<string name="susfs_android_data_path_label">Đường dẫn Android Data</string>
|
||||||
@@ -418,7 +405,6 @@
|
|||||||
<string name="susfs_feature_disabled">Đã tắt</string>
|
<string name="susfs_feature_disabled">Đã tắt</string>
|
||||||
<!-- Feature Labels -->
|
<!-- Feature Labels -->
|
||||||
<string name="sus_path_feature_label">Hỗ trợ Đường dẫn SuS</string>
|
<string name="sus_path_feature_label">Hỗ trợ Đường dẫn SuS</string>
|
||||||
<string name="try_umount_feature_label">Hỗ trợ Try Umount</string>
|
|
||||||
<string name="spoof_uname_feature_label">Hỗ trợ giả mạo Uname</string>
|
<string name="spoof_uname_feature_label">Hỗ trợ giả mạo Uname</string>
|
||||||
<string name="spoof_cmdline_feature_label">Giả mạo Cmdline/Bootconfig</string>
|
<string name="spoof_cmdline_feature_label">Giả mạo Cmdline/Bootconfig</string>
|
||||||
<string name="open_redirect_feature_label">Mở hỗ trợ chuyển hướng</string>
|
<string name="open_redirect_feature_label">Mở hỗ trợ chuyển hướng</string>
|
||||||
@@ -520,7 +506,6 @@
|
|||||||
<string name="cleanup_residue">Dọn rác</string>
|
<string name="cleanup_residue">Dọn rác</string>
|
||||||
<string name="cleanup_residue_description">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)</string>
|
<string name="cleanup_residue_description">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)</string>
|
||||||
<string name="susfs_edit_sus_path">Chỉnh sửa Đường dẫn SuS</string>
|
<string name="susfs_edit_sus_path">Chỉnh sửa Đường dẫn SuS</string>
|
||||||
<string name="susfs_edit_try_umount">Chỉnh sửa Try Umount</string>
|
|
||||||
<string name="edit_kstat_statically_title">Chỉnh sửa cấu hình Kstat tĩnh</string>
|
<string name="edit_kstat_statically_title">Chỉnh sửa cấu hình Kstat tĩnh</string>
|
||||||
<string name="edit_kstat_path_title">Chỉnh sửa Đường dẫn Kstat</string>
|
<string name="edit_kstat_path_title">Chỉnh sửa Đường dẫn Kstat</string>
|
||||||
<string name="susfs_save">Lưu</string>
|
<string name="susfs_save">Lưu</string>
|
||||||
|
|||||||
@@ -396,33 +396,20 @@
|
|||||||
<!-- SuSFS Tab Titles -->
|
<!-- SuSFS Tab Titles -->
|
||||||
<string name="susfs_tab_basic_settings">基本设置</string>
|
<string name="susfs_tab_basic_settings">基本设置</string>
|
||||||
<string name="susfs_tab_sus_paths">SuS 路径</string>
|
<string name="susfs_tab_sus_paths">SuS 路径</string>
|
||||||
<string name="susfs_tab_try_umount">尝试卸载</string>
|
|
||||||
<string name="susfs_tab_path_settings">路径设置</string>
|
<string name="susfs_tab_path_settings">路径设置</string>
|
||||||
<string name="susfs_tab_enabled_features">启用功能状态</string>
|
<string name="susfs_tab_enabled_features">启用功能状态</string>
|
||||||
<!-- SuSFS Path Management -->
|
<!-- SuSFS Path Management -->
|
||||||
<string name="susfs_add_sus_path">添加 SuS 路径</string>
|
<string name="susfs_add_sus_path">添加 SuS 路径</string>
|
||||||
<string name="susfs_add_try_umount">添加尝试卸载</string>
|
|
||||||
<string name="susfs_sus_path_added_success">SuS 路径添加成功</string>
|
<string name="susfs_sus_path_added_success">SuS 路径添加成功</string>
|
||||||
<string name="susfs_path_not_found_error">路径未找到错误</string>
|
<string name="susfs_path_not_found_error">路径未找到错误</string>
|
||||||
<string name="susfs_path_label">路径</string>
|
<string name="susfs_path_label">路径</string>
|
||||||
<string name="susfs_path_placeholder">例如: /system/addon.d</string>
|
<string name="susfs_path_placeholder">例如: /system/addon.d</string>
|
||||||
<string name="susfs_no_paths_configured">暂无 SuS 路径配置</string>
|
<string name="susfs_no_paths_configured">暂无 SuS 路径配置</string>
|
||||||
<string name="susfs_no_umounts_configured">暂无尝试卸载配置</string>
|
|
||||||
<!-- SuSFS Umount Mode -->
|
<!-- SuSFS Umount Mode -->
|
||||||
<string name="susfs_umount_mode_label">卸载模式</string>
|
|
||||||
<string name="susfs_umount_mode_normal">普通卸载(0)</string>
|
|
||||||
<string name="susfs_umount_mode_detach">分离卸载(1)</string>
|
|
||||||
<string name="susfs_umount_mode_normal_short">普通</string>
|
|
||||||
<string name="susfs_umount_mode_detach_short">分离</string>
|
|
||||||
<string name="susfs_umount_mode_display">模式: %1$s (%2$s)</string>
|
|
||||||
<string name="susfs_try_umount_added_success">尝试 umount 路径添加成功: %s</string>
|
|
||||||
<string name="susfs_try_umount_added_saved">尝试 umount 路径保存成功: %s</string>
|
|
||||||
<!-- SuSFS Run Umount -->
|
<!-- SuSFS Run Umount -->
|
||||||
<!-- SuSFS Reset Categories -->
|
<!-- SuSFS Reset Categories -->
|
||||||
<string name="susfs_reset_paths_title">重置 SuS 路径</string>
|
<string name="susfs_reset_paths_title">重置 SuS 路径</string>
|
||||||
<string name="susfs_reset_paths_message">这将清除所有 SuS 路径配置,确定要继续吗?</string>
|
<string name="susfs_reset_paths_message">这将清除所有 SuS 路径配置,确定要继续吗?</string>
|
||||||
<string name="susfs_reset_umounts_title">重置尝试卸载</string>
|
|
||||||
<string name="susfs_reset_umounts_message">这将清除所有尝试卸载配置,确定要继续吗?</string>
|
|
||||||
<string name="susfs_reset_path_title">重置路径设置</string>
|
<string name="susfs_reset_path_title">重置路径设置</string>
|
||||||
<!-- SuSFS Path Settings -->
|
<!-- SuSFS Path Settings -->
|
||||||
<string name="susfs_android_data_path_label">Android Data 路径</string>
|
<string name="susfs_android_data_path_label">Android Data 路径</string>
|
||||||
@@ -436,7 +423,6 @@
|
|||||||
<string name="susfs_feature_disabled">已禁用</string>
|
<string name="susfs_feature_disabled">已禁用</string>
|
||||||
<!-- Feature Labels -->
|
<!-- Feature Labels -->
|
||||||
<string name="sus_path_feature_label">SuS 路径支持</string>
|
<string name="sus_path_feature_label">SuS 路径支持</string>
|
||||||
<string name="try_umount_feature_label">尝试卸载支持</string>
|
|
||||||
<string name="spoof_uname_feature_label">欺骗 uname 支持</string>
|
<string name="spoof_uname_feature_label">欺骗 uname 支持</string>
|
||||||
<string name="spoof_cmdline_feature_label">欺骗 Cmdline/Bootconfig</string>
|
<string name="spoof_cmdline_feature_label">欺骗 Cmdline/Bootconfig</string>
|
||||||
<string name="open_redirect_feature_label">开放重定向支持</string>
|
<string name="open_redirect_feature_label">开放重定向支持</string>
|
||||||
@@ -538,7 +524,6 @@
|
|||||||
<string name="cleanup_residue">清理工具残留</string>
|
<string name="cleanup_residue">清理工具残留</string>
|
||||||
<string name="cleanup_residue_description">清理各种模块以及工具的残留文件和目录(可能会误删导致丢失以及无法启动,谨慎使用)</string>
|
<string name="cleanup_residue_description">清理各种模块以及工具的残留文件和目录(可能会误删导致丢失以及无法启动,谨慎使用)</string>
|
||||||
<string name="susfs_edit_sus_path">编辑 SuS 路径</string>
|
<string name="susfs_edit_sus_path">编辑 SuS 路径</string>
|
||||||
<string name="susfs_edit_try_umount">编辑尝试卸载</string>
|
|
||||||
<string name="edit_kstat_statically_title">编辑 Kstat 静态配置</string>
|
<string name="edit_kstat_statically_title">编辑 Kstat 静态配置</string>
|
||||||
<string name="edit_kstat_path_title">编辑 Kstat 路径</string>
|
<string name="edit_kstat_path_title">编辑 Kstat 路径</string>
|
||||||
<string name="susfs_save">保存</string>
|
<string name="susfs_save">保存</string>
|
||||||
|
|||||||
@@ -376,33 +376,20 @@
|
|||||||
<!-- SuSFS Tab Titles -->
|
<!-- SuSFS Tab Titles -->
|
||||||
<string name="susfs_tab_basic_settings">基本配置</string>
|
<string name="susfs_tab_basic_settings">基本配置</string>
|
||||||
<string name="susfs_tab_sus_paths">SuS 路徑</string>
|
<string name="susfs_tab_sus_paths">SuS 路徑</string>
|
||||||
<string name="susfs_tab_try_umount">嘗試卸載</string>
|
|
||||||
<string name="susfs_tab_path_settings">路徑配置</string>
|
<string name="susfs_tab_path_settings">路徑配置</string>
|
||||||
<string name="susfs_tab_enabled_features">啟用功能狀態</string>
|
<string name="susfs_tab_enabled_features">啟用功能狀態</string>
|
||||||
<!-- SuSFS Path Management -->
|
<!-- SuSFS Path Management -->
|
||||||
<string name="susfs_add_sus_path">添加 SuS 路徑</string>
|
<string name="susfs_add_sus_path">添加 SuS 路徑</string>
|
||||||
<string name="susfs_add_try_umount">嘗試添加卸載</string>
|
|
||||||
<string name="susfs_sus_path_added_success">SuS 路徑添加成功</string>
|
<string name="susfs_sus_path_added_success">SuS 路徑添加成功</string>
|
||||||
<string name="susfs_path_not_found_error">錯誤冇此找到路徑</string>
|
<string name="susfs_path_not_found_error">錯誤冇此找到路徑</string>
|
||||||
<string name="susfs_path_label">路徑</string>
|
<string name="susfs_path_label">路徑</string>
|
||||||
<string name="susfs_path_placeholder">例如: /system/addon.d</string>
|
<string name="susfs_path_placeholder">例如: /system/addon.d</string>
|
||||||
<string name="susfs_no_paths_configured">暫冇 SuS 路徑配置</string>
|
<string name="susfs_no_paths_configured">暫冇 SuS 路徑配置</string>
|
||||||
<string name="susfs_no_umounts_configured">暫冇嘗試卸載配置</string>
|
|
||||||
<!-- SuSFS Umount Mode -->
|
<!-- SuSFS Umount Mode -->
|
||||||
<string name="susfs_umount_mode_label">卸載模式</string>
|
|
||||||
<string name="susfs_umount_mode_normal">普通卸載 (0)</string>
|
|
||||||
<string name="susfs_umount_mode_detach">分離卸載 (1)</string>
|
|
||||||
<string name="susfs_umount_mode_normal_short">普通</string>
|
|
||||||
<string name="susfs_umount_mode_detach_short">分離</string>
|
|
||||||
<string name="susfs_umount_mode_display">模式: %1$s (%2$s)</string>
|
|
||||||
<string name="susfs_try_umount_added_success">嘗試 umount 路徑添加成功: %s</string>
|
|
||||||
<string name="susfs_try_umount_added_saved">嘗試 umount 路徑存儲成功: %s</string>
|
|
||||||
<!-- SuSFS Run Umount -->
|
<!-- SuSFS Run Umount -->
|
||||||
<!-- SuSFS Reset Categories -->
|
<!-- SuSFS Reset Categories -->
|
||||||
<string name="susfs_reset_paths_title">重置 SuS 路徑</string>
|
<string name="susfs_reset_paths_title">重置 SuS 路徑</string>
|
||||||
<string name="susfs_reset_paths_message">這將清除所有 SuS 路徑配置,確定要繼續嗎?</string>
|
<string name="susfs_reset_paths_message">這將清除所有 SuS 路徑配置,確定要繼續嗎?</string>
|
||||||
<string name="susfs_reset_umounts_title">重置嘗試卸載</string>
|
|
||||||
<string name="susfs_reset_umounts_message">這將清除所有嘗試卸載配置,確定要繼續嗎?</string>
|
|
||||||
<string name="susfs_reset_path_title">重置路徑配置</string>
|
<string name="susfs_reset_path_title">重置路徑配置</string>
|
||||||
<!-- SuSFS Path Settings -->
|
<!-- SuSFS Path Settings -->
|
||||||
<string name="susfs_android_data_path_label">Android Data 路徑</string>
|
<string name="susfs_android_data_path_label">Android Data 路徑</string>
|
||||||
@@ -416,7 +403,6 @@
|
|||||||
<string name="susfs_feature_disabled">已禁用</string>
|
<string name="susfs_feature_disabled">已禁用</string>
|
||||||
<!-- Feature Labels -->
|
<!-- Feature Labels -->
|
||||||
<string name="sus_path_feature_label">SuS 路徑支援</string>
|
<string name="sus_path_feature_label">SuS 路徑支援</string>
|
||||||
<string name="try_umount_feature_label">嘗試卸載支援</string>
|
|
||||||
<string name="spoof_uname_feature_label">欺騙 uname 支援</string>
|
<string name="spoof_uname_feature_label">欺騙 uname 支援</string>
|
||||||
<string name="spoof_cmdline_feature_label">欺騙 Cmdline/Bootconfig</string>
|
<string name="spoof_cmdline_feature_label">欺騙 Cmdline/Bootconfig</string>
|
||||||
<string name="open_redirect_feature_label">開放重定向支援</string>
|
<string name="open_redirect_feature_label">開放重定向支援</string>
|
||||||
@@ -518,7 +504,6 @@
|
|||||||
<string name="cleanup_residue">清理工具殘留</string>
|
<string name="cleanup_residue">清理工具殘留</string>
|
||||||
<string name="cleanup_residue_description">清理各種模組以及工具嘅殘留檔案同目錄(可能會誤刪導致丟失以及無法啟動,謹慎使用)</string>
|
<string name="cleanup_residue_description">清理各種模組以及工具嘅殘留檔案同目錄(可能會誤刪導致丟失以及無法啟動,謹慎使用)</string>
|
||||||
<string name="susfs_edit_sus_path">編輯 SuS 路徑</string>
|
<string name="susfs_edit_sus_path">編輯 SuS 路徑</string>
|
||||||
<string name="susfs_edit_try_umount">編輯嘗試解除安裝</string>
|
|
||||||
<string name="edit_kstat_statically_title">編輯 Kstat 靜態配置</string>
|
<string name="edit_kstat_statically_title">編輯 Kstat 靜態配置</string>
|
||||||
<string name="edit_kstat_path_title">編輯 Kstat 路徑</string>
|
<string name="edit_kstat_path_title">編輯 Kstat 路徑</string>
|
||||||
<string name="susfs_save">儲存</string>
|
<string name="susfs_save">儲存</string>
|
||||||
|
|||||||
@@ -378,33 +378,20 @@
|
|||||||
<!-- SuSFS Tab Titles -->
|
<!-- SuSFS Tab Titles -->
|
||||||
<string name="susfs_tab_basic_settings">基本設定</string>
|
<string name="susfs_tab_basic_settings">基本設定</string>
|
||||||
<string name="susfs_tab_sus_paths">SuS 路徑</string>
|
<string name="susfs_tab_sus_paths">SuS 路徑</string>
|
||||||
<string name="susfs_tab_try_umount">嘗試卸載</string>
|
|
||||||
<string name="susfs_tab_path_settings">路徑設定</string>
|
<string name="susfs_tab_path_settings">路徑設定</string>
|
||||||
<string name="susfs_tab_enabled_features">啟用功能狀態</string>
|
<string name="susfs_tab_enabled_features">啟用功能狀態</string>
|
||||||
<!-- SuSFS Path Management -->
|
<!-- SuSFS Path Management -->
|
||||||
<string name="susfs_add_sus_path">新增 SuS 路徑</string>
|
<string name="susfs_add_sus_path">新增 SuS 路徑</string>
|
||||||
<string name="susfs_add_try_umount">新增嘗試卸載</string>
|
|
||||||
<string name="susfs_sus_path_added_success">成功添加 SuS 路径</string>
|
<string name="susfs_sus_path_added_success">成功添加 SuS 路径</string>
|
||||||
<string name="susfs_path_not_found_error">未找到路径</string>
|
<string name="susfs_path_not_found_error">未找到路径</string>
|
||||||
<string name="susfs_path_label">路徑</string>
|
<string name="susfs_path_label">路徑</string>
|
||||||
<string name="susfs_path_placeholder">例如:/system/addon.d</string>
|
<string name="susfs_path_placeholder">例如:/system/addon.d</string>
|
||||||
<string name="susfs_no_paths_configured">暫無 SuS 路徑設定</string>
|
<string name="susfs_no_paths_configured">暫無 SuS 路徑設定</string>
|
||||||
<string name="susfs_no_umounts_configured">暫無嘗試卸載設定</string>
|
|
||||||
<!-- SuSFS Umount Mode -->
|
<!-- SuSFS Umount Mode -->
|
||||||
<string name="susfs_umount_mode_label">卸載模式</string>
|
|
||||||
<string name="susfs_umount_mode_normal">一般卸載 (0)</string>
|
|
||||||
<string name="susfs_umount_mode_detach">分離卸載 (1)</string>
|
|
||||||
<string name="susfs_umount_mode_normal_short">一般</string>
|
|
||||||
<string name="susfs_umount_mode_detach_short">分離</string>
|
|
||||||
<string name="susfs_umount_mode_display">模式:%1$s (%2$s)</string>
|
|
||||||
<string name="susfs_try_umount_added_success">嘗試 umount 路徑新增成功: %s</string>
|
|
||||||
<string name="susfs_try_umount_added_saved">嘗試 umount 路徑儲存成功: %s</string>
|
|
||||||
<!-- SuSFS Run Umount -->
|
<!-- SuSFS Run Umount -->
|
||||||
<!-- SuSFS Reset Categories -->
|
<!-- SuSFS Reset Categories -->
|
||||||
<string name="susfs_reset_paths_title">重設 SuS 路徑</string>
|
<string name="susfs_reset_paths_title">重設 SuS 路徑</string>
|
||||||
<string name="susfs_reset_paths_message">這將清除所有 SuS 路徑設定,確定要繼續嗎?</string>
|
<string name="susfs_reset_paths_message">這將清除所有 SuS 路徑設定,確定要繼續嗎?</string>
|
||||||
<string name="susfs_reset_umounts_title">重設嘗試卸載</string>
|
|
||||||
<string name="susfs_reset_umounts_message">這將清除所有嘗試卸載設定,確定要繼續嗎?</string>
|
|
||||||
<string name="susfs_reset_path_title">重置路徑設定</string>
|
<string name="susfs_reset_path_title">重置路徑設定</string>
|
||||||
<!-- SuSFS Path Settings -->
|
<!-- SuSFS Path Settings -->
|
||||||
<string name="susfs_android_data_path_label">Android Data 路徑</string>
|
<string name="susfs_android_data_path_label">Android Data 路徑</string>
|
||||||
@@ -418,7 +405,6 @@
|
|||||||
<string name="susfs_feature_disabled">已停用</string>
|
<string name="susfs_feature_disabled">已停用</string>
|
||||||
<!-- Feature Labels -->
|
<!-- Feature Labels -->
|
||||||
<string name="sus_path_feature_label">SuS 路徑支援</string>
|
<string name="sus_path_feature_label">SuS 路徑支援</string>
|
||||||
<string name="try_umount_feature_label">嘗試卸載支援</string>
|
|
||||||
<string name="spoof_uname_feature_label">偽裝 uname 支援</string>
|
<string name="spoof_uname_feature_label">偽裝 uname 支援</string>
|
||||||
<string name="spoof_cmdline_feature_label">偽裝 Cmdline/Bootconfig</string>
|
<string name="spoof_cmdline_feature_label">偽裝 Cmdline/Bootconfig</string>
|
||||||
<string name="open_redirect_feature_label">開放重定向支援</string>
|
<string name="open_redirect_feature_label">開放重定向支援</string>
|
||||||
@@ -520,7 +506,6 @@
|
|||||||
<string name="cleanup_residue">清理工具殘留</string>
|
<string name="cleanup_residue">清理工具殘留</string>
|
||||||
<string name="cleanup_residue_description">清理各種模組以及工具的殘留檔案和目錄(可能會誤刪導致丟失以及無法啟動,謹慎使用)</string>
|
<string name="cleanup_residue_description">清理各種模組以及工具的殘留檔案和目錄(可能會誤刪導致丟失以及無法啟動,謹慎使用)</string>
|
||||||
<string name="susfs_edit_sus_path">編輯 SuS 路徑</string>
|
<string name="susfs_edit_sus_path">編輯 SuS 路徑</string>
|
||||||
<string name="susfs_edit_try_umount">編輯嘗試解除安裝</string>
|
|
||||||
<string name="edit_kstat_statically_title">編輯 Kstat 靜態配置</string>
|
<string name="edit_kstat_statically_title">編輯 Kstat 靜態配置</string>
|
||||||
<string name="edit_kstat_path_title">編輯 Kstat 路徑</string>
|
<string name="edit_kstat_path_title">編輯 Kstat 路徑</string>
|
||||||
<string name="susfs_save">儲存</string>
|
<string name="susfs_save">儲存</string>
|
||||||
|
|||||||
@@ -399,33 +399,20 @@
|
|||||||
<!-- SuSFS Tab Titles -->
|
<!-- SuSFS Tab Titles -->
|
||||||
<string name="susfs_tab_basic_settings">Basic Settings</string>
|
<string name="susfs_tab_basic_settings">Basic Settings</string>
|
||||||
<string name="susfs_tab_sus_paths">SUS Paths</string>
|
<string name="susfs_tab_sus_paths">SUS Paths</string>
|
||||||
<string name="susfs_tab_try_umount">Try Umount</string>
|
|
||||||
<string name="susfs_tab_path_settings">Path Settings</string>
|
<string name="susfs_tab_path_settings">Path Settings</string>
|
||||||
<string name="susfs_tab_enabled_features">Enabled Features Status</string>
|
<string name="susfs_tab_enabled_features">Enabled Features Status</string>
|
||||||
<!-- SuSFS Path Management -->
|
<!-- SuSFS Path Management -->
|
||||||
<string name="susfs_add_sus_path">Add SUS Path</string>
|
<string name="susfs_add_sus_path">Add SUS Path</string>
|
||||||
<string name="susfs_add_try_umount">Add Try Umount</string>
|
|
||||||
<string name="susfs_sus_path_added_success">SUS path added successfully</string>
|
<string name="susfs_sus_path_added_success">SUS path added successfully</string>
|
||||||
<string name="susfs_path_not_found_error">Path not found error</string>
|
<string name="susfs_path_not_found_error">Path not found error</string>
|
||||||
<string name="susfs_path_label">Path</string>
|
<string name="susfs_path_label">Path</string>
|
||||||
<string name="susfs_path_placeholder">e.g.: /system/addon.d</string>
|
<string name="susfs_path_placeholder">e.g.: /system/addon.d</string>
|
||||||
<string name="susfs_no_paths_configured">No SUS paths configured</string>
|
<string name="susfs_no_paths_configured">No SUS paths configured</string>
|
||||||
<string name="susfs_no_umounts_configured">No try umount configured</string>
|
|
||||||
<!-- SuSFS Umount Mode -->
|
<!-- SuSFS Umount Mode -->
|
||||||
<string name="susfs_umount_mode_label">Umount Mode</string>
|
|
||||||
<string name="susfs_umount_mode_normal">Normal Umount (0)</string>
|
|
||||||
<string name="susfs_umount_mode_detach">Detach Umount (1)</string>
|
|
||||||
<string name="susfs_umount_mode_normal_short">Normal</string>
|
|
||||||
<string name="susfs_umount_mode_detach_short">Detach</string>
|
|
||||||
<string name="susfs_umount_mode_display">Mode: %1$s (%2$s)</string>
|
|
||||||
<string name="susfs_try_umount_added_success">Try to umount path added successfully: %s</string>
|
|
||||||
<string name="susfs_try_umount_added_saved">Attempted umount path save succeeded: %s</string>
|
|
||||||
<!-- SuSFS Run Umount -->
|
<!-- SuSFS Run Umount -->
|
||||||
<!-- SuSFS Reset Categories -->
|
<!-- SuSFS Reset Categories -->
|
||||||
<string name="susfs_reset_paths_title">Reset SUS Paths</string>
|
<string name="susfs_reset_paths_title">Reset SUS Paths</string>
|
||||||
<string name="susfs_reset_paths_message">This will clear all SUS path configurations. Are you sure you want to continue?</string>
|
<string name="susfs_reset_paths_message">This will clear all SUS path configurations. Are you sure you want to continue?</string>
|
||||||
<string name="susfs_reset_umounts_title">Reset Try Umount</string>
|
|
||||||
<string name="susfs_reset_umounts_message">This will clear all try umount configurations. Are you sure you want to continue?</string>
|
|
||||||
<string name="susfs_reset_path_title">Reset Path Settings</string>
|
<string name="susfs_reset_path_title">Reset Path Settings</string>
|
||||||
<!-- SuSFS Path Settings -->
|
<!-- SuSFS Path Settings -->
|
||||||
<string name="susfs_android_data_path_label">Android Data Path</string>
|
<string name="susfs_android_data_path_label">Android Data Path</string>
|
||||||
@@ -439,7 +426,6 @@
|
|||||||
<string name="susfs_feature_disabled">Disabled</string>
|
<string name="susfs_feature_disabled">Disabled</string>
|
||||||
<!-- Feature Labels -->
|
<!-- Feature Labels -->
|
||||||
<string name="sus_path_feature_label">SUS Path Support</string>
|
<string name="sus_path_feature_label">SUS Path Support</string>
|
||||||
<string name="try_umount_feature_label">Try Umount Support</string>
|
|
||||||
<string name="spoof_uname_feature_label">Spoof uname Support</string>
|
<string name="spoof_uname_feature_label">Spoof uname Support</string>
|
||||||
<string name="spoof_cmdline_feature_label">Spoof Cmdline/Bootconfig</string>
|
<string name="spoof_cmdline_feature_label">Spoof Cmdline/Bootconfig</string>
|
||||||
<string name="open_redirect_feature_label">Open Redirect Support</string>
|
<string name="open_redirect_feature_label">Open Redirect Support</string>
|
||||||
@@ -541,7 +527,6 @@
|
|||||||
<string name="cleanup_residue">Cleanup Residue</string>
|
<string name="cleanup_residue">Cleanup Residue</string>
|
||||||
<string name="cleanup_residue_description">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)</string>
|
<string name="cleanup_residue_description">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)</string>
|
||||||
<string name="susfs_edit_sus_path">Edit SUS Path</string>
|
<string name="susfs_edit_sus_path">Edit SUS Path</string>
|
||||||
<string name="susfs_edit_try_umount">Edit Try Umount</string>
|
|
||||||
<string name="edit_kstat_statically_title">Edit Kstat Static Configuration</string>
|
<string name="edit_kstat_statically_title">Edit Kstat Static Configuration</string>
|
||||||
<string name="edit_kstat_path_title">Edit Kstat Path</string>
|
<string name="edit_kstat_path_title">Edit Kstat Path</string>
|
||||||
<string name="susfs_save">Save</string>
|
<string name="susfs_save">Save</string>
|
||||||
|
|||||||
Reference in New Issue
Block a user