diff --git a/manager/app/src/main/assets/ksu_susfs_1.5.10 b/manager/app/src/main/assets/ksu_susfs_1.5.10 index d05b7367..b627a1e5 100644 Binary files a/manager/app/src/main/assets/ksu_susfs_1.5.10 and b/manager/app/src/main/assets/ksu_susfs_1.5.10 differ diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/component/SuSFSConfigTabs.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/component/SuSFSConfigTabs.kt index 6e5092aa..a8d94b3d 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/component/SuSFSConfigTabs.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/component/SuSFSConfigTabs.kt @@ -392,16 +392,72 @@ fun SusMountsContent( @Composable fun TryUmountContent( tryUmounts: Set, + 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( diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/SuSFSConfig.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/SuSFSConfig.kt index a06927b7..e645aeee 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/SuSFSConfig.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/SuSFSConfig.kt @@ -101,6 +101,8 @@ fun SuSFSConfigScreen( // SUS挂载隐藏控制状态 var hideSusMountsForAllProcs by remember { mutableStateOf(true) } + var umountForZygoteIsoService by remember { mutableStateOf(false) } + // Kstat配置相关状态 var kstatConfigs by remember { mutableStateOf(emptySet()) } var addKstatPaths by remember { mutableStateOf(emptySet()) } @@ -254,6 +256,7 @@ fun SuSFSConfigScreen( hideSusMountsForAllProcs = SuSFSManager.getHideSusMountsForAllProcs(context) enableHideBl = SuSFSManager.getEnableHideBl(context) enableCleanupResidue = SuSFSManager.getEnableCleanupResidue(context) + umountForZygoteIsoService = SuSFSManager.getUmountForZygoteIsoService(context) enableAvcLogSpoofing = SuSFSManager.getEnableAvcLogSpoofing(context) loadSlotInfo() @@ -424,6 +427,7 @@ fun SuSFSConfigScreen( hideSusMountsForAllProcs = SuSFSManager.getHideSusMountsForAllProcs(context) enableHideBl = SuSFSManager.getEnableHideBl(context) enableCleanupResidue = SuSFSManager.getEnableCleanupResidue(context) + umountForZygoteIsoService = SuSFSManager.getUmountForZygoteIsoService(context) enableAvcLogSpoofing = SuSFSManager.getEnableAvcLogSpoofing(context) } isLoading = false @@ -1259,6 +1263,7 @@ fun SuSFSConfigScreen( SuSFSTab.TRY_UMOUNT -> { TryUmountContent( tryUmounts = tryUmounts, + umountForZygoteIsoService = umountForZygoteIsoService, isLoading = isLoading, onAddUmount = { showAddUmountDialog = true }, onRemoveUmount = { umountEntry -> @@ -1273,6 +1278,16 @@ fun SuSFSConfigScreen( onEditUmount = { umountEntry -> editingUmount = umountEntry showAddUmountDialog = true + }, + onToggleUmountForZygoteIsoService = { enabled -> + coroutineScope.launch { + isLoading = true + val success = SuSFSManager.setUmountForZygoteIsoService(context, enabled) + if (success) { + umountForZygoteIsoService = enabled + } + isLoading = false + } } ) } diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/util/SuSFSManager.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/util/SuSFSManager.kt index 167015c8..30e24d14 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/util/SuSFSManager.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/util/SuSFSManager.kt @@ -48,6 +48,7 @@ object SuSFSManager { private const val KEY_HIDE_SUS_MOUNTS_FOR_ALL_PROCS = "hide_sus_mounts_for_all_procs" private const val KEY_ENABLE_CLEANUP_RESIDUE = "enable_cleanup_residue" private const val KEY_ENABLE_HIDE_BL = "enable_hide_bl" + private const val KEY_UMOUNT_FOR_ZYGOTE_ISO_SERVICE = "umount_for_zygote_iso_service" private const val KEY_ENABLE_AVC_LOG_SPOOFING = "enable_avc_log_spoofing" @@ -157,6 +158,7 @@ object SuSFSManager { val support158: Boolean, val enableHideBl: Boolean, val enableCleanupResidue: Boolean, + val umountForZygoteIsoService: Boolean, val enableAvcLogSpoofing: Boolean ) { /** @@ -266,6 +268,7 @@ object SuSFSManager { support158 = isSusVersion158(), enableHideBl = getEnableHideBl(context), enableCleanupResidue = getEnableCleanupResidue(context), + umountForZygoteIsoService = getUmountForZygoteIsoService(context), enableAvcLogSpoofing = getEnableAvcLogSpoofing(context) ) } @@ -329,6 +332,13 @@ object SuSFSManager { fun getEnableCleanupResidue(context: Context): Boolean = getPrefs(context).getBoolean(KEY_ENABLE_CLEANUP_RESIDUE, false) + // Zygote隔离服务卸载控制 + fun saveUmountForZygoteIsoService(context: Context, enabled: Boolean) = + getPrefs(context).edit { putBoolean(KEY_UMOUNT_FOR_ZYGOTE_ISO_SERVICE, enabled) } + + fun getUmountForZygoteIsoService(context: Context): Boolean = + getPrefs(context).getBoolean(KEY_UMOUNT_FOR_ZYGOTE_ISO_SERVICE, false) + // AVC日志欺骗配置 fun saveEnableAvcLogSpoofing(context: Context, enabled: Boolean) = getPrefs(context).edit { putBoolean(KEY_ENABLE_AVC_LOG_SPOOFING, enabled) } @@ -527,6 +537,7 @@ object SuSFSManager { KEY_HIDE_SUS_MOUNTS_FOR_ALL_PROCS to getHideSusMountsForAllProcs(context), KEY_ENABLE_HIDE_BL to getEnableHideBl(context), KEY_ENABLE_CLEANUP_RESIDUE to getEnableCleanupResidue(context), + KEY_UMOUNT_FOR_ZYGOTE_ISO_SERVICE to getUmountForZygoteIsoService(context), KEY_ENABLE_AVC_LOG_SPOOFING to getEnableAvcLogSpoofing(context), ) } @@ -1197,6 +1208,29 @@ object SuSFSManager { } } + // Zygote隔离服务卸载控制 + suspend fun setUmountForZygoteIsoService(context: Context, enabled: Boolean): Boolean { + if (!isSusVersion158()) { + return false + } + + val result = executeSusfsCommandWithOutput(context, "umount_for_zygote_iso_service ${if (enabled) 1 else 0}") + val success = result.isSuccess && result.output.isEmpty() + + if (success) { + saveUmountForZygoteIsoService(context, enabled) + if (isAutoStartEnabled(context)) updateMagiskModule(context) + showToast(context, if (enabled) + context.getString(R.string.umount_zygote_iso_service_enabled) + else + context.getString(R.string.umount_zygote_iso_service_disabled) + ) + } else { + showToast(context, context.getString(R.string.susfs_command_failed)) + } + return success + } + // 添加kstat配置 suspend fun addKstatStatically(context: Context, path: String, ino: String, dev: String, nlink: String, size: String, atime: String, atimeNsec: String, mtime: String, mtimeNsec: String, diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/util/SuSFSModuleScripts.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/util/SuSFSModuleScripts.kt index dc45682b..1cf9cf82 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/util/SuSFSModuleScripts.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/util/SuSFSModuleScripts.kt @@ -392,6 +392,8 @@ object ScriptGenerator { appendLine() } + generateUmountZygoteIsoServiceSection(config.umountForZygoteIsoService, config.support158) + // 添加AVC日志欺骗设置 generateAvcLogSpoofingSection(config.enableAvcLogSpoofing) @@ -399,6 +401,17 @@ object ScriptGenerator { } } + // 添加新的生成方法 + private fun StringBuilder.generateUmountZygoteIsoServiceSection(umountForZygoteIsoService: Boolean, support158: Boolean) { + if (support158) { + appendLine("# 设置Zygote隔离服务卸载状态") + val umountValue = if (umountForZygoteIsoService) 1 else 0 + appendLine("\"${'$'}SUSFS_BIN\" umount_for_zygote_iso_service $umountValue") + appendLine("echo \"$(get_current_time): Zygote隔离服务卸载设置为: ${if (umountForZygoteIsoService) "启用" else "禁用"}\" >> \"${'$'}LOG_FILE\"") + appendLine() + } + } + /** * 生成post-mount.sh脚本内容 */ diff --git a/manager/app/src/main/res/values-in/strings.xml b/manager/app/src/main/res/values-in/strings.xml index 315ef753..8887462e 100644 --- a/manager/app/src/main/res/values-in/strings.xml +++ b/manager/app/src/main/res/values-in/strings.xml @@ -552,6 +552,10 @@ Pembaruan konfigurasi Kstat Pembaruan jalur Kstat Pembaruan full clone Susfs + Lepas Layanan Isolasi Zygote + Aktifkan opsi ini untuk melepaskan titik pemasangan layanan isolasi Zygote saat sistem mulai + Lepas layanan isolasi Zygote diaktifkan + Lepas layanan isolasi Zygote dinonaktifkan Jalur Aplikasi Jalur lainnya Lainnya diff --git a/manager/app/src/main/res/values-ja/strings.xml b/manager/app/src/main/res/values-ja/strings.xml index d6491d24..1feec5cd 100644 --- a/manager/app/src/main/res/values-ja/strings.xml +++ b/manager/app/src/main/res/values-ja/strings.xml @@ -552,6 +552,10 @@ Kstat の構成を更新 Kstat のパスを更新 フルクローンの SuSFS を更新 + Zygote 分離サービスをアンマウント + このオプションを有効化すると、システムの起動時に Zygote 分離サービスのマウントポイントがアンマウントされます。 + Zygote 分離サービスのアンマウントが有効です + Zygote 分離サービスのアンマウントが無効です アプリのパス その他のパス その他 diff --git a/manager/app/src/main/res/values-ru/strings.xml b/manager/app/src/main/res/values-ru/strings.xml index 8c0271b4..0f84799c 100644 --- a/manager/app/src/main/res/values-ru/strings.xml +++ b/manager/app/src/main/res/values-ru/strings.xml @@ -552,6 +552,10 @@ Обновить конфиг Kstat Обновить путь Kstat Полное обновление клона SuSFS + Размонтировать сервис изоляции Zygote + Включите эту опцию, чтобы размонтировать точки монтирования Zygote при запуске системы + Размонтирование служб Zygote включено + Размонтирование служб Zygote выключено Путь к приложению Другие пути Другое diff --git a/manager/app/src/main/res/values-tr/strings.xml b/manager/app/src/main/res/values-tr/strings.xml index 0ee722cb..b513a103 100644 --- a/manager/app/src/main/res/values-tr/strings.xml +++ b/manager/app/src/main/res/values-tr/strings.xml @@ -550,6 +550,10 @@ Kstat yapılandırması güncellendi Kstat yolu güncellendi Susfs tam klon güncellemesi + Zygote İzolasyon Servisi Bağlantısını Kes + Sistem başlangıcında Zygote izolasyon servisi bağlama noktalarının bağlantısını kesmek için bu seçeneği etkinleştirin + Zygote izolasyon servisi bağlantı kesme etkinleştirildi + Zygote izolasyon servisi bağlantı kesme devre dışı bırakıldı Uygulama Yolu Diğer yollar Diğer diff --git a/manager/app/src/main/res/values-vi/strings.xml b/manager/app/src/main/res/values-vi/strings.xml index e2a3b00d..ba7b7d86 100644 --- a/manager/app/src/main/res/values-vi/strings.xml +++ b/manager/app/src/main/res/values-vi/strings.xml @@ -550,6 +550,10 @@ Cập nhật cấu hình Kstat Cập nhật Đường dẫn Kstat Cập nhật bản sao SuSFS đầy đủ + Umount dịch vụ cô lập Zygote + Umount các điểm dịch vụ cô lập Zygote khi khởi động hệ thống + Umount dịch vụ cô lập Zygote đã bật + Umount dịch vụ cô lập Zygote đã tắt Đường dẫn ứng dụng Đường dẫn khác Khác diff --git a/manager/app/src/main/res/values-zh-rCN/strings.xml b/manager/app/src/main/res/values-zh-rCN/strings.xml index ab412dfb..f05f6cbf 100644 --- a/manager/app/src/main/res/values-zh-rCN/strings.xml +++ b/manager/app/src/main/res/values-zh-rCN/strings.xml @@ -550,6 +550,10 @@ Kstat 配置更新 Kstat 路径更新 Susfs 完整克隆更新 + 卸载 Zygote 隔离服务 + 启用此选项将在系统启动时卸载 Zygote 隔离服务挂载点 + Zygote 隔离服务卸载已启用 + Zygote 隔离服务卸载已禁用 应用路径 其他路径 其他 diff --git a/manager/app/src/main/res/values-zh-rHK/strings.xml b/manager/app/src/main/res/values-zh-rHK/strings.xml index 8d18f778..f2faba62 100644 --- a/manager/app/src/main/res/values-zh-rHK/strings.xml +++ b/manager/app/src/main/res/values-zh-rHK/strings.xml @@ -547,6 +547,10 @@ Kstat 配置更新 Kstat 路徑更新 Susfs 完整克隆更新 + 解除安裝 Zygote 隔離服務 + 啟用此選項將喺系統啟動時解除安裝 Zygote 隔離服務掛載點 + Zygote 隔離服務解除安裝已啟用 + Zygote 隔離服務解除安裝已禁用 應用路徑 其他路徑 其他 diff --git a/manager/app/src/main/res/values-zh-rTW/strings.xml b/manager/app/src/main/res/values-zh-rTW/strings.xml index 64b3e9f9..7676aceb 100644 --- a/manager/app/src/main/res/values-zh-rTW/strings.xml +++ b/manager/app/src/main/res/values-zh-rTW/strings.xml @@ -550,6 +550,10 @@ Kstat 配置已更新 Kstat 路徑已更新 Susfs 完整複製更新 + 卸載 Zygote 隔離服務 + 啟用此選項將在系統啟動時卸載 Zygote 隔離服務掛載點 + Zygote 隔離服務卸載已啟用 + Zygote 隔離服務卸載已停用 應用路徑 其他路徑 其他 diff --git a/manager/app/src/main/res/values/strings.xml b/manager/app/src/main/res/values/strings.xml index d0d40f9d..e8cdabf7 100644 --- a/manager/app/src/main/res/values/strings.xml +++ b/manager/app/src/main/res/values/strings.xml @@ -552,6 +552,10 @@ Kstat config update Kstat path update Susfs update full clone + Unmount Zygote Isolation Service + Enable this option to unmount Zygote isolation service mount points at system startup + Zygote isolation service unmount enabled + Zygote isolation service unmount disabled Application Path Other paths Other