Revert "kernel: expose umount list to ioctl interface #2950"
This reverts commit 029ae8d389.
This commit is contained in:
@@ -43,6 +43,24 @@ static const struct ksu_feature_handler kernel_umount_handler = {
|
||||
.set_handler = kernel_umount_feature_set,
|
||||
};
|
||||
|
||||
static bool should_umount(struct path *path)
|
||||
{
|
||||
if (!path) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (current->nsproxy->mnt_ns == init_nsproxy.mnt_ns) {
|
||||
pr_info("ignore global mnt namespace process: %d\n", current_uid().val);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (path->mnt && path->mnt->mnt_sb && path->mnt->mnt_sb->s_type) {
|
||||
const char *fstype = path->mnt->mnt_sb->s_type->name;
|
||||
return strcmp(fstype, "overlay") == 0;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
extern int path_umount(struct path *path, int flags);
|
||||
|
||||
static void ksu_umount_mnt(struct path *path, int flags)
|
||||
@@ -53,7 +71,7 @@ static void ksu_umount_mnt(struct path *path, int flags)
|
||||
}
|
||||
}
|
||||
|
||||
void try_umount(const char *mnt, int flags)
|
||||
void try_umount(const char *mnt, bool check_mnt, int flags)
|
||||
{
|
||||
struct path path;
|
||||
int err = kern_path(mnt, 0, &path);
|
||||
@@ -67,6 +85,12 @@ void try_umount(const char *mnt, int flags)
|
||||
return;
|
||||
}
|
||||
|
||||
// we are only interest in some specific mounts
|
||||
if (check_mnt && !should_umount(&path)) {
|
||||
path_put(&path);
|
||||
return;
|
||||
}
|
||||
|
||||
ksu_umount_mnt(&path, flags);
|
||||
}
|
||||
|
||||
@@ -83,14 +107,8 @@ static void umount_tw_func(struct callback_head *cb)
|
||||
saved = override_creds(tw->old_cred);
|
||||
}
|
||||
|
||||
struct mount_entry *entry;
|
||||
down_read(&mount_list_lock);
|
||||
list_for_each_entry(entry, &mount_list, list) {
|
||||
pr_info("%s: unmounting: %s flags 0x%x\n", __func__, entry->umountable, entry->flags);
|
||||
try_umount(entry->umountable, entry->flags);
|
||||
}
|
||||
up_read(&mount_list_lock);
|
||||
|
||||
// fixme: use `collect_mounts` and `iterate_mount` to iterate all mountpoint and
|
||||
// filter the mountpoint whose target is `/data/adb`
|
||||
ksu_umount_manager_execute_all(tw->old_cred);
|
||||
|
||||
if (saved)
|
||||
|
||||
@@ -2,24 +2,13 @@
|
||||
#define __KSU_H_KERNEL_UMOUNT
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/rwsem.h>
|
||||
|
||||
void ksu_kernel_umount_init(void);
|
||||
void ksu_kernel_umount_exit(void);
|
||||
|
||||
void try_umount(const char *mnt, int flags);
|
||||
void try_umount(const char *mnt, bool check_mnt, int flags);
|
||||
|
||||
// Handler function to be called from setresuid hook
|
||||
int ksu_handle_umount(uid_t old_uid, uid_t new_uid);
|
||||
|
||||
// for the umount list
|
||||
struct mount_entry {
|
||||
char *umountable;
|
||||
unsigned int flags;
|
||||
struct list_head list;
|
||||
};
|
||||
extern struct list_head mount_list;
|
||||
extern struct rw_semaphore mount_list_lock;
|
||||
|
||||
#endif
|
||||
#endif
|
||||
@@ -18,7 +18,6 @@
|
||||
#include "feature.h"
|
||||
#include "klog.h" // IWYU pragma: keep
|
||||
#include "ksud.h"
|
||||
#include "kernel_umount.h"
|
||||
#include "manager.h"
|
||||
#include "selinux/selinux.h"
|
||||
#include "objsec.h"
|
||||
@@ -511,111 +510,6 @@ static int do_nuke_ext4_sysfs(void __user *arg)
|
||||
return nuke_ext4_sysfs(mnt);
|
||||
}
|
||||
|
||||
struct list_head mount_list = LIST_HEAD_INIT(mount_list);
|
||||
DECLARE_RWSEM(mount_list_lock);
|
||||
|
||||
static int add_try_umount(void __user *arg)
|
||||
{
|
||||
struct mount_entry *new_entry, *entry, *tmp;
|
||||
struct ksu_add_try_umount_cmd cmd;
|
||||
char buf[256] = {0};
|
||||
|
||||
if (copy_from_user(&cmd, arg, sizeof cmd))
|
||||
return -EFAULT;
|
||||
|
||||
switch (cmd.mode) {
|
||||
case KSU_UMOUNT_WIPE: {
|
||||
struct mount_entry *entry, *tmp;
|
||||
down_write(&mount_list_lock);
|
||||
list_for_each_entry_safe(entry, tmp, &mount_list, list) {
|
||||
pr_info("wipe_umount_list: removing entry: %s\n", entry->umountable);
|
||||
list_del(&entry->list);
|
||||
kfree(entry->umountable);
|
||||
kfree(entry);
|
||||
}
|
||||
up_write(&mount_list_lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
case KSU_UMOUNT_ADD: {
|
||||
long len = strncpy_from_user(buf, (const char __user *)cmd.arg, 256);
|
||||
if (len <= 0)
|
||||
return -EFAULT;
|
||||
|
||||
buf[sizeof(buf) - 1] = '\0';
|
||||
|
||||
new_entry = kzalloc(sizeof(*new_entry), GFP_KERNEL);
|
||||
if (!new_entry)
|
||||
return -ENOMEM;
|
||||
|
||||
new_entry->umountable = kstrdup(buf, GFP_KERNEL);
|
||||
if (!new_entry->umountable) {
|
||||
kfree(new_entry);
|
||||
return -1;
|
||||
}
|
||||
|
||||
down_write(&mount_list_lock);
|
||||
|
||||
// disallow dupes
|
||||
// if this gets too many, we can consider moving this whole task to a kthread
|
||||
list_for_each_entry(entry, &mount_list, list) {
|
||||
if (!strcmp(entry->umountable, buf)) {
|
||||
pr_info("cmd_add_try_umount: %s is already here!\n", buf);
|
||||
up_write(&mount_list_lock);
|
||||
kfree(new_entry->umountable);
|
||||
kfree(new_entry);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
// now check flags and add
|
||||
// this also serves as a null check
|
||||
if (cmd.flags)
|
||||
new_entry->flags = cmd.flags;
|
||||
else
|
||||
new_entry->flags = 0;
|
||||
|
||||
// debug
|
||||
list_add(&new_entry->list, &mount_list);
|
||||
up_write(&mount_list_lock);
|
||||
pr_info("cmd_add_try_umount: %s added!\n", buf);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// this is just strcmp'd wipe anyway
|
||||
case KSU_UMOUNT_DEL: {
|
||||
long len = strncpy_from_user(buf, (const char __user *)cmd.arg, sizeof(buf) - 1);
|
||||
if (len <= 0)
|
||||
return -EFAULT;
|
||||
|
||||
buf[sizeof(buf) - 1] = '\0';
|
||||
|
||||
down_write(&mount_list_lock);
|
||||
list_for_each_entry_safe(entry, tmp, &mount_list, list) {
|
||||
if (!strcmp(entry->umountable, buf)) {
|
||||
pr_info("cmd_add_try_umount: entry removed: %s\n", entry->umountable);
|
||||
list_del(&entry->list);
|
||||
kfree(entry->umountable);
|
||||
kfree(entry);
|
||||
}
|
||||
}
|
||||
up_write(&mount_list_lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
default: {
|
||||
pr_err("cmd_add_try_umount: invalid operation %u\n", cmd.mode);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
} // switch(cmd.mode)
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// 100. GET_FULL_VERSION - Get full version string
|
||||
static int do_get_full_version(void __user *arg)
|
||||
{
|
||||
@@ -827,7 +721,7 @@ static int do_umount_manager(void __user *arg)
|
||||
|
||||
switch (cmd.operation) {
|
||||
case UMOUNT_OP_ADD: {
|
||||
return ksu_umount_manager_add(cmd.path, cmd.flags, false);
|
||||
return ksu_umount_manager_add(cmd.path, cmd.check_mnt, cmd.flags, false);
|
||||
}
|
||||
case UMOUNT_OP_REMOVE: {
|
||||
return ksu_umount_manager_remove(cmd.path);
|
||||
@@ -864,7 +758,6 @@ static const struct ksu_ioctl_cmd_map ksu_ioctl_handlers[] = {
|
||||
{ .cmd = KSU_IOCTL_GET_WRAPPER_FD, .name = "GET_WRAPPER_FD", .handler = do_get_wrapper_fd, .perm_check = manager_or_root },
|
||||
{ .cmd = KSU_IOCTL_MANAGE_MARK, .name = "MANAGE_MARK", .handler = do_manage_mark, .perm_check = manager_or_root },
|
||||
{ .cmd = KSU_IOCTL_NUKE_EXT4_SYSFS, .name = "NUKE_EXT4_SYSFS", .handler = do_nuke_ext4_sysfs, .perm_check = manager_or_root },
|
||||
{ .cmd = KSU_IOCTL_ADD_TRY_UMOUNT, .name = "ADD_TRY_UMOUNT", .handler = add_try_umount, .perm_check = manager_or_root },
|
||||
{ .cmd = KSU_IOCTL_GET_FULL_VERSION,.name = "GET_FULL_VERSION", .handler = do_get_full_version, .perm_check = always_allow},
|
||||
{ .cmd = KSU_IOCTL_HOOK_TYPE,.name = "GET_HOOK_TYPE", .handler = do_get_hook_type, .perm_check = manager_or_root},
|
||||
{ .cmd = KSU_IOCTL_ENABLE_KPM, .name = "GET_ENABLE_KPM", .handler = do_enable_kpm, .perm_check = manager_or_root},
|
||||
|
||||
@@ -89,25 +89,14 @@ struct ksu_manage_mark_cmd {
|
||||
__u32 result; // Output: for get operation - mark status or reg_count
|
||||
};
|
||||
|
||||
#define KSU_MARK_GET 1
|
||||
#define KSU_MARK_MARK 2
|
||||
#define KSU_MARK_UNMARK 3
|
||||
#define KSU_MARK_REFRESH 4
|
||||
|
||||
struct ksu_nuke_ext4_sysfs_cmd {
|
||||
__aligned_u64 arg; // Input: mnt pointer
|
||||
};
|
||||
|
||||
struct ksu_add_try_umount_cmd {
|
||||
__aligned_u64 arg; // char ptr, this is the mountpoint
|
||||
__u32 flags; // this is the flag we use for it
|
||||
__u8 mode; // denotes what to do with it 0:wipe_list 1:add_to_list 2:delete_entry
|
||||
};
|
||||
|
||||
#define KSU_UMOUNT_WIPE 0 // ignore everything and wipe list
|
||||
#define KSU_UMOUNT_ADD 1 // add entry (path + flags)
|
||||
#define KSU_UMOUNT_DEL 2 // delete entry, strcmp
|
||||
|
||||
#define KSU_MARK_GET 1
|
||||
#define KSU_MARK_MARK 2
|
||||
#define KSU_MARK_UNMARK 3
|
||||
#define KSU_MARK_REFRESH 4
|
||||
|
||||
// Other command structures
|
||||
struct ksu_get_full_version_cmd {
|
||||
@@ -163,7 +152,6 @@ struct ksu_manual_su_cmd {
|
||||
#define KSU_IOCTL_GET_WRAPPER_FD _IOC(_IOC_WRITE, 'K', 15, 0)
|
||||
#define KSU_IOCTL_MANAGE_MARK _IOC(_IOC_READ|_IOC_WRITE, 'K', 16, 0)
|
||||
#define KSU_IOCTL_NUKE_EXT4_SYSFS _IOC(_IOC_WRITE, 'K', 17, 0)
|
||||
#define KSU_IOCTL_ADD_TRY_UMOUNT _IOC(_IOC_WRITE, 'K', 18, 0)
|
||||
// Other IOCTL command definitions
|
||||
#define KSU_IOCTL_GET_FULL_VERSION _IOC(_IOC_READ, 'K', 100, 0)
|
||||
#define KSU_IOCTL_HOOK_TYPE _IOC(_IOC_READ, 'K', 101, 0)
|
||||
|
||||
@@ -17,7 +17,7 @@ static struct umount_manager g_umount_mgr = {
|
||||
|
||||
static void try_umount_path(struct umount_entry *entry)
|
||||
{
|
||||
try_umount(entry->path, entry->flags);
|
||||
try_umount(entry->path, entry->check_mnt, entry->flags);
|
||||
}
|
||||
|
||||
static struct umount_entry *find_entry_locked(const char *path)
|
||||
@@ -39,19 +39,21 @@ static int init_default_entries(void)
|
||||
|
||||
const struct {
|
||||
const char *path;
|
||||
bool check_mnt;
|
||||
int flags;
|
||||
} defaults[] = {
|
||||
{ "/odm", 0 },
|
||||
{ "/system", 0 },
|
||||
{ "/vendor", 0 },
|
||||
{ "/product", 0 },
|
||||
{ "/system_ext", 0 },
|
||||
{ "/data/adb/modules", MNT_DETACH },
|
||||
{ "/debug_ramdisk", MNT_DETACH },
|
||||
{ "/odm", true, 0 },
|
||||
{ "/system", true, 0 },
|
||||
{ "/vendor", true, 0 },
|
||||
{ "/product", true, 0 },
|
||||
{ "/system_ext", true, 0 },
|
||||
{ "/data/adb/modules", false, MNT_DETACH },
|
||||
{ "/debug_ramdisk", false, MNT_DETACH },
|
||||
};
|
||||
|
||||
for (int i = 0; i < ARRAY_SIZE(defaults); i++) {
|
||||
ret = ksu_umount_manager_add(defaults[i].path,
|
||||
ret = ksu_umount_manager_add(defaults[i].path,
|
||||
defaults[i].check_mnt,
|
||||
defaults[i].flags,
|
||||
true); // is_default = true
|
||||
if (ret) {
|
||||
@@ -91,7 +93,7 @@ void ksu_umount_manager_exit(void)
|
||||
pr_info("Umount manager cleaned up\n");
|
||||
}
|
||||
|
||||
int ksu_umount_manager_add(const char *path, int flags, bool is_default)
|
||||
int ksu_umount_manager_add(const char *path, bool check_mnt, int flags, bool is_default)
|
||||
{
|
||||
struct umount_entry *entry;
|
||||
unsigned long irqflags;
|
||||
@@ -125,6 +127,7 @@ int ksu_umount_manager_add(const char *path, int flags, bool is_default)
|
||||
}
|
||||
|
||||
strncpy(entry->path, path, sizeof(entry->path) - 1);
|
||||
entry->check_mnt = check_mnt;
|
||||
entry->flags = flags;
|
||||
entry->state = UMOUNT_STATE_IDLE;
|
||||
entry->is_default = is_default;
|
||||
@@ -231,6 +234,7 @@ int ksu_umount_manager_get_entries(struct ksu_umount_entry_info __user *entries,
|
||||
|
||||
memset(&info, 0, sizeof(info));
|
||||
strncpy(info.path, entry->path, sizeof(info.path) - 1);
|
||||
info.check_mnt = entry->check_mnt;
|
||||
info.flags = entry->flags;
|
||||
info.is_default = entry->is_default;
|
||||
info.state = entry->state;
|
||||
|
||||
@@ -16,6 +16,7 @@ enum umount_entry_state {
|
||||
struct umount_entry {
|
||||
struct list_head list;
|
||||
char path[256];
|
||||
bool check_mnt;
|
||||
int flags;
|
||||
enum umount_entry_state state;
|
||||
bool is_default;
|
||||
@@ -39,6 +40,7 @@ enum umount_manager_op {
|
||||
struct ksu_umount_manager_cmd {
|
||||
__u32 operation;
|
||||
char path[256];
|
||||
__u8 check_mnt;
|
||||
__s32 flags;
|
||||
__u32 count;
|
||||
__aligned_u64 entries_ptr;
|
||||
@@ -46,6 +48,7 @@ struct ksu_umount_manager_cmd {
|
||||
|
||||
struct ksu_umount_entry_info {
|
||||
char path[256];
|
||||
__u8 check_mnt;
|
||||
__s32 flags;
|
||||
__u8 is_default;
|
||||
__u32 state;
|
||||
@@ -54,7 +57,7 @@ struct ksu_umount_entry_info {
|
||||
|
||||
int ksu_umount_manager_init(void);
|
||||
void ksu_umount_manager_exit(void);
|
||||
int ksu_umount_manager_add(const char *path, int flags, bool is_default);
|
||||
int ksu_umount_manager_add(const char *path, bool check_mnt, int flags, bool is_default);
|
||||
int ksu_umount_manager_remove(const char *path);
|
||||
void ksu_umount_manager_execute_all(const struct cred *cred);
|
||||
int ksu_umount_manager_get_entries(struct ksu_umount_entry_info __user *entries, u32 *count);
|
||||
|
||||
@@ -38,6 +38,7 @@ private val SPACING_LARGE = 16.dp
|
||||
|
||||
data class UmountPathEntry(
|
||||
val path: String,
|
||||
val checkMnt: Boolean,
|
||||
val flags: Int,
|
||||
val isDefault: Boolean
|
||||
)
|
||||
@@ -243,11 +244,11 @@ fun UmountManagerScreen(navigator: DestinationsNavigator) {
|
||||
if (showAddDialog) {
|
||||
AddUmountPathDialog(
|
||||
onDismiss = { showAddDialog = false },
|
||||
onConfirm = { path, flags ->
|
||||
onConfirm = { path, checkMnt, flags ->
|
||||
showAddDialog = false
|
||||
|
||||
scope.launch(Dispatchers.IO) {
|
||||
val success = addUmountPath(path, flags)
|
||||
val success = addUmountPath(path, checkMnt, flags)
|
||||
withContext(Dispatchers.Main) {
|
||||
if (success) {
|
||||
saveUmountConfig()
|
||||
@@ -308,6 +309,10 @@ fun UmountPathCard(
|
||||
Spacer(modifier = Modifier.height(SPACING_SMALL))
|
||||
Text(
|
||||
text = buildString {
|
||||
append(context.getString(R.string.check_mount_type))
|
||||
append(": ")
|
||||
append(if (entry.checkMnt) context.getString(R.string.yes) else context.getString(R.string.no))
|
||||
append(" | ")
|
||||
append(context.getString(R.string.flags))
|
||||
append(": ")
|
||||
append(entry.flags.toUmountFlagName(context))
|
||||
@@ -348,9 +353,10 @@ fun UmountPathCard(
|
||||
@Composable
|
||||
fun AddUmountPathDialog(
|
||||
onDismiss: () -> Unit,
|
||||
onConfirm: (String, Int) -> Unit
|
||||
onConfirm: (String, Boolean, Int) -> Unit
|
||||
) {
|
||||
var path by rememberSaveable { mutableStateOf("") }
|
||||
var checkMnt by rememberSaveable { mutableStateOf(false) }
|
||||
var flags by rememberSaveable { mutableStateOf("-1") }
|
||||
|
||||
AlertDialog(
|
||||
@@ -368,6 +374,20 @@ fun AddUmountPathDialog(
|
||||
|
||||
Spacer(modifier = Modifier.height(SPACING_MEDIUM))
|
||||
|
||||
Row(
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
verticalAlignment = Alignment.CenterVertically
|
||||
) {
|
||||
Checkbox(
|
||||
checked = checkMnt,
|
||||
onCheckedChange = { checkMnt = it }
|
||||
)
|
||||
Spacer(modifier = Modifier.width(SPACING_SMALL))
|
||||
Text(stringResource(R.string.check_mount_type_overlay))
|
||||
}
|
||||
|
||||
Spacer(modifier = Modifier.height(SPACING_MEDIUM))
|
||||
|
||||
OutlinedTextField(
|
||||
value = flags,
|
||||
onValueChange = { flags = it },
|
||||
@@ -383,7 +403,7 @@ fun AddUmountPathDialog(
|
||||
TextButton(
|
||||
onClick = {
|
||||
val flagsInt = flags.toIntOrNull() ?: -1
|
||||
onConfirm(path, flagsInt)
|
||||
onConfirm(path, checkMnt, flagsInt)
|
||||
},
|
||||
enabled = path.isNotBlank()
|
||||
) {
|
||||
@@ -404,11 +424,12 @@ private fun parseUmountPaths(output: String): List<UmountPathEntry> {
|
||||
|
||||
return lines.drop(2).mapNotNull { line ->
|
||||
val parts = line.trim().split(Regex("\\s+"))
|
||||
if (parts.size >= 3) {
|
||||
if (parts.size >= 4) {
|
||||
UmountPathEntry(
|
||||
path = parts[0],
|
||||
flags = parts[1].toIntOrNull() ?: -1,
|
||||
isDefault = parts[2].equals("Yes", ignoreCase = true)
|
||||
checkMnt = parts[1].equals("true", ignoreCase = true),
|
||||
flags = parts[2].toIntOrNull() ?: -1,
|
||||
isDefault = parts[3].equals("Yes", ignoreCase = true)
|
||||
)
|
||||
} else null
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ import android.util.Log
|
||||
import com.topjohnwu.superuser.CallbackList
|
||||
import com.topjohnwu.superuser.Shell
|
||||
import com.topjohnwu.superuser.ShellUtils
|
||||
import com.topjohnwu.superuser.io.SuFile
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.withContext
|
||||
import kotlinx.parcelize.Parcelize
|
||||
@@ -21,6 +22,7 @@ import com.sukisu.ultra.Natives
|
||||
import com.sukisu.ultra.ksuApp
|
||||
import org.json.JSONArray
|
||||
import java.io.File
|
||||
import java.util.concurrent.CountDownLatch
|
||||
|
||||
|
||||
/**
|
||||
@@ -667,14 +669,15 @@ fun readUidScannerFile(): Boolean {
|
||||
return try {
|
||||
ShellUtils.fastCmd(shell, "cat /data/adb/ksu/.uid_scanner").trim() == "1"
|
||||
} catch (_: Exception) {
|
||||
false
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
fun addUmountPath(path: String, flags: Int): Boolean {
|
||||
fun addUmountPath(path: String, checkMnt: Boolean, flags: Int): Boolean {
|
||||
val shell = getRootShell()
|
||||
val checkMntFlag = if (checkMnt) "--check-mnt" else ""
|
||||
val flagsArg = if (flags >= 0) "--flags $flags" else ""
|
||||
val cmd = "${getKsuDaemonPath()} umount add $path $flagsArg"
|
||||
val cmd = "${getKsuDaemonPath()} umount add $path $checkMntFlag $flagsArg"
|
||||
val result = ShellUtils.fastCmdResult(shell, cmd)
|
||||
Log.i(TAG, "add umount path $path result: $result")
|
||||
return result
|
||||
|
||||
@@ -126,6 +126,7 @@
|
||||
<string name="selected_lkm">LKM المحددة: %s</string>
|
||||
<string name="save_log">حفظ السجلات</string>
|
||||
<string name="log_saved">السجلات محفوظة</string>
|
||||
<string name="sus_su_mode">وضع SuS SU</string>
|
||||
<!-- Module related -->
|
||||
<string name="module_install_confirm">تأكيد وحدة التثبيت %1$s؟</string>
|
||||
<string name="unknown_module">وحدة غير معروفة</string>
|
||||
@@ -275,6 +276,8 @@
|
||||
<string name="advanced_settings">إعدادات متقدمة</string>
|
||||
<string name="appearance_settings">تخصيص شريط الأدوات</string>
|
||||
<string name="back">عد مرة أخرى</string>
|
||||
<string name="susfs_enabled">تم تمكين SuSFS</string>
|
||||
<string name="susfs_disabled">تم تعطيل SuSFS</string>
|
||||
<string name="background_set_success">تم تعيين الخلفية بنجاح</string>
|
||||
<string name="background_removed">إزالة خلفيات مخصصة</string>
|
||||
<string name="icon_switch_title">Alternate icon</string>
|
||||
|
||||
@@ -124,6 +124,7 @@
|
||||
<string name="selected_lkm">Selected LKM: %s</string>
|
||||
<string name="save_log">Girişləri Saxla</string>
|
||||
<string name="log_saved">Logs saved</string>
|
||||
<string name="sus_su_mode">SuS SU mode:</string>
|
||||
<!-- Module related -->
|
||||
<string name="module_install_confirm">confirm install module %1$s?</string>
|
||||
<string name="unknown_module">unknown module</string>
|
||||
@@ -273,6 +274,8 @@
|
||||
<string name="advanced_settings">Advanced Settings</string>
|
||||
<string name="appearance_settings">Customize the toolbar</string>
|
||||
<string name="back">Comeback</string>
|
||||
<string name="susfs_enabled">SuSFS enabled</string>
|
||||
<string name="susfs_disabled">SuSFS disabled</string>
|
||||
<string name="background_set_success">Background set successfully</string>
|
||||
<string name="background_removed">Removed custom backgrounds</string>
|
||||
<string name="icon_switch_title">Alternate icon</string>
|
||||
|
||||
@@ -124,6 +124,7 @@
|
||||
<string name="selected_lkm">Selected LKM: %s</string>
|
||||
<string name="save_log">Sačuvaj Dnevnike</string>
|
||||
<string name="log_saved">Logs saved</string>
|
||||
<string name="sus_su_mode">SuS SU mode:</string>
|
||||
<!-- Module related -->
|
||||
<string name="module_install_confirm">confirm install module %1$s?</string>
|
||||
<string name="unknown_module">unknown module</string>
|
||||
@@ -273,6 +274,8 @@
|
||||
<string name="advanced_settings">Advanced Settings</string>
|
||||
<string name="appearance_settings">Customize the toolbar</string>
|
||||
<string name="back">Comeback</string>
|
||||
<string name="susfs_enabled">SuSFS enabled</string>
|
||||
<string name="susfs_disabled">SuSFS disabled</string>
|
||||
<string name="background_set_success">Background set successfully</string>
|
||||
<string name="background_removed">Removed custom backgrounds</string>
|
||||
<string name="icon_switch_title">Alternate icon</string>
|
||||
|
||||
@@ -124,6 +124,7 @@
|
||||
<string name="selected_lkm">Selected LKM: %s</string>
|
||||
<string name="save_log">Gem Logfiler</string>
|
||||
<string name="log_saved">Logs saved</string>
|
||||
<string name="sus_su_mode">SuS SU mode:</string>
|
||||
<!-- Module related -->
|
||||
<string name="module_install_confirm">confirm install module %1$s?</string>
|
||||
<string name="unknown_module">unknown module</string>
|
||||
@@ -273,6 +274,8 @@
|
||||
<string name="advanced_settings">Advanced Settings</string>
|
||||
<string name="appearance_settings">Customize the toolbar</string>
|
||||
<string name="back">Comeback</string>
|
||||
<string name="susfs_enabled">SuSFS enabled</string>
|
||||
<string name="susfs_disabled">SuSFS disabled</string>
|
||||
<string name="background_set_success">Background set successfully</string>
|
||||
<string name="background_removed">Removed custom backgrounds</string>
|
||||
<string name="icon_switch_title">Alternate icon</string>
|
||||
|
||||
@@ -126,6 +126,7 @@
|
||||
<string name="selected_lkm">Wähle LKM: %s</string>
|
||||
<string name="save_log">Protokolle Speichern</string>
|
||||
<string name="log_saved">Protokolle gespeichert</string>
|
||||
<string name="sus_su_mode">SuS SU-Modus:</string>
|
||||
<!-- Module related -->
|
||||
<string name="module_install_confirm">das Installationsmodul %1$s bestätigen ?</string>
|
||||
<string name="unknown_module">unbekannter Modul</string>
|
||||
@@ -275,6 +276,8 @@
|
||||
<string name="advanced_settings">Erweiterte Einstellungen</string>
|
||||
<string name="appearance_settings">Passt die Symbolleiste an.</string>
|
||||
<string name="back">Comeback</string>
|
||||
<string name="susfs_enabled">SuSFS aktiviert</string>
|
||||
<string name="susfs_disabled">SuSFS deaktiviert</string>
|
||||
<string name="background_set_success">Hintergrund erfolgreich gesetzt</string>
|
||||
<string name="background_removed">Eigene Hintergründe entfernt</string>
|
||||
<string name="icon_switch_title">Alternatives Symbol</string>
|
||||
|
||||
@@ -124,6 +124,7 @@
|
||||
<string name="selected_lkm">LKM seleccionado: %s</string>
|
||||
<string name="save_log">Guardar registros</string>
|
||||
<string name="log_saved">Registro guardado</string>
|
||||
<string name="sus_su_mode">Modo SuS SU:</string>
|
||||
<!-- Module related -->
|
||||
<string name="module_install_confirm">¿confirmar la instalación del módulo %1$s?</string>
|
||||
<string name="unknown_module">módulo desconocido</string>
|
||||
@@ -273,6 +274,8 @@
|
||||
<string name="advanced_settings">Configuraciones avanzadas</string>
|
||||
<string name="appearance_settings">Personalizar la barra de herramientas.</string>
|
||||
<string name="back">Retorno</string>
|
||||
<string name="susfs_enabled">SuSFS activado</string>
|
||||
<string name="susfs_disabled">SuSFS desactivado</string>
|
||||
<string name="background_set_success">Fondo establecido correctamente</string>
|
||||
<string name="background_removed">Eliminar fondo personalizado</string>
|
||||
<string name="icon_switch_title">Icono alternativo</string>
|
||||
|
||||
@@ -124,6 +124,7 @@
|
||||
<string name="selected_lkm">Valitud LKM: %s</string>
|
||||
<string name="save_log">Salvesta Logid</string>
|
||||
<string name="log_saved">Logs saved</string>
|
||||
<string name="sus_su_mode">SuS SU mode:</string>
|
||||
<!-- Module related -->
|
||||
<string name="module_install_confirm">confirm install module %1$s?</string>
|
||||
<string name="unknown_module">unknown module</string>
|
||||
@@ -273,6 +274,8 @@
|
||||
<string name="advanced_settings">Advanced Settings</string>
|
||||
<string name="appearance_settings">Customize the toolbar</string>
|
||||
<string name="back">Comeback</string>
|
||||
<string name="susfs_enabled">SuSFS enabled</string>
|
||||
<string name="susfs_disabled">SuSFS disabled</string>
|
||||
<string name="background_set_success">Background set successfully</string>
|
||||
<string name="background_removed">Removed custom backgrounds</string>
|
||||
<string name="icon_switch_title">Alternate icon</string>
|
||||
|
||||
@@ -124,6 +124,7 @@
|
||||
<string name="selected_lkm">Selected LKM: %s</string>
|
||||
<string name="save_log">ذخیره گزارشها</string>
|
||||
<string name="log_saved">Logs saved</string>
|
||||
<string name="sus_su_mode">SuS SU mode:</string>
|
||||
<!-- Module related -->
|
||||
<string name="module_install_confirm">confirm install module %1$s?</string>
|
||||
<string name="unknown_module">unknown module</string>
|
||||
@@ -273,6 +274,8 @@
|
||||
<string name="advanced_settings">Advanced Settings</string>
|
||||
<string name="appearance_settings">Customize the toolbar</string>
|
||||
<string name="back">Comeback</string>
|
||||
<string name="susfs_enabled">SuSFS enabled</string>
|
||||
<string name="susfs_disabled">SuSFS disabled</string>
|
||||
<string name="background_set_success">Background set successfully</string>
|
||||
<string name="background_removed">Removed custom backgrounds</string>
|
||||
<string name="icon_switch_title">Alternate icon</string>
|
||||
|
||||
@@ -124,6 +124,7 @@
|
||||
<string name="selected_lkm">Selected LKM: %s</string>
|
||||
<string name="save_log">I-save ang mga Log</string>
|
||||
<string name="log_saved">Logs saved</string>
|
||||
<string name="sus_su_mode">SuS SU mode:</string>
|
||||
<!-- Module related -->
|
||||
<string name="module_install_confirm">confirm install module %1$s?</string>
|
||||
<string name="unknown_module">unknown module</string>
|
||||
@@ -273,6 +274,8 @@
|
||||
<string name="advanced_settings">Advanced Settings</string>
|
||||
<string name="appearance_settings">Customize the toolbar</string>
|
||||
<string name="back">Comeback</string>
|
||||
<string name="susfs_enabled">SuSFS enabled</string>
|
||||
<string name="susfs_disabled">SuSFS disabled</string>
|
||||
<string name="background_set_success">Background set successfully</string>
|
||||
<string name="background_removed">Removed custom backgrounds</string>
|
||||
<string name="icon_switch_title">Alternate icon</string>
|
||||
|
||||
@@ -126,6 +126,7 @@
|
||||
<string name="selected_lkm">LKM sélectionné : %s</string>
|
||||
<string name="save_log">Enregistrer les journaux</string>
|
||||
<string name="log_saved">Journaux enregistrés</string>
|
||||
<string name="sus_su_mode">Mode Sus</string>
|
||||
<!-- Module related -->
|
||||
<string name="module_install_confirm">confirmer l\'installation du module %1$s?</string>
|
||||
<string name="unknown_module">module inconnu</string>
|
||||
@@ -275,6 +276,8 @@
|
||||
<string name="advanced_settings">Paramètres avancés</string>
|
||||
<string name="appearance_settings">Choisir les boutons à afficher</string>
|
||||
<string name="back">Reviens</string>
|
||||
<string name="susfs_enabled">SuSFS activé</string>
|
||||
<string name="susfs_disabled">SuSFS désactivé</string>
|
||||
<string name="background_set_success">Fond d\'écran défini avec succès</string>
|
||||
<string name="background_removed">Fond d\'écran personnalisé supprimé</string>
|
||||
<string name="icon_switch_title">Icône alternative</string>
|
||||
|
||||
@@ -124,6 +124,7 @@
|
||||
<string name="selected_lkm">Selected LKM: %s</string>
|
||||
<string name="save_log">लॉग सहेजें</string>
|
||||
<string name="log_saved">Logs saved</string>
|
||||
<string name="sus_su_mode">SuS SU mode:</string>
|
||||
<!-- Module related -->
|
||||
<string name="module_install_confirm">confirm install module %1$s?</string>
|
||||
<string name="unknown_module">unknown module</string>
|
||||
@@ -273,6 +274,8 @@
|
||||
<string name="advanced_settings">Advanced Settings</string>
|
||||
<string name="appearance_settings">Customize the toolbar</string>
|
||||
<string name="back">Comeback</string>
|
||||
<string name="susfs_enabled">SuSFS enabled</string>
|
||||
<string name="susfs_disabled">SuSFS disabled</string>
|
||||
<string name="background_set_success">Background set successfully</string>
|
||||
<string name="background_removed">Removed custom backgrounds</string>
|
||||
<string name="icon_switch_title">Alternate icon</string>
|
||||
|
||||
@@ -124,6 +124,7 @@
|
||||
<string name="selected_lkm">Selected LKM: %s</string>
|
||||
<string name="save_log">Spremi Zapise</string>
|
||||
<string name="log_saved">Logs saved</string>
|
||||
<string name="sus_su_mode">SuS SU mode:</string>
|
||||
<!-- Module related -->
|
||||
<string name="module_install_confirm">confirm install module %1$s?</string>
|
||||
<string name="unknown_module">unknown module</string>
|
||||
@@ -273,6 +274,8 @@
|
||||
<string name="advanced_settings">Advanced Settings</string>
|
||||
<string name="appearance_settings">Customize the toolbar</string>
|
||||
<string name="back">Comeback</string>
|
||||
<string name="susfs_enabled">SuSFS enabled</string>
|
||||
<string name="susfs_disabled">SuSFS disabled</string>
|
||||
<string name="background_set_success">Background set successfully</string>
|
||||
<string name="background_removed">Removed custom backgrounds</string>
|
||||
<string name="icon_switch_title">Alternate icon</string>
|
||||
|
||||
@@ -124,6 +124,7 @@
|
||||
<string name="selected_lkm">Kiválasztott LKM: %s</string>
|
||||
<string name="save_log">Naplók mentése</string>
|
||||
<string name="log_saved">Mentett naplók</string>
|
||||
<string name="sus_su_mode">SuS SU mode:</string>
|
||||
<!-- Module related -->
|
||||
<string name="module_install_confirm">confirm install module %1$s?</string>
|
||||
<string name="unknown_module">unknown module</string>
|
||||
@@ -273,6 +274,8 @@
|
||||
<string name="advanced_settings">Advanced Settings</string>
|
||||
<string name="appearance_settings">Customize the toolbar</string>
|
||||
<string name="back">Comeback</string>
|
||||
<string name="susfs_enabled">SuSFS enabled</string>
|
||||
<string name="susfs_disabled">SuSFS disabled</string>
|
||||
<string name="background_set_success">Background set successfully</string>
|
||||
<string name="background_removed">Removed custom backgrounds</string>
|
||||
<string name="icon_switch_title">Alternate icon</string>
|
||||
|
||||
@@ -113,6 +113,7 @@ Gunakan opsi ini hanya setelah OTA selesai.
|
||||
Lanjutkan?</string>
|
||||
<string name="install_next">Lanjut</string>
|
||||
<string name="select_file_tip">Disarankan gambar partisi %1$s</string>
|
||||
<string name="select_file_tip_vendor">(tidak stabil)</string>
|
||||
<string name="select_kmi">Pilih KMI</string>
|
||||
<string name="settings_uninstall">Copot Pemasangan</string>
|
||||
<string name="settings_uninstall_temporary">Copot Pemasangan Sementara</string>
|
||||
@@ -127,6 +128,7 @@ Lanjutkan?</string>
|
||||
<string name="selected_lkm">LKM Terpilih: %s</string>
|
||||
<string name="save_log">Simpan Log</string>
|
||||
<string name="log_saved">Log Disimpan</string>
|
||||
<string name="sus_su_mode">Mode SuS SU:</string>
|
||||
<!-- Module related -->
|
||||
<string name="module_install_confirm">Konfirmasi pemasangan modul %1$s?</string>
|
||||
<string name="unknown_module">modul tidak dikenal</string>
|
||||
@@ -281,6 +283,8 @@ Tanamkan: Secara permanen memasang ke sistem</string>
|
||||
<string name="advanced_settings">Pengaturan Lanjutan</string>
|
||||
<string name="appearance_settings">Sesuaikan Bilah Alat</string>
|
||||
<string name="back">Kembali</string>
|
||||
<string name="susfs_enabled">SuSFS diaktifkan</string>
|
||||
<string name="susfs_disabled">SuSFS dinonaktifkan</string>
|
||||
<string name="background_set_success">Latar belakang berhasil diatur</string>
|
||||
<string name="background_removed">Latar belakang khusus dihapus</string>
|
||||
<string name="icon_switch_title">Ikon Alternatif</string>
|
||||
|
||||
@@ -114,6 +114,7 @@
|
||||
<string name="install_upload_lkm_file">Gunakan berkas LKM lokal</string>
|
||||
<string name="install_only_support_ko_file">Hanya berkas .ko yang didukung</string>
|
||||
<string name="select_file_tip">%1$s image partisi terekomendasi</string>
|
||||
<string name="select_file_tip_vendor">(tidak stabil)</string>
|
||||
<string name="select_kmi">Pilih KMI</string>
|
||||
<string name="settings_uninstall">Hapus</string>
|
||||
<string name="settings_uninstall_temporary">Hapus sementara</string>
|
||||
@@ -128,6 +129,7 @@
|
||||
<string name="selected_lkm">LKM dipilih: %s</string>
|
||||
<string name="save_log">Simpan Log</string>
|
||||
<string name="log_saved">Log disimpan</string>
|
||||
<string name="sus_su_mode">Mode SuS SU:</string>
|
||||
<!-- Module related -->
|
||||
<string name="module_install_confirm">konfirmasi pemasangan modul %1$s?</string>
|
||||
<string name="unknown_module">module tidak dikenal</string>
|
||||
@@ -288,6 +290,8 @@
|
||||
<string name="advanced_settings">Pengaturan Lanjutan</string>
|
||||
<string name="appearance_settings">Kustomisasi toolbar</string>
|
||||
<string name="back">Kembali</string>
|
||||
<string name="susfs_enabled">SuSFS dinyalakan</string>
|
||||
<string name="susfs_disabled">SuSFS dimatikan</string>
|
||||
<string name="background_set_success">Set latar belakang berhasil</string>
|
||||
<string name="background_removed">Latar belakang khusus yang dihapus</string>
|
||||
<string name="icon_switch_title">Ubah ikon</string>
|
||||
@@ -604,6 +608,7 @@
|
||||
<string name="loop_paths_section">Jalur Loop</string>
|
||||
<string name="add_loop_path">Tambahkan Jalur Loop</string>
|
||||
<!-- 循环路径功能描述 -->
|
||||
<string name="sus_loop_path_feature_label">Jalur Loop SUS</string>
|
||||
<string name="sus_loop_paths_description_title">Konfigurasi Jalur Loop</string>
|
||||
<string name="sus_loop_paths_description_text">Jalur loop ditandai ulang sebagai SUS_PATH pada setiap startup aplikasi pengguna non-root atau layanan terisolasi. Ini membantu mengatasi masalah di mana jalur yang ditambahkan mungkin memiliki status inode direset atau inode dibuat ulang di kernel.</string>
|
||||
<string name="avc_log_spoofing">Palsukan log AVC</string>
|
||||
@@ -657,6 +662,7 @@ Diaktifkan: Aktifkan pemalsuan sus tcontext dari \'su\' dengan \'kernel\' yang d
|
||||
<string name="uid_multi_user_scan_title">Pemindaian Aplikasi Multi-Pengguna</string>
|
||||
<string name="uid_multi_user_scan_summary">Ketika diaktifkan, fitur ini akan memindai aplikasi untuk semua pengguna, termasuk profil kerja</string>
|
||||
<string name="uid_scanner_setting_failed">Gagal mengatur, silakan periksa perizinan</string>
|
||||
<string name="uid_scanner_setting_error">Gagal mengatur: %s</string>
|
||||
<string name="clean_runtime_environment">Bersihkan Lingkungan Runtime</string>
|
||||
<string name="clean_runtime_environment_summary">Bersihkan berkas runtime dan hentikan layanan pemindai</string>
|
||||
<string name="clean_runtime_environment_confirm">Apakah Anda yakin ingin membersihkan lingkungan runtime? Tindakan ini akan menghentikan layanan pemindai dan menghapus berkas yang terkait.</string>
|
||||
|
||||
@@ -126,6 +126,7 @@
|
||||
<string name="selected_lkm">LKM selezionato: %s</string>
|
||||
<string name="save_log">Salva Registri</string>
|
||||
<string name="log_saved">Logs saved</string>
|
||||
<string name="sus_su_mode">SuS SU mode:</string>
|
||||
<!-- Module related -->
|
||||
<string name="module_install_confirm">confirm install module %1$s?</string>
|
||||
<string name="unknown_module">unknown module</string>
|
||||
@@ -275,6 +276,8 @@
|
||||
<string name="advanced_settings">Advanced Settings</string>
|
||||
<string name="appearance_settings">Customize the toolbar</string>
|
||||
<string name="back">Comeback</string>
|
||||
<string name="susfs_enabled">SuSFS enabled</string>
|
||||
<string name="susfs_disabled">SuSFS disabled</string>
|
||||
<string name="background_set_success">Background set successfully</string>
|
||||
<string name="background_removed">Removed custom backgrounds</string>
|
||||
<string name="icon_switch_title">Alternate icon</string>
|
||||
|
||||
@@ -112,6 +112,7 @@
|
||||
\n続行しますか?</string>
|
||||
<string name="install_next">次へ</string>
|
||||
<string name="select_file_tip">%1$s のパーティションイメージを推奨します。</string>
|
||||
<string name="select_file_tip_vendor">(不安定)</string>
|
||||
<string name="select_kmi">KMI を選択してください</string>
|
||||
<string name="settings_uninstall">アンインストール</string>
|
||||
<string name="settings_uninstall_temporary">一時的にアンインストールする</string>
|
||||
@@ -126,6 +127,7 @@
|
||||
<string name="selected_lkm">選択された LKM: %s</string>
|
||||
<string name="save_log">ログを保存</string>
|
||||
<string name="log_saved">保存されたログ</string>
|
||||
<string name="sus_su_mode">SuS SU モード:</string>
|
||||
<!-- Module related -->
|
||||
<string name="module_install_confirm">%1$s モジュールをインストールしますか?</string>
|
||||
<string name="unknown_module">不明なモジュール</string>
|
||||
@@ -279,6 +281,8 @@
|
||||
<string name="advanced_settings">高度な設定</string>
|
||||
<string name="appearance_settings">ツールバーをカスタマイズ</string>
|
||||
<string name="back">戻る</string>
|
||||
<string name="susfs_enabled">SuSFS 有効</string>
|
||||
<string name="susfs_disabled">SuSFS 無効</string>
|
||||
<string name="background_set_success">背景の設定が成功しました</string>
|
||||
<string name="background_removed">カスタム背景を削除しました</string>
|
||||
<string name="icon_switch_title">代替アイコン</string>
|
||||
@@ -593,6 +597,7 @@
|
||||
<string name="loop_paths_section">ループパス</string>
|
||||
<string name="add_loop_path">ループパスを追加</string>
|
||||
<!-- 循环路径功能描述 -->
|
||||
<string name="sus_loop_path_feature_label">SUS ループパス</string>
|
||||
<string name="sus_loop_paths_description_title">ループパスの構成</string>
|
||||
<string name="sus_loop_paths_description_text">ループパスは、非 root ユーザーアプリまたは独立したサービスの起動ごとに SUS_PATH として再設定されます。これにより、追加されたパスの inode ステータスがリセットされたり、カーネル内で inode が再生成される問題に対処できます。</string>
|
||||
<string name="avc_log_spoofing">AVC ログの偽装</string>
|
||||
|
||||
@@ -124,6 +124,7 @@
|
||||
<string name="selected_lkm">Selected LKM: %s</string>
|
||||
<string name="save_log">ಲಾಗ್ಗಳನ್ನು ಉಳಿಸಿ</string>
|
||||
<string name="log_saved">Logs saved</string>
|
||||
<string name="sus_su_mode">SuS SU mode:</string>
|
||||
<!-- Module related -->
|
||||
<string name="module_install_confirm">confirm install module %1$s?</string>
|
||||
<string name="unknown_module">unknown module</string>
|
||||
@@ -273,6 +274,8 @@
|
||||
<string name="advanced_settings">Advanced Settings</string>
|
||||
<string name="appearance_settings">Customize the toolbar</string>
|
||||
<string name="back">Comeback</string>
|
||||
<string name="susfs_enabled">SuSFS enabled</string>
|
||||
<string name="susfs_disabled">SuSFS disabled</string>
|
||||
<string name="background_set_success">Background set successfully</string>
|
||||
<string name="background_removed">Removed custom backgrounds</string>
|
||||
<string name="icon_switch_title">Alternate icon</string>
|
||||
|
||||
@@ -124,6 +124,7 @@
|
||||
<string name="selected_lkm">선택된 LKM: %s</string>
|
||||
<string name="save_log">로그 저장</string>
|
||||
<string name="log_saved">로그 저장됨</string>
|
||||
<string name="sus_su_mode">SuS SU mode:</string>
|
||||
<!-- Module related -->
|
||||
<string name="module_install_confirm">confirm install module %1$s?</string>
|
||||
<string name="unknown_module">unknown module</string>
|
||||
@@ -273,6 +274,8 @@
|
||||
<string name="advanced_settings">Advanced Settings</string>
|
||||
<string name="appearance_settings">Customize the toolbar</string>
|
||||
<string name="back">Comeback</string>
|
||||
<string name="susfs_enabled">SuSFS enabled</string>
|
||||
<string name="susfs_disabled">SuSFS disabled</string>
|
||||
<string name="background_set_success">Background set successfully</string>
|
||||
<string name="background_removed">Removed custom backgrounds</string>
|
||||
<string name="icon_switch_title">Alternate icon</string>
|
||||
|
||||
@@ -124,6 +124,7 @@
|
||||
<string name="selected_lkm">Selected LKM: %s</string>
|
||||
<string name="save_log">Saglabāt Žurnālus</string>
|
||||
<string name="log_saved">Logs saved</string>
|
||||
<string name="sus_su_mode">SuS SU mode:</string>
|
||||
<!-- Module related -->
|
||||
<string name="module_install_confirm">confirm install module %1$s?</string>
|
||||
<string name="unknown_module">unknown module</string>
|
||||
@@ -273,6 +274,8 @@
|
||||
<string name="advanced_settings">Advanced Settings</string>
|
||||
<string name="appearance_settings">Customize the toolbar</string>
|
||||
<string name="back">Comeback</string>
|
||||
<string name="susfs_enabled">SuSFS enabled</string>
|
||||
<string name="susfs_disabled">SuSFS disabled</string>
|
||||
<string name="background_set_success">Background set successfully</string>
|
||||
<string name="background_removed">Removed custom backgrounds</string>
|
||||
<string name="icon_switch_title">Alternate icon</string>
|
||||
|
||||
@@ -126,6 +126,7 @@
|
||||
<string name="selected_lkm">Izvēlētais lkm: %s</string>
|
||||
<string name="save_log">Išsaugoti Žurnalus</string>
|
||||
<string name="log_saved">Logs saved</string>
|
||||
<string name="sus_su_mode">SuS SU mode:</string>
|
||||
<!-- Module related -->
|
||||
<string name="module_install_confirm">confirm install module %1$s?</string>
|
||||
<string name="unknown_module">unknown module</string>
|
||||
@@ -275,6 +276,8 @@
|
||||
<string name="advanced_settings">Advanced Settings</string>
|
||||
<string name="appearance_settings">Customize the toolbar</string>
|
||||
<string name="back">Comeback</string>
|
||||
<string name="susfs_enabled">SuSFS enabled</string>
|
||||
<string name="susfs_disabled">SuSFS disabled</string>
|
||||
<string name="background_set_success">Background set successfully</string>
|
||||
<string name="background_removed">Removed custom backgrounds</string>
|
||||
<string name="icon_switch_title">Alternate icon</string>
|
||||
|
||||
@@ -124,6 +124,7 @@
|
||||
<string name="selected_lkm">Selected LKM: %s</string>
|
||||
<string name="save_log">लॉग जतन करा</string>
|
||||
<string name="log_saved">Logs saved</string>
|
||||
<string name="sus_su_mode">SuS SU mode:</string>
|
||||
<!-- Module related -->
|
||||
<string name="module_install_confirm">confirm install module %1$s?</string>
|
||||
<string name="unknown_module">unknown module</string>
|
||||
@@ -273,6 +274,8 @@
|
||||
<string name="advanced_settings">Advanced Settings</string>
|
||||
<string name="appearance_settings">Customize the toolbar</string>
|
||||
<string name="back">Comeback</string>
|
||||
<string name="susfs_enabled">SuSFS enabled</string>
|
||||
<string name="susfs_disabled">SuSFS disabled</string>
|
||||
<string name="background_set_success">Background set successfully</string>
|
||||
<string name="background_removed">Removed custom backgrounds</string>
|
||||
<string name="icon_switch_title">Alternate icon</string>
|
||||
|
||||
@@ -124,6 +124,7 @@
|
||||
<string name="selected_lkm">Selected LKM: %s</string>
|
||||
<string name="save_log">Simpan Log</string>
|
||||
<string name="log_saved">Logs saved</string>
|
||||
<string name="sus_su_mode">SuS SU mode:</string>
|
||||
<!-- Module related -->
|
||||
<string name="module_install_confirm">confirm install module %1$s?</string>
|
||||
<string name="unknown_module">unknown module</string>
|
||||
@@ -273,6 +274,8 @@
|
||||
<string name="advanced_settings">Advanced Settings</string>
|
||||
<string name="appearance_settings">Customize the toolbar</string>
|
||||
<string name="back">Comeback</string>
|
||||
<string name="susfs_enabled">SuSFS enabled</string>
|
||||
<string name="susfs_disabled">SuSFS disabled</string>
|
||||
<string name="background_set_success">Background set successfully</string>
|
||||
<string name="background_removed">Removed custom backgrounds</string>
|
||||
<string name="icon_switch_title">Alternate icon</string>
|
||||
|
||||
@@ -126,6 +126,7 @@
|
||||
<string name="selected_lkm">Geselecteerde LKM: %s</string>
|
||||
<string name="save_log">Logboeken Opslaan</string>
|
||||
<string name="log_saved">Logs opgeslagen</string>
|
||||
<string name="sus_su_mode">SuS SU mode:</string>
|
||||
<!-- Module related -->
|
||||
<string name="module_install_confirm">confirm install module %1$s?</string>
|
||||
<string name="unknown_module">unknown module</string>
|
||||
@@ -275,6 +276,8 @@
|
||||
<string name="advanced_settings">Advanced Settings</string>
|
||||
<string name="appearance_settings">Customize the toolbar</string>
|
||||
<string name="back">Comeback</string>
|
||||
<string name="susfs_enabled">SuSFS enabled</string>
|
||||
<string name="susfs_disabled">SuSFS disabled</string>
|
||||
<string name="background_set_success">Background set successfully</string>
|
||||
<string name="background_removed">Removed custom backgrounds</string>
|
||||
<string name="icon_switch_title">Alternate icon</string>
|
||||
|
||||
@@ -126,6 +126,7 @@
|
||||
<string name="selected_lkm">Wybrano LKM: %s</string>
|
||||
<string name="save_log">Zapisz dzienniki</string>
|
||||
<string name="log_saved">Dzienniki zapisane</string>
|
||||
<string name="sus_su_mode">SuS SU mode:</string>
|
||||
<!-- Module related -->
|
||||
<string name="module_install_confirm">confirm install module %1$s?</string>
|
||||
<string name="unknown_module">unknown module</string>
|
||||
@@ -275,6 +276,8 @@
|
||||
<string name="advanced_settings">Advanced Settings</string>
|
||||
<string name="appearance_settings">Customize the toolbar</string>
|
||||
<string name="back">Comeback</string>
|
||||
<string name="susfs_enabled">SuSFS enabled</string>
|
||||
<string name="susfs_disabled">SuSFS disabled</string>
|
||||
<string name="background_set_success">Background set successfully</string>
|
||||
<string name="background_removed">Removed custom backgrounds</string>
|
||||
<string name="icon_switch_title">Alternate icon</string>
|
||||
|
||||
@@ -124,6 +124,7 @@
|
||||
<string name="selected_lkm">LKM selecionado: %s</string>
|
||||
<string name="save_log">Salvar Registros</string>
|
||||
<string name="log_saved">Registros salvos</string>
|
||||
<string name="sus_su_mode">Modo SU SuSU:</string>
|
||||
<!-- Module related -->
|
||||
<string name="module_install_confirm">¿confirmar la instalación del módulo %1$s?</string>
|
||||
<string name="unknown_module">módulo desconocido</string>
|
||||
@@ -273,6 +274,8 @@
|
||||
<string name="advanced_settings">Configurações Avançadas</string>
|
||||
<string name="appearance_settings">Personaliza a barra de ferramentas.</string>
|
||||
<string name="back">Retorno</string>
|
||||
<string name="susfs_enabled">SuSFS habilitado</string>
|
||||
<string name="susfs_disabled">SuSFS desativado</string>
|
||||
<string name="background_set_success">Fundo definido com sucesso</string>
|
||||
<string name="background_removed">Remover</string>
|
||||
<string name="icon_switch_title">Ícone alternativo</string>
|
||||
|
||||
@@ -126,6 +126,7 @@
|
||||
<string name="selected_lkm">Lkm selectat: %s</string>
|
||||
<string name="save_log">Salvează Jurnale</string>
|
||||
<string name="log_saved">Logs saved</string>
|
||||
<string name="sus_su_mode">SuS SU mode:</string>
|
||||
<!-- Module related -->
|
||||
<string name="module_install_confirm">confirm install module %1$s?</string>
|
||||
<string name="unknown_module">unknown module</string>
|
||||
@@ -275,6 +276,8 @@
|
||||
<string name="advanced_settings">Advanced Settings</string>
|
||||
<string name="appearance_settings">Customize the toolbar</string>
|
||||
<string name="back">Comeback</string>
|
||||
<string name="susfs_enabled">SuSFS enabled</string>
|
||||
<string name="susfs_disabled">SuSFS disabled</string>
|
||||
<string name="background_set_success">Background set successfully</string>
|
||||
<string name="background_removed">Removed custom backgrounds</string>
|
||||
<string name="icon_switch_title">Alternate icon</string>
|
||||
|
||||
@@ -115,6 +115,7 @@
|
||||
<string name="install_upload_lkm_file">Использовать локальный файл LKM</string>
|
||||
<string name="install_only_support_ko_file">Поддерживаются только файлы .ko</string>
|
||||
<string name="select_file_tip">Образ раздела %1$s рекомендуется</string>
|
||||
<string name="select_file_tip_vendor">(нестабильный)</string>
|
||||
<string name="select_kmi">Выбрать KMI</string>
|
||||
<string name="settings_uninstall">Удалить</string>
|
||||
<string name="settings_uninstall_temporary">Удалить на время</string>
|
||||
@@ -129,6 +130,7 @@
|
||||
<string name="selected_lkm">Выбран LKM: %s</string>
|
||||
<string name="save_log">Сохранить логи</string>
|
||||
<string name="log_saved">Логи сохранены</string>
|
||||
<string name="sus_su_mode">SuS SU режим:</string>
|
||||
<!-- Module related -->
|
||||
<string name="module_install_confirm">подтвердите установку модуля %1$s?</string>
|
||||
<string name="unknown_module">неизвестный модуль</string>
|
||||
@@ -289,6 +291,8 @@
|
||||
<string name="advanced_settings">Расширенные</string>
|
||||
<string name="appearance_settings">Внешний вид</string>
|
||||
<string name="back">Возвращение</string>
|
||||
<string name="susfs_enabled">SuSFS включен</string>
|
||||
<string name="susfs_disabled">SuSFS выключен</string>
|
||||
<string name="background_set_success">Фон успешно установлен</string>
|
||||
<string name="background_removed">Пользовательский фон удалён</string>
|
||||
<string name="icon_switch_title">Альт. иконка</string>
|
||||
@@ -605,6 +609,7 @@
|
||||
<string name="loop_paths_section">Циклические пути</string>
|
||||
<string name="add_loop_path">Добавить циклический путь</string>
|
||||
<!-- 循环路径功能描述 -->
|
||||
<string name="sus_loop_path_feature_label">Циклический путь SUS</string>
|
||||
<string name="sus_loop_paths_description_title">Конфигурация пути цикла</string>
|
||||
<string name="sus_loop_paths_description_text">Пути цикла повторно отмечены как SUS_PATH в каждом пользовательском приложении, не являющемся root, или изолированном запуске службы. Это помогает решить проблемы, в которых добавленные пути могут иметь сброс статуса inode или повторно созданные inode в ядре.</string>
|
||||
<string name="avc_log_spoofing">Спуф AVC лога</string>
|
||||
@@ -657,6 +662,7 @@
|
||||
<string name="uid_multi_user_scan_title">Поиск многопользовательских приложений</string>
|
||||
<string name="uid_multi_user_scan_summary">Когда включено, сканирует приложения для всех пользователей, включая рабочие профили</string>
|
||||
<string name="uid_scanner_setting_failed">Не удалось установить, проверьте права доступа</string>
|
||||
<string name="uid_scanner_setting_error">Не удалось установить: %s</string>
|
||||
<string name="clean_runtime_environment">Очистить среду Runtime</string>
|
||||
<string name="clean_runtime_environment_summary">Очистить среду Runtime и остановить службу сканирования</string>
|
||||
<string name="clean_runtime_environment_confirm">Вы уверены, что хотите очистить среду Runtime? Это остановит службу сканирования и удалит связанные с ней файлы.</string>
|
||||
@@ -699,6 +705,9 @@
|
||||
<string name="log_viewer_clear_logs">Очистить логи</string>
|
||||
<string name="log_viewer_clear_logs_confirm">Вы уверены, что хотите удалить выбранный файл журнала? Это действие нельзя отменить.</string>
|
||||
<string name="log_viewer_logs_cleared">Логи успешно очищены</string>
|
||||
<string name="log_viewer_select_file">Выберите файл журнала</string>
|
||||
<string name="log_viewer_current_log">Текущий лог</string>
|
||||
<string name="log_viewer_old_log">Старый лог</string>
|
||||
<string name="log_viewer_filter_type">Фильтрация по типу</string>
|
||||
<string name="log_viewer_all_types">Все типы</string>
|
||||
<string name="log_viewer_showing_entries">Показаны записи %1$d из %2$d</string>
|
||||
@@ -726,6 +735,8 @@
|
||||
<string name="umount_path_restart_notice">Для применения изменений необходима перезагрузка. Система применит новый конфиг при следующем запуске.</string>
|
||||
<string name="add_umount_path">Добавить путь размонтирования</string>
|
||||
<string name="mount_path">Смонтировать путь</string>
|
||||
<string name="check_mount_type">Проверить тип монтирования</string>
|
||||
<string name="check_mount_type_overlay">Проверить, является ли оверлеем</string>
|
||||
<string name="umount_flags">Флаги размонтирования</string>
|
||||
<string name="umount_flags_hint">0=Обычное размонтирование, 8=MNT_DETACH, -1=Автоматически</string>
|
||||
<string name="flags">Флаги</string>
|
||||
|
||||
@@ -124,6 +124,7 @@
|
||||
<string name="selected_lkm">Selected LKM: %s</string>
|
||||
<string name="save_log">Shrani Dnevnike</string>
|
||||
<string name="log_saved">Logs saved</string>
|
||||
<string name="sus_su_mode">SuS SU mode:</string>
|
||||
<!-- Module related -->
|
||||
<string name="module_install_confirm">confirm install module %1$s?</string>
|
||||
<string name="unknown_module">unknown module</string>
|
||||
@@ -273,6 +274,8 @@
|
||||
<string name="advanced_settings">Advanced Settings</string>
|
||||
<string name="appearance_settings">Customize the toolbar</string>
|
||||
<string name="back">Comeback</string>
|
||||
<string name="susfs_enabled">SuSFS enabled</string>
|
||||
<string name="susfs_disabled">SuSFS disabled</string>
|
||||
<string name="background_set_success">Background set successfully</string>
|
||||
<string name="background_removed">Removed custom backgrounds</string>
|
||||
<string name="icon_switch_title">Alternate icon</string>
|
||||
|
||||
@@ -126,6 +126,7 @@
|
||||
<string name="selected_lkm">เลือก LKM: %s</string>
|
||||
<string name="save_log">บันทึกบันทึก</string>
|
||||
<string name="log_saved">บันทึก Log แล้ว</string>
|
||||
<string name="sus_su_mode">SuS SU mode:</string>
|
||||
<!-- Module related -->
|
||||
<string name="module_install_confirm">confirm install module %1$s?</string>
|
||||
<string name="unknown_module">unknown module</string>
|
||||
@@ -275,6 +276,8 @@
|
||||
<string name="advanced_settings">Advanced Settings</string>
|
||||
<string name="appearance_settings">Customize the toolbar</string>
|
||||
<string name="back">Comeback</string>
|
||||
<string name="susfs_enabled">SuSFS enabled</string>
|
||||
<string name="susfs_disabled">SuSFS disabled</string>
|
||||
<string name="background_set_success">Background set successfully</string>
|
||||
<string name="background_removed">Removed custom backgrounds</string>
|
||||
<string name="icon_switch_title">Alternate icon</string>
|
||||
|
||||
@@ -112,6 +112,7 @@
|
||||
<string name="install_upload_lkm_file">Yerel LKM dosyası kullan</string>
|
||||
<string name="install_only_support_ko_file">Yalnızca .ko dosyaları desteklenir</string>
|
||||
<string name="select_file_tip">%1$s bölüm görüntüsü önerilir</string>
|
||||
<string name="select_file_tip_vendor">(kararsız)</string>
|
||||
<string name="select_kmi">KMI seçin</string>
|
||||
<string name="settings_uninstall">Kaldır</string>
|
||||
<string name="settings_uninstall_temporary">Geçici olarak kaldır</string>
|
||||
@@ -126,6 +127,7 @@
|
||||
<string name="selected_lkm">Seçilen LKM: %s</string>
|
||||
<string name="save_log">Günlükleri kaydet</string>
|
||||
<string name="log_saved">Günlükler kaydedildi</string>
|
||||
<string name="sus_su_mode">SuS SU modu:</string>
|
||||
<!-- Module related -->
|
||||
<string name="module_install_confirm">%1$s modülünü yüklemek istediğinizden emin misiniz?</string>
|
||||
<string name="unknown_module">Bilinmeyen modül</string>
|
||||
@@ -286,6 +288,8 @@
|
||||
<string name="advanced_settings">Gelişmiş Ayarlar</string>
|
||||
<string name="appearance_settings">Araç çubuğunu özelleştir</string>
|
||||
<string name="back">Geri</string>
|
||||
<string name="susfs_enabled">SuSFS etkin</string>
|
||||
<string name="susfs_disabled">SuSFS devre dışı</string>
|
||||
<string name="background_set_success">Arka plan başarıyla ayarlandı</string>
|
||||
<string name="background_removed">Özel arka planlar kaldırıldı</string>
|
||||
<string name="icon_switch_title">Alternatif simge</string>
|
||||
@@ -602,6 +606,7 @@
|
||||
<string name="loop_paths_section">Döngü Yolları</string>
|
||||
<string name="add_loop_path">Döngü Yolu Ekle</string>
|
||||
<!-- 循环路径功能描述 -->
|
||||
<string name="sus_loop_path_feature_label">SUS Döngü Yolu</string>
|
||||
<string name="sus_loop_paths_description_title">Döngü Yolu Yapılandırması</string>
|
||||
<string name="sus_loop_paths_description_text">Döngü yolları, her kök olmayan (non-root) kullanıcı uygulaması veya yalıtılmış hizmet başlangıcında SUS_PATH olarak yeniden işaretlenir. Bu, eklenen yolların inode durumunun sıfırlanması veya çekirdekte yeniden oluşturulması gibi sorunları gidermeye yardımcı olur.</string>
|
||||
<string name="avc_log_spoofing">AVC Günlük Kaydı Taklidi</string>
|
||||
@@ -655,6 +660,7 @@ etkin: Çekirdekteki AVC günlük kaydında, \'su\' komutuna ait tcontext\'i \'k
|
||||
<string name="uid_multi_user_scan_title">Çok Kullanıcılı Uygulama Taraması</string>
|
||||
<string name="uid_multi_user_scan_summary">Etkinleştirildiğinde, iş profilleri de dahil olmak üzere tüm kullanıcıların uygulamalarını tarar.</string>
|
||||
<string name="uid_scanner_setting_failed">Ayar başarısız oldu, lütfen izinleri kontrol edin</string>
|
||||
<string name="uid_scanner_setting_error">Ayar başarısız oldu: %s</string>
|
||||
<string name="clean_runtime_environment">Çalışma Zamanı Ortamını Temizle</string>
|
||||
<string name="clean_runtime_environment_summary">Çalışma zamanı dosyalarını temizleyin ve tarayıcı hizmetini durdurun</string>
|
||||
<string name="clean_runtime_environment_confirm">Çalışma zamanı ortamını temizlemek istediğinizden emin misiniz? Bu işlem tarayıcı hizmetini durduracak ve ilgili dosyaları kaldıracaktır.</string>
|
||||
@@ -697,6 +703,9 @@ etkin: Çekirdekteki AVC günlük kaydında, \'su\' komutuna ait tcontext\'i \'k
|
||||
<string name="log_viewer_clear_logs">Günlükleri Temizle</string>
|
||||
<string name="log_viewer_clear_logs_confirm">Seçili günlük dosyasını temizlemek istediğinizden emin misiniz? Bu işlem geri alınamaz.</string>
|
||||
<string name="log_viewer_logs_cleared">Günlükler başarıyla temizlendi</string>
|
||||
<string name="log_viewer_select_file">Günlük Dosyası Seç</string>
|
||||
<string name="log_viewer_current_log">Mevcut Günlük</string>
|
||||
<string name="log_viewer_old_log">Eski Günlük</string>
|
||||
<string name="log_viewer_filter_type">Türe Göre Filtrele</string>
|
||||
<string name="log_viewer_all_types">Tüm Türler</string>
|
||||
<string name="log_viewer_showing_entries">%2$d girişten %1$d tanesi gösteriliyor</string>
|
||||
|
||||
@@ -111,6 +111,7 @@
|
||||
<string name="install_inactive_slot_warning">Ваш пристрій буде **ПРИМУСОВО** завантажено в поточний неактивний слот після перезавантаження!\nВикористовуйте цю опцію лише після завершення OTA.\nПродовжити?</string>
|
||||
<string name="install_next">Далі</string>
|
||||
<string name="select_file_tip">Рекомендується образ розділу %1$s</string>
|
||||
<string name="select_file_tip_vendor">(нестабільно)</string>
|
||||
<string name="select_kmi">Вибрати KMI</string>
|
||||
<string name="settings_uninstall">Видалити</string>
|
||||
<string name="settings_uninstall_temporary">Тимчасово видалити</string>
|
||||
@@ -125,6 +126,7 @@
|
||||
<string name="selected_lkm">Обраний LKM: %s</string>
|
||||
<string name="save_log">Зберегти логи</string>
|
||||
<string name="log_saved">Логи збережено</string>
|
||||
<string name="sus_su_mode">Режим SuS SU:</string>
|
||||
<!-- Module related -->
|
||||
<string name="module_install_confirm">Підтвердити встановлення модуля %1$s?</string>
|
||||
<string name="unknown_module">невідомий модуль</string>
|
||||
@@ -276,6 +278,8 @@
|
||||
<string name="advanced_settings">Розширені налаштування</string>
|
||||
<string name="appearance_settings">Налаштувати панель інструментів</string>
|
||||
<string name="back">Повернутися</string>
|
||||
<string name="susfs_enabled">SuSFS увімкнено</string>
|
||||
<string name="susfs_disabled">SuSFS вимкнено</string>
|
||||
<string name="background_set_success">Фон успішно встановлено</string>
|
||||
<string name="background_removed">Видалено власні фони</string>
|
||||
<string name="icon_switch_title">Альтернативна іконка</string>
|
||||
|
||||
@@ -110,6 +110,7 @@
|
||||
<string name="install_inactive_slot_warning">Thiết bị của bạn sẽ **BUỘC** phải khởi động vào phân vùng chưa được sử dụng!\nChỉ sử dụng tùy chọn này sau khi cập nhật OTA hoàn tất.\nTiếp tục?</string>
|
||||
<string name="install_next">Kế tiếp</string>
|
||||
<string name="select_file_tip">Phân vùng %1$s được khuyến nghị</string>
|
||||
<string name="select_file_tip_vendor">(Thử nghiệm)</string>
|
||||
<string name="select_kmi">Chọn KMI</string>
|
||||
<string name="settings_uninstall">Gỡ cài đặt</string>
|
||||
<string name="settings_uninstall_temporary">Gỡ cài đặt tạm thời</string>
|
||||
@@ -124,6 +125,7 @@
|
||||
<string name="selected_lkm">Đã chọn LKM: %s</string>
|
||||
<string name="save_log">Lưu nhật ký</string>
|
||||
<string name="log_saved">Nhật ký đã được lưu</string>
|
||||
<string name="sus_su_mode">Chế độ SuS SU:</string>
|
||||
<!-- Module related -->
|
||||
<string name="module_install_confirm">Xác nhận cài đặt module %1$s?</string>
|
||||
<string name="unknown_module">Module không xác định</string>
|
||||
@@ -277,6 +279,8 @@
|
||||
<string name="advanced_settings">Cài đặt nâng cao</string>
|
||||
<string name="appearance_settings">Cài đặt giao diện</string>
|
||||
<string name="back">Trở lại</string>
|
||||
<string name="susfs_enabled">SuSFS đã bật</string>
|
||||
<string name="susfs_disabled">SuSFS đã tắt</string>
|
||||
<string name="background_set_success">Đã cài đặt hình nền thành công</string>
|
||||
<string name="background_removed">Đã xóa hình nền tùy chỉnh</string>
|
||||
<string name="icon_switch_title">Thay thế icon</string>
|
||||
@@ -593,6 +597,7 @@
|
||||
<string name="loop_paths_section">Đường dẫn Vòng lặp</string>
|
||||
<string name="add_loop_path">Thêm Đường dẫn Vòng lặp</string>
|
||||
<!-- 循环路径功能描述 -->
|
||||
<string name="sus_loop_path_feature_label">Đường dẫn Vòng lặp SuS</string>
|
||||
<string name="sus_loop_paths_description_title">Cấu hình Đường dẫn Vòng lặp</string>
|
||||
<string name="sus_loop_paths_description_text">Đường dẫn Vòng lặp được đổi tên thành SUS_PATH mỗi khi một ứng dụng không phải root hoặc dịch vụ cô lập được khởi động. Điều này giúp giải quyết vấn đề đường dẫn đã thêm có thể trở nên không hợp lệ do trạng thái inode được đặt lại hoặc inode được tạo lại trong Kernel</string>
|
||||
<string name="avc_log_spoofing">Giả mạo nhật ký AVC</string>
|
||||
@@ -646,6 +651,7 @@ Bật: Kích hoạt tính năng giả mạo sus tcontext của \'su\' thành \'k
|
||||
<string name="uid_multi_user_scan_title">Quét ứng dụng nhiều người dùng</string>
|
||||
<string name="uid_multi_user_scan_summary">Khi được bật, tất cả ứng dụng của người dùng sẽ được quét, bao gồm cả dữ liệu công việc, v.v</string>
|
||||
<string name="uid_scanner_setting_failed">Thiết lập thất bại, vui lòng kiểm tra quyền</string>
|
||||
<string name="uid_scanner_setting_error">Thiết lập thất bại: %s</string>
|
||||
<string name="clean_runtime_environment">Dọn dẹp môi trường hoạt động</string>
|
||||
<string name="clean_runtime_environment_summary">Dọn dẹp các file hoạt động và dừng quét các dịch vụ</string>
|
||||
<string name="clean_runtime_environment_confirm">Bạn có chắc chắn muốn dọn dẹp môi trường hoạt động không? Thao tác này sẽ dừng dịch vụ quét và xóa các file liên quan</string>
|
||||
@@ -688,6 +694,9 @@ Bật: Kích hoạt tính năng giả mạo sus tcontext của \'su\' thành \'k
|
||||
<string name="log_viewer_clear_logs">Xoá nhật ký</string>
|
||||
<string name="log_viewer_clear_logs_confirm">Bạn có chắc chắn muốn xóa tệp nhật ký đã chọn không? Thao tác này không thể hoàn tác</string>
|
||||
<string name="log_viewer_logs_cleared">Đã xoá nhật ký thành công</string>
|
||||
<string name="log_viewer_select_file">Chọn tệp nhật ký</string>
|
||||
<string name="log_viewer_current_log">Nhật ký hiện tại</string>
|
||||
<string name="log_viewer_old_log">Nhật ký cũ</string>
|
||||
<string name="log_viewer_filter_type">Lọc theo loại</string>
|
||||
<string name="log_viewer_all_types">Tất cả các loại</string>
|
||||
<string name="log_viewer_showing_entries">Hiển thị %1$d trong tổng %2$d nhật ký</string>
|
||||
|
||||
@@ -113,6 +113,7 @@
|
||||
<string name="install_upload_lkm_file">使用本地 LKM 文件</string>
|
||||
<string name="install_only_support_ko_file">仅支持选择 .ko 文件</string>
|
||||
<string name="select_file_tip">建议选择 %1$s 分区镜像</string>
|
||||
<string name="select_file_tip_vendor">(实验性的)</string>
|
||||
<string name="select_kmi">选择 KMI</string>
|
||||
<string name="settings_uninstall">卸载</string>
|
||||
<string name="settings_uninstall_temporary">临时卸载</string>
|
||||
@@ -127,6 +128,7 @@
|
||||
<string name="selected_lkm">已选择的 LKM:%s</string>
|
||||
<string name="save_log">保存日志</string>
|
||||
<string name="log_saved">日志已保存</string>
|
||||
<string name="sus_su_mode">SuS SU 模式:</string>
|
||||
<!-- Module related -->
|
||||
<string name="module_install_confirm">确认安装模块 %1$s?</string>
|
||||
<string name="unknown_module">未知模块</string>
|
||||
@@ -287,6 +289,8 @@
|
||||
<string name="advanced_settings">高级设置</string>
|
||||
<string name="appearance_settings">外观设置</string>
|
||||
<string name="back">返回</string>
|
||||
<string name="susfs_enabled">SuSFS 已启用</string>
|
||||
<string name="susfs_disabled">SuSFS 已禁用</string>
|
||||
<string name="background_set_success">背景设置成功</string>
|
||||
<string name="background_removed">已移除自定义背景</string>
|
||||
<string name="icon_switch_title">备选图标</string>
|
||||
@@ -603,6 +607,7 @@
|
||||
<string name="loop_paths_section">循环路径</string>
|
||||
<string name="add_loop_path">添加循环路径</string>
|
||||
<!-- 循环路径功能描述 -->
|
||||
<string name="sus_loop_path_feature_label">SuS 循环路径</string>
|
||||
<string name="sus_loop_paths_description_title">循环路径配置</string>
|
||||
<string name="sus_loop_paths_description_text">循环路径会在每次非 root 用户应用或隔离服务启动时重新标记为 SUS_PATH。这有助于解决添加的路径可能因 inode 状态重置或内核中 inode 重新创建而失效的问题</string>
|
||||
<string name="avc_log_spoofing">AVC 日志欺骗</string>
|
||||
@@ -656,6 +661,7 @@
|
||||
<string name="uid_multi_user_scan_title">多用户应用扫描</string>
|
||||
<string name="uid_multi_user_scan_summary">开启后将扫描所有用户的应用,包括工作资料等</string>
|
||||
<string name="uid_scanner_setting_failed">设置失败,请检查权限</string>
|
||||
<string name="uid_scanner_setting_error">设置失败: %s</string>
|
||||
<string name="clean_runtime_environment">清理运行环境</string>
|
||||
<string name="clean_runtime_environment_summary">清理运行时文件并停止扫描服务</string>
|
||||
<string name="clean_runtime_environment_confirm">您确定要清理运行环境吗?这将停止扫描服务并删除相关文件</string>
|
||||
@@ -698,6 +704,9 @@
|
||||
<string name="log_viewer_clear_logs">清空日志</string>
|
||||
<string name="log_viewer_clear_logs_confirm">确定要清空选中的日志文件吗?此操作无法撤销。</string>
|
||||
<string name="log_viewer_logs_cleared">日志清空成功</string>
|
||||
<string name="log_viewer_select_file">选择日志文件</string>
|
||||
<string name="log_viewer_current_log">当前日志</string>
|
||||
<string name="log_viewer_old_log">旧日志</string>
|
||||
<string name="log_viewer_filter_type">按类型筛选</string>
|
||||
<string name="log_viewer_all_types">所有类型</string>
|
||||
<string name="log_viewer_showing_entries">显示 %1$d / %2$d 条记录</string>
|
||||
@@ -724,6 +733,8 @@
|
||||
<string name="umount_path_restart_notice">添加或删除路径后需要重启设备才能生效。系统会在下次启动时应用新的配置。</string>
|
||||
<string name="add_umount_path">添加 Umount 路径</string>
|
||||
<string name="mount_path">挂载路径</string>
|
||||
<string name="check_mount_type">检查挂载类型</string>
|
||||
<string name="check_mount_type_overlay">检查是否为 overlay 类型</string>
|
||||
<string name="umount_flags">卸载标志</string>
|
||||
<string name="umount_flags_hint">0=正常卸载, 8=MNT_DETACH, -1=自动</string>
|
||||
<string name="flags">标志</string>
|
||||
|
||||
@@ -124,6 +124,7 @@
|
||||
<string name="selected_lkm">選擇嘅 LKM:%s</string>
|
||||
<string name="save_log">存儲日誌</string>
|
||||
<string name="log_saved">日誌已存儲</string>
|
||||
<string name="sus_su_mode">SuS SU 模式:</string>
|
||||
<!-- Module related -->
|
||||
<string name="module_install_confirm">確認安裝模組 %1$s?</string>
|
||||
<string name="unknown_module">未知模組</string>
|
||||
@@ -275,6 +276,8 @@
|
||||
<string name="advanced_settings">高級配置</string>
|
||||
<string name="appearance_settings">外觀配置</string>
|
||||
<string name="back">返回</string>
|
||||
<string name="susfs_enabled">SuSFS 已啟用</string>
|
||||
<string name="susfs_disabled">SuSFS 已禁用</string>
|
||||
<string name="background_set_success">背景設定成功</string>
|
||||
<string name="background_removed">已移除自定義背景</string>
|
||||
<string name="icon_switch_title">備選圖標</string>
|
||||
@@ -573,6 +576,7 @@
|
||||
<string name="home_zygisk_implement">Zygisk 實現</string>
|
||||
<!-- 循环路径相关 -->
|
||||
<!-- 循环路径功能描述 -->
|
||||
<string name="sus_loop_path_feature_label">SuS 循環路徑</string>
|
||||
<string name="sus_loop_paths_description_title">循環路徑配置</string>
|
||||
<string name="sus_loop_paths_description_text">循環路徑會喺每次非 root 用戶應用程式或者隔離服務啟動時,重新標記做 SUS_PATH。咁樣可以解決因為 inode 狀態重設或者核心重新建立 inode 而令到添加嘅路徑失效嘅問題。</string>
|
||||
<string name="avc_log_spoofing">AVC 日誌欺騙</string>
|
||||
|
||||
@@ -110,6 +110,7 @@
|
||||
<string name="install_inactive_slot_warning">將在重新啟動後強制切換至另一槽位!\n注意:僅能在 OTA 更新完成後重新啟動前使用。\n確定繼續?</string>
|
||||
<string name="install_next">下一步</string>
|
||||
<string name="select_file_tip">建議選擇 %1$s 分區映像檔</string>
|
||||
<string name="select_file_tip_vendor">(實驗性的)</string>
|
||||
<string name="select_kmi">選擇 KMI</string>
|
||||
<string name="settings_uninstall">解除安裝</string>
|
||||
<string name="settings_uninstall_temporary">臨時解除安裝</string>
|
||||
@@ -124,6 +125,7 @@
|
||||
<string name="selected_lkm">已選擇的 LKM:%s</string>
|
||||
<string name="save_log">儲存日誌</string>
|
||||
<string name="log_saved">日誌已儲存</string>
|
||||
<string name="sus_su_mode">SuS SU 模式:</string>
|
||||
<!-- Module related -->
|
||||
<string name="module_install_confirm">確定安裝模組 %1$s?</string>
|
||||
<string name="unknown_module">未知模組</string>
|
||||
@@ -277,6 +279,8 @@
|
||||
<string name="advanced_settings">進階設定</string>
|
||||
<string name="appearance_settings">外觀設定</string>
|
||||
<string name="back">返回</string>
|
||||
<string name="susfs_enabled">SuSFS 已啟用</string>
|
||||
<string name="susfs_disabled">SuSFS 已禁用</string>
|
||||
<string name="background_set_success">背景設定成功</string>
|
||||
<string name="background_removed">已移除自訂背景</string>
|
||||
<string name="icon_switch_title">備用圖示</string>
|
||||
@@ -589,6 +593,7 @@
|
||||
<string name="loop_paths_section">循環路徑</string>
|
||||
<string name="add_loop_path">新增循環路徑</string>
|
||||
<!-- 循环路径功能描述 -->
|
||||
<string name="sus_loop_path_feature_label">SuS 循環路徑</string>
|
||||
<string name="sus_loop_paths_description_title">循環路徑設定</string>
|
||||
<string name="sus_loop_paths_description_text">循環路徑會在每次非 root 使用者應用程式或隔離服務啟動時重新標記為 SUS_PATH。這有助於解決新增的路徑可能因 inode 狀態重設或內核中 inode 重新建立而失效的問題</string>
|
||||
<string name="avc_log_spoofing">AVC 日誌偽裝</string>
|
||||
@@ -642,6 +647,7 @@
|
||||
<string name="uid_multi_user_scan_title">多使用者應用掃描</string>
|
||||
<string name="uid_multi_user_scan_summary">開啟後將掃描所有使用者的應用,包括工作資料等</string>
|
||||
<string name="uid_scanner_setting_failed">設定失敗,請檢查許可權</string>
|
||||
<string name="uid_scanner_setting_error">設定失敗: %s</string>
|
||||
<string name="clean_runtime_environment">清理執行環境</string>
|
||||
<string name="clean_runtime_environment_summary">清理執行時檔案並停止掃描服務</string>
|
||||
<string name="clean_runtime_environment_confirm">您確定要清理執行環境嗎?這將停止掃描服務並刪除相關檔案</string>
|
||||
|
||||
@@ -115,6 +115,7 @@
|
||||
<string name="install_upload_lkm_file">Use local LKM file</string>
|
||||
<string name="install_only_support_ko_file">Only .ko files are supported</string>
|
||||
<string name="select_file_tip">%1$s partition image is recommended</string>
|
||||
<string name="select_file_tip_vendor">(Unstable)</string>
|
||||
<string name="select_kmi">Select KMI</string>
|
||||
<string name="settings_uninstall">Uninstall</string>
|
||||
<string name="settings_uninstall_temporary">Uninstall temporarily</string>
|
||||
@@ -129,6 +130,7 @@
|
||||
<string name="selected_lkm">Selected LKM: %s</string>
|
||||
<string name="save_log">Save logs</string>
|
||||
<string name="log_saved">Logs saved</string>
|
||||
<string name="sus_su_mode">SuS SU mode:</string>
|
||||
<!-- Module related -->
|
||||
<string name="module_install_confirm">Confirm install module %1$s?</string>
|
||||
<string name="unknown_module">Unknown module</string>
|
||||
@@ -290,6 +292,8 @@
|
||||
<string name="advanced_settings">Advanced Settings</string>
|
||||
<string name="appearance_settings">Customize the toolbar</string>
|
||||
<string name="back">Comeback</string>
|
||||
<string name="susfs_enabled">SuSFS enabled</string>
|
||||
<string name="susfs_disabled">SuSFS disabled</string>
|
||||
<string name="background_set_success">Background set successfully</string>
|
||||
<string name="background_removed">Removed custom backgrounds</string>
|
||||
<string name="icon_switch_title">Alternate icon</string>
|
||||
@@ -606,6 +610,7 @@
|
||||
<string name="loop_paths_section">Loop Paths</string>
|
||||
<string name="add_loop_path">Add Loop Path</string>
|
||||
<!-- 循环路径功能描述 -->
|
||||
<string name="sus_loop_path_feature_label">SUS Loop Path</string>
|
||||
<string name="sus_loop_paths_description_title">Loop Path Configuration</string>
|
||||
<string name="sus_loop_paths_description_text">Loop paths are re-flagged as SUS_PATH on each non-root user app or isolated service startup. This helps address issues where added paths may have their inode status reset or inode re-created in the kernel</string>
|
||||
<string name="avc_log_spoofing">AVC Log Spoofing</string>
|
||||
@@ -663,6 +668,7 @@ Important Note:\n
|
||||
<string name="uid_multi_user_scan_title">Multi-User Application Scanning</string>
|
||||
<string name="uid_multi_user_scan_summary">When enabled, scans applications for all users, including work profiles</string>
|
||||
<string name="uid_scanner_setting_failed">Setting failed, please check permissions</string>
|
||||
<string name="uid_scanner_setting_error">Setting failed: %s</string>
|
||||
<string name="clean_runtime_environment">Clean Runtime Environment</string>
|
||||
<string name="clean_runtime_environment_summary">Clean up runtime files and stop the scanner service</string>
|
||||
<string name="clean_runtime_environment_confirm">Are you sure you want to clean the runtime environment? This will stop the scanner service and remove related files.</string>
|
||||
@@ -705,6 +711,9 @@ Important Note:\n
|
||||
<string name="log_viewer_clear_logs">Clear Logs</string>
|
||||
<string name="log_viewer_clear_logs_confirm">Are you sure you want to clear the selected log file? This action cannot be undone.</string>
|
||||
<string name="log_viewer_logs_cleared">Logs cleared successfully</string>
|
||||
<string name="log_viewer_select_file">Select Log File</string>
|
||||
<string name="log_viewer_current_log">Current Log</string>
|
||||
<string name="log_viewer_old_log">Old Log</string>
|
||||
<string name="log_viewer_filter_type">Filter by Type</string>
|
||||
<string name="log_viewer_all_types">All Types</string>
|
||||
<string name="log_viewer_showing_entries">Showing %1$d of %2$d entries</string>
|
||||
@@ -733,6 +742,8 @@ Important Note:\n
|
||||
<string name="umount_path_restart_notice">A reboot is required for changes to take effect. The system will apply the new configuration on the next boot.</string>
|
||||
<string name="add_umount_path">Add Umount Path</string>
|
||||
<string name="mount_path">Mount Path</string>
|
||||
<string name="check_mount_type">Check Mount Type</string>
|
||||
<string name="check_mount_type_overlay">Check if it is an overlay type</string>
|
||||
<string name="umount_flags">Unmount Flags</string>
|
||||
<string name="umount_flags_hint">0=Normal unmount, 8=MNT_DETACH, -1=Auto</string>
|
||||
<string name="flags">Flags</string>
|
||||
|
||||
@@ -390,32 +390,6 @@ enum Kernel {
|
||||
/// mount point
|
||||
mnt: String,
|
||||
},
|
||||
/// Manage umount list
|
||||
Umount {
|
||||
#[command(subcommand)]
|
||||
command: UmountOp,
|
||||
},
|
||||
/// Notify that module is mounted
|
||||
NotifyModuleMounted,
|
||||
}
|
||||
|
||||
#[derive(clap::Subcommand, Debug)]
|
||||
enum UmountOp {
|
||||
/// Add mount point to umount list
|
||||
Add {
|
||||
/// mount point path
|
||||
mnt: String,
|
||||
/// umount flags (default: 0, MNT_DETACH: 2)
|
||||
#[arg(short, long, default_value = "0")]
|
||||
flags: u32,
|
||||
},
|
||||
/// Delete mount point from umount list
|
||||
Del {
|
||||
/// mount point path
|
||||
mnt: String,
|
||||
},
|
||||
/// Wipe all entries from umount list
|
||||
Wipe,
|
||||
}
|
||||
|
||||
#[cfg(target_arch = "aarch64")]
|
||||
@@ -451,6 +425,7 @@ enum Umount {
|
||||
|
||||
/// Check mount type (overlay)
|
||||
#[arg(long, default_value = "false")]
|
||||
check_mnt: bool,
|
||||
|
||||
/// Umount flags (0 or 8 for MNT_DETACH)
|
||||
#[arg(long, default_value = "-1")]
|
||||
@@ -631,15 +606,6 @@ pub fn run() -> Result<()> {
|
||||
} => crate::boot_patch::restore(boot, magiskboot, flash),
|
||||
Commands::Kernel { command } => match command {
|
||||
Kernel::NukeExt4Sysfs { mnt } => ksucalls::nuke_ext4_sysfs(&mnt),
|
||||
Kernel::Umount { command } => match command {
|
||||
UmountOp::Add { mnt, flags } => ksucalls::umount_list_add(&mnt, flags),
|
||||
UmountOp::Del { mnt } => ksucalls::umount_list_del(&mnt),
|
||||
UmountOp::Wipe => ksucalls::umount_list_wipe().map_err(Into::into),
|
||||
},
|
||||
Kernel::NotifyModuleMounted => {
|
||||
ksucalls::report_module_mounted();
|
||||
Ok(())
|
||||
}
|
||||
},
|
||||
#[cfg(target_arch = "aarch64")]
|
||||
Commands::Kpm { command } => {
|
||||
@@ -661,7 +627,11 @@ pub fn run() -> Result<()> {
|
||||
}
|
||||
}
|
||||
Commands::Umount { command } => match command {
|
||||
Umount::Add { path, flags } => crate::umount_manager::add_umount_path(&path, flags),
|
||||
Umount::Add {
|
||||
path,
|
||||
check_mnt,
|
||||
flags,
|
||||
} => crate::umount_manager::add_umount_path(&path, check_mnt, flags),
|
||||
Umount::Remove { path } => crate::umount_manager::remove_umount_path(&path),
|
||||
Umount::List => crate::umount_manager::list_umount_paths(),
|
||||
Umount::ClearCustom => crate::umount_manager::clear_custom_paths(),
|
||||
|
||||
@@ -18,7 +18,6 @@ const KSU_IOCTL_SET_FEATURE: u32 = 0x40004b0e; // _IOC(_IOC_WRITE, 'K', 14, 0)
|
||||
const KSU_IOCTL_GET_WRAPPER_FD: u32 = 0x40004b0f; // _IOC(_IOC_WRITE, 'K', 15, 0)
|
||||
const KSU_IOCTL_MANAGE_MARK: u32 = 0xc0004b10; // _IOC(_IOC_READ|_IOC_WRITE, 'K', 16, 0)
|
||||
const KSU_IOCTL_NUKE_EXT4_SYSFS: u32 = 0x40004b11; // _IOC(_IOC_WRITE, 'K', 17, 0)
|
||||
const KSU_IOCTL_ADD_TRY_UMOUNT: u32 = 0x40004b12; // _IOC(_IOC_WRITE, 'K', 18, 0)
|
||||
|
||||
#[repr(C)]
|
||||
#[derive(Clone, Copy, Default)]
|
||||
@@ -81,25 +80,12 @@ pub struct NukeExt4SysfsCmd {
|
||||
pub arg: u64,
|
||||
}
|
||||
|
||||
#[repr(C)]
|
||||
#[derive(Clone, Copy, Default)]
|
||||
struct AddTryUmountCmd {
|
||||
arg: u64, // char ptr, this is the mountpoint
|
||||
flags: u32, // this is the flag we use for it
|
||||
mode: u8, // denotes what to do with it 0:wipe_list 1:add_to_list 2:delete_entry
|
||||
}
|
||||
|
||||
// Mark operation constants
|
||||
const KSU_MARK_GET: u32 = 1;
|
||||
const KSU_MARK_MARK: u32 = 2;
|
||||
const KSU_MARK_UNMARK: u32 = 3;
|
||||
const KSU_MARK_REFRESH: u32 = 4;
|
||||
|
||||
// Umount operation constants
|
||||
const KSU_UMOUNT_WIPE: u8 = 0;
|
||||
const KSU_UMOUNT_ADD: u8 = 1;
|
||||
const KSU_UMOUNT_DEL: u8 = 2;
|
||||
|
||||
// Global driver fd cache
|
||||
#[cfg(any(target_os = "linux", target_os = "android"))]
|
||||
static DRIVER_FD: OnceLock<RawFd> = OnceLock::new();
|
||||
@@ -324,38 +310,3 @@ pub fn nuke_ext4_sysfs(mnt: &str) -> anyhow::Result<()> {
|
||||
ksuctl(KSU_IOCTL_NUKE_EXT4_SYSFS, &mut ioctl_cmd as *mut _)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Wipe all entries from umount list
|
||||
pub fn umount_list_wipe() -> std::io::Result<()> {
|
||||
let mut cmd = AddTryUmountCmd {
|
||||
arg: 0,
|
||||
flags: 0,
|
||||
mode: KSU_UMOUNT_WIPE,
|
||||
};
|
||||
ksuctl(KSU_IOCTL_ADD_TRY_UMOUNT, &mut cmd as *mut _)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Add mount point to umount list
|
||||
pub fn umount_list_add(path: &str, flags: u32) -> anyhow::Result<()> {
|
||||
let c_path = std::ffi::CString::new(path)?;
|
||||
let mut cmd = AddTryUmountCmd {
|
||||
arg: c_path.as_ptr() as u64,
|
||||
flags,
|
||||
mode: KSU_UMOUNT_ADD,
|
||||
};
|
||||
ksuctl(KSU_IOCTL_ADD_TRY_UMOUNT, &mut cmd as *mut _)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Delete mount point from umount list
|
||||
pub fn umount_list_del(path: &str) -> anyhow::Result<()> {
|
||||
let c_path = std::ffi::CString::new(path)?;
|
||||
let mut cmd = AddTryUmountCmd {
|
||||
arg: c_path.as_ptr() as u64,
|
||||
flags: 0,
|
||||
mode: KSU_UMOUNT_DEL,
|
||||
};
|
||||
ksuctl(KSU_IOCTL_ADD_TRY_UMOUNT, &mut cmd as *mut _)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ const KSU_IOCTL_UMOUNT_MANAGER: u32 = 0xc0004b6b; // _IOC(_IOC_READ|_IOC_WRITE,
|
||||
#[derive(Clone, Serialize, Deserialize, Debug)]
|
||||
pub struct UmountEntry {
|
||||
pub path: String,
|
||||
pub check_mnt: bool,
|
||||
pub flags: i32,
|
||||
pub is_default: bool,
|
||||
}
|
||||
@@ -33,6 +34,7 @@ pub struct UmountManager {
|
||||
struct UmountManagerCmd {
|
||||
pub operation: u32,
|
||||
pub path: [u8; 256],
|
||||
pub check_mnt: u8,
|
||||
pub flags: i32,
|
||||
pub count: u32,
|
||||
pub entries_ptr: u64,
|
||||
@@ -43,6 +45,7 @@ impl Default for UmountManagerCmd {
|
||||
UmountManagerCmd {
|
||||
operation: 0,
|
||||
path: [0; 256],
|
||||
check_mnt: 0,
|
||||
flags: 0,
|
||||
count: 0,
|
||||
entries_ptr: 0,
|
||||
@@ -109,7 +112,7 @@ impl UmountManager {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn add_entry(&mut self, path: &str, flags: i32) -> Result<()> {
|
||||
pub fn add_entry(&mut self, path: &str, check_mnt: bool, flags: i32) -> Result<()> {
|
||||
let exists = self
|
||||
.defaults
|
||||
.iter()
|
||||
@@ -123,6 +126,7 @@ impl UmountManager {
|
||||
|
||||
let entry = UmountEntry {
|
||||
path: path.to_string(),
|
||||
check_mnt,
|
||||
flags,
|
||||
is_default,
|
||||
};
|
||||
@@ -161,36 +165,43 @@ impl UmountManager {
|
||||
vec![
|
||||
UmountEntry {
|
||||
path: "/odm".to_string(),
|
||||
check_mnt: true,
|
||||
flags: 0,
|
||||
is_default: true,
|
||||
},
|
||||
UmountEntry {
|
||||
path: "/system".to_string(),
|
||||
check_mnt: true,
|
||||
flags: 0,
|
||||
is_default: true,
|
||||
},
|
||||
UmountEntry {
|
||||
path: "/vendor".to_string(),
|
||||
check_mnt: true,
|
||||
flags: 0,
|
||||
is_default: true,
|
||||
},
|
||||
UmountEntry {
|
||||
path: "/product".to_string(),
|
||||
check_mnt: true,
|
||||
flags: 0,
|
||||
is_default: true,
|
||||
},
|
||||
UmountEntry {
|
||||
path: "/system_ext".to_string(),
|
||||
check_mnt: true,
|
||||
flags: 0,
|
||||
is_default: true,
|
||||
},
|
||||
UmountEntry {
|
||||
path: "/data/adb/modules".to_string(),
|
||||
check_mnt: false,
|
||||
flags: -1, // MNT_DETACH
|
||||
is_default: true,
|
||||
},
|
||||
UmountEntry {
|
||||
path: "/debug_ramdisk".to_string(),
|
||||
check_mnt: false,
|
||||
flags: -1, // MNT_DETACH
|
||||
is_default: true,
|
||||
},
|
||||
@@ -215,6 +226,7 @@ impl UmountManager {
|
||||
fn kernel_add_entry(entry: &UmountEntry) -> Result<()> {
|
||||
let mut cmd = UmountManagerCmd {
|
||||
operation: 0,
|
||||
check_mnt: entry.check_mnt as u8,
|
||||
flags: entry.flags,
|
||||
..Default::default()
|
||||
};
|
||||
@@ -243,9 +255,9 @@ pub fn init_umount_manager() -> Result<UmountManager> {
|
||||
Ok(manager)
|
||||
}
|
||||
|
||||
pub fn add_umount_path(path: &str, flags: i32) -> Result<()> {
|
||||
pub fn add_umount_path(path: &str, check_mnt: bool, flags: i32) -> Result<()> {
|
||||
let mut manager = init_umount_manager()?;
|
||||
manager.add_entry(path, flags)?;
|
||||
manager.add_entry(path, check_mnt, flags)?;
|
||||
manager.save_config()?;
|
||||
println!("✓ Added umount path: {}", path);
|
||||
Ok(())
|
||||
@@ -268,13 +280,17 @@ pub fn list_umount_paths() -> Result<()> {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
println!("{:<30} {:<8} {:<10}", "Path", "Flags", "Default");
|
||||
println!(
|
||||
"{:<30} {:<12} {:<8} {:<10}",
|
||||
"Path", "CheckMnt", "Flags", "Default"
|
||||
);
|
||||
println!("{}", "=".repeat(60));
|
||||
|
||||
for entry in entries {
|
||||
println!(
|
||||
"{:<30} {:<8} {:<10}",
|
||||
"{:<30} {:<12} {:<8} {:<10}",
|
||||
entry.path,
|
||||
entry.check_mnt,
|
||||
entry.flags,
|
||||
if entry.is_default { "Yes" } else { "No" }
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user