Compare commits

..

8 Commits

Author SHA1 Message Date
topjohnwu
de2285d5e9 Bump version 2017-12-26 03:59:28 +08:00
topjohnwu
b2483ba437 Add version check within binary 2017-12-26 03:59:28 +08:00
topjohnwu
a82a5e5a49 Update snet.apk 2017-12-26 03:57:22 +08:00
topjohnwu
d161a02e71 Fix bug in sudb init 2017-12-25 01:38:38 +08:00
Ilya Kushnir
d2b6a700b1 Update RU strings 2017-12-25 01:37:05 +08:00
Matthias Urhahn
af203cef24 Update strings.xml
Improved german translation.
2017-12-25 01:36:52 +08:00
Madis
673e917e76 et: Missing strings and improvements 2017-12-25 01:36:38 +08:00
RoySchutte
a3bd41db54 Update strings.xml 2017-12-25 01:36:20 +08:00
12 changed files with 121 additions and 69 deletions

View File

@@ -8,8 +8,8 @@ android {
applicationId "com.topjohnwu.magisk"
minSdkVersion 21
targetSdkVersion 27
versionCode 80
versionName "5.5.0"
versionCode 82
versionName "5.5.1"
ndk {
moduleName 'zipadjust'
abiFilters 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a'

BIN
snet.apk

Binary file not shown.

View File

@@ -1,3 +1,6 @@
### v5.5.1
- Fix an issue in setting up superuser database
### v5.5.0
- Fix dynamic resource loading, prevent crashes when checking SafetyNet
- Update SignAPK to use very little RAM for supporting old devices

View File

@@ -56,7 +56,7 @@ public class FlashActivity extends Activity {
void saveLogs() {
Calendar now = Calendar.getInstance();
String filename = String.format(Locale.US,
"install_log_%04d%02d%02d_%02d:%02d:%02d.log",
"install_log_%04d%02d%02d_%02d%02d%02d.log",
now.get(Calendar.YEAR), now.get(Calendar.MONTH) + 1,
now.get(Calendar.DAY_OF_MONTH), now.get(Calendar.HOUR_OF_DAY),
now.get(Calendar.MINUTE), now.get(Calendar.SECOND));

View File

@@ -114,7 +114,7 @@ public class MagiskLogFragment extends Fragment {
switch (mode) {
case 0:
StringBuildingList logList = new StringBuildingList();
Shell.su(logList, "cat " + Const.MAGISK_LOG + " | tail -n 1000");
Shell.su(logList, "cat " + Const.MAGISK_LOG + " | tail -n 5000");
return logList.getCharSequence();
case 1:
@@ -125,7 +125,7 @@ public class MagiskLogFragment extends Fragment {
case 2:
Calendar now = Calendar.getInstance();
String filename = String.format(Locale.US,
"magisk_log_%04d%02d%02d_%02d:%02d:%02d.log",
"magisk_log_%04d%02d%02d_%02d%02d%02d.log",
now.get(Calendar.YEAR), now.get(Calendar.MONTH) + 1,
now.get(Calendar.DAY_OF_MONTH), now.get(Calendar.HOUR_OF_DAY),
now.get(Calendar.MINUTE), now.get(Calendar.SECOND));

View File

@@ -12,6 +12,7 @@ import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.reflect.Proxy;
@@ -23,50 +24,65 @@ public class CheckSafetyNet extends ParallelTask<Void, Void, Exception> {
private File dexPath;
private DexClassLoader loader;
private Class<?> helperClazz, callbackClazz;
public CheckSafetyNet(Activity activity) {
super(activity);
dexPath = new File(activity.getCacheDir().getParent() + "/snet", "snet.apk");
}
@Override
protected void onPreExecute() {
MagiskManager mm = MagiskManager.get();
if (mm.snetVersion != Const.Value.SNET_VER) {
Shell.sh("rm -rf " + dexPath.getParent());
private void dlSnet() throws IOException {
Shell.sh("rm -rf " + dexPath.getParent());
HttpURLConnection conn = WebService.request(Const.Url.SNET_URL, null);
dexPath.getParentFile().mkdir();
try (
OutputStream out = new BufferedOutputStream(new FileOutputStream(dexPath));
InputStream in = new BufferedInputStream(conn.getInputStream())) {
Utils.inToOut(in, out);
}
mm.snetVersion = Const.Value.SNET_VER;
mm.prefs.edit().putInt(Const.Key.SNET_VER, Const.Value.SNET_VER).apply();
conn.disconnect();
}
private void loadClasses() throws ClassNotFoundException {
loader = new DexClassLoader(dexPath.toString(), dexPath.getParent(),
null, ClassLoader.getSystemClassLoader());
helperClazz = loader.loadClass(Const.SNET_PKG + ".SafetyNetHelper");
callbackClazz = loader.loadClass(Const.SNET_PKG + ".SafetyNetCallback");
}
@Override
protected Exception doInBackground(Void... voids) {
int snet_ver = -1;
try {
if (!dexPath.exists()) {
HttpURLConnection conn = WebService.request(Const.Url.SNET_URL, null);
dexPath.getParentFile().mkdir();
try (
OutputStream out = new BufferedOutputStream(new FileOutputStream(dexPath));
InputStream in = new BufferedInputStream(conn.getInputStream())) {
Utils.inToOut(in, out);
}
conn.disconnect();
if (!dexPath.exists())
dlSnet();
loadClasses();
try {
snet_ver = (int) helperClazz.getMethod("getVersion").invoke(null);
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
if (snet_ver != Const.Value.SNET_VER) {
dlSnet();
loadClasses();
}
loader = new DexClassLoader(dexPath.toString(), dexPath.getParent(),
null, ClassLoader.getSystemClassLoader());
} catch (Exception e) {
return e;
}
return null;
}
@Override
protected void onPostExecute(Exception err) {
MagiskManager mm = MagiskManager.get();
mm.snetVersion = Const.Value.SNET_VER;
mm.prefs.edit().putInt(Const.Key.SNET_VER, Const.Value.SNET_VER).apply();
try {
if (err != null) throw err;
Class<?> helperClazz = loader.loadClass(Const.SNET_PKG + ".SafetyNetHelper");
Class<?> callbackClazz = loader.loadClass(Const.SNET_PKG + ".SafetyNetCallback");
Object helper = helperClazz.getConstructors()[0].newInstance(
getActivity(), dexPath.getPath(), Proxy.newProxyInstance(
loader, new Class[] { callbackClazz }, (proxy, method, args) -> {

View File

@@ -41,6 +41,10 @@ public class SuDatabaseHelper extends SQLiteOpenHelper {
private PackageManager pm;
private SQLiteDatabase mDb;
private static void unmntDB() {
Shell.su(Utils.fmt("umount -l /data/user*/*/%s/*/*.db", MagiskManager.get().getPackageName()));
}
private static Context initDB(boolean verify) {
Context context, de = null;
MagiskManager ce = MagiskManager.get();
@@ -70,16 +74,20 @@ public class SuDatabaseHelper extends SQLiteOpenHelper {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
if (ce.magiskVersionCode < 1410) {
if (context == de) {
unmntDB();
ce.moveDatabaseFrom(de, DB_NAME);
context = ce;
}
} else {
if (context == ce) {
unmntDB();
de.moveDatabaseFrom(ce, DB_NAME);
context = de;
}
}
}
// Context might be updated
db = Utils.getDB(context, DB_NAME);
if (!Shell.rootAccess())
return context;

View File

@@ -84,12 +84,12 @@ public class Const {
public static class Url {
public static final String STABLE_URL = "https://raw.githubusercontent.com/topjohnwu/MagiskManager/update/stable.json";
public static final String BETA_URL = "https://raw.githubusercontent.com/topjohnwu/MagiskManager/update/beta.json";
public static final String SNET_URL = "https://github.com/topjohnwu/MagiskManager/raw/afff3c0a49cec8d797e486be3092e256b4bf5375/snet.apk";
public static final String SNET_URL = "https://github.com/topjohnwu/MagiskManager/raw/a82a5e5a49285df65da91d2e8b24f4783841b515/snet.apk";
public static final String REPO_URL = "https://api.github.com/users/Magisk-Modules-Repo/repos?per_page=100&page=%d";
public static final String FILE_URL = "https://raw.githubusercontent.com/Magisk-Modules-Repo/%s/master/%s";
public static final String ZIP_URL = "https://github.com/Magisk-Modules-Repo/%s/archive/master.zip";
public static final String DONATION_URL = "https://www.paypal.me/topjohnwu";
public static final String XDA_THREAD = "http://forum.xda-developers.com/showthread.php?t=3432382";
public static final String XDA_THREAD = "http://forum.xda-developers.com/showthread.php?t=3473445";
public static final String SOURCE_CODE_URL = "https://github.com/topjohnwu/MagiskManager";
}
@@ -159,7 +159,7 @@ public class Const {
public static final String FLASH_MAGISK = "magisk";
public static final int[] timeoutList = {0, -1, 10, 20, 30, 60};
public static final int UPDATE_SERVICE_VER = 1;
public static final int SNET_VER = 6;
public static final int SNET_VER = 7;
public static final int MIN_MODULE_VER = 1400;
}
}

View File

@@ -55,7 +55,7 @@
<string name="not_installed">Nicht installiert</string>
<!--Log Fragment-->
<string name="menuSaveLog">Log auf speichern</string>
<string name="menuSaveLog">Protokoll speichern</string>
<string name="menuReload">Log erneut laden</string>
<string name="menuClearLog">Log löschen</string>
<string name="logs_cleared">Log gelöscht</string>
@@ -213,4 +213,4 @@
<string name="target_uid">Ziel-UID:\u0020</string>
<string name="command">Befehl:\u0020</string>
</resources>
</resources>

View File

@@ -11,7 +11,6 @@
<!--Status Fragment-->
<string name="magisk_version_error">Magisk pole installitud</string>
<string name="checking_for_updates">Kontrollin uuendusi...</string>
<string name="magisk_update_available">Magisk v%1$s on saadaval!</string>
<string name="invalid_update_channel">Sobimatu uuenduste kanal</string>
@@ -43,6 +42,9 @@
<string name="disable_file_created">Moodul keelatakse järgmisel taaskäivitusel</string>
<string name="disable_file_removed">Moodul lubatakse järgmisel taaskäivitusel</string>
<string name="author">Loodud %1$s poolt</string>
<string name="reboot_recovery">Taaskäivita taastusesse</string>
<string name="reboot_bootloader">Taaskäivita käivitushaldurisse</string>
<string name="reboot_download">Taaskäivita allalaadimisrežiimi</string>
<!--Repo Fragment-->
<string name="update_available">Uuendus saadaval</string>
@@ -107,6 +109,8 @@
<string name="no_boot_file_patch_support">Magisk\'i sihtversioon ei toeta käivituspildi faili paikamist</string>
<string name="boot_file_patch_msg">Vali originaalne käivituspildi väljastus .img või .img.tar vormingus</string>
<string name="complete_uninstall">Täielik eemaldus</string>
<string name="restore_img">Taasta pildid</string>
<string name="uninstall_app">Desinstalli rakendus</string>
<string name="restore_done">Taastus valmis!</string>
<string name="restore_fail">Originaalne varundus puudub!</string>
<string name="uninstall_toast">Eemaldan Magisk Manager\'i 5 sekundi pärast, palun tee peale seda käsitsi taaskäivitus</string>
@@ -173,6 +177,7 @@
<string name="global_summary">Kõik juurkasutaja sessioonid kasutavad globaalset monteerimise nimeruumi</string>
<string name="requester_summary">Juurkasutaja sessioonid võtavad üle selle taotleja nimeruumi</string>
<string name="isolate_summary">Iga juurkasutaja sessioon saab oma isoleeritud nimeruumi</string>
<string name="android_o_not_support">Pole toetatud Androidi versioonis 8.0+</string>
<!--Superuser-->
<string name="su_request_title">Superkasutaja taotlus</string>
@@ -187,18 +192,18 @@
<string name="twentymin">20 min</string>
<string name="thirtymin">30 min</string>
<string name="sixtymin">60 min</string>
<string name="su_allow_toast">%1$s anti superkasutaja õigused</string>
<string name="su_deny_toast">%1$s keelati superkasutaja õigused</string>
<string name="su_allow_toast">Rakendusele %1$s anti superkasutaja õigused</string>
<string name="su_deny_toast">Rakendusel %1$s keelati superkasutaja õigused</string>
<string name="no_apps_found">Rakendusi ei leitud</string>
<string name="su_snack_grant">%1$s superkasutaja õigused on antud</string>
<string name="su_snack_deny">%1$s superkasutaja õigused on keelatud</string>
<string name="su_snack_notif_on">%1$s teated on lubatud</string>
<string name="su_snack_notif_off">%1$s teated on keelatud</string>
<string name="su_snack_log_on">%1$s logimine on lubatud</string>
<string name="su_snack_log_off">%1$s logimine on keelatud</string>
<string name="su_snack_revoke">%1$s õigused on eemaldatud</string>
<string name="su_snack_grant">Rakenduse %1$s superkasutaja õigused on antud</string>
<string name="su_snack_deny">Rakenduse %1$s superkasutaja õigused on keelatud</string>
<string name="su_snack_notif_on">Rakenduse %1$s teated on lubatud</string>
<string name="su_snack_notif_off">Rakenduse %1$s teated on keelatud</string>
<string name="su_snack_log_on">Rakenduse %1$s logimine on lubatud</string>
<string name="su_snack_log_off">Rakenduse %1$s logimine on keelatud</string>
<string name="su_snack_revoke">Rakenduse %1$s õigused on eemaldatud</string>
<string name="su_revoke_title">Eemaldad?</string>
<string name="su_revoke_msg">Kinnitad %1$s õiguste eemaldamise?</string>
<string name="su_revoke_msg">Kinnitad rakenduse %1$s õiguste eemaldamise?</string>
<string name="toast">Hüpik</string>
<string name="none">Puudub</string>

View File

@@ -11,9 +11,9 @@
<!--Status Fragment-->
<string name="magisk_version_error">Magisk niet geïnstalleerd</string>
<string name="checking_for_updates">Controleren op updates…</string>
<string name="magisk_update_available">Magisk v%1$s beschikbaar!</string>
<string name="invalid_update_channel">Ongeldig bijwerkkanaal</string>
<string name="safetyNet_check_text">Tik om SafetyNet controle te starten</string>
<string name="checking_safetyNet_status">SafetyNet status controleren…</string>
<string name="safetyNet_check_success">SafetyNet controle succesvol</string>
@@ -42,6 +42,9 @@
<string name="disable_file_created">Module wordt uitgeschakeld bij volgende herstart</string>
<string name="disable_file_removed">Module wordt ingeschakeld bij volgende herstart</string>
<string name="author">Gemaakt door %1$s</string>
<string name="reboot_recovery">Herstart naar Recovery</string>
<string name="reboot_bootloader">Herstart naar Bootloader</string>
<string name="reboot_download">Herstart naar Download</string>
<!--Repo Fragment-->
<string name="update_available">Update beschikbaar</string>
@@ -91,11 +94,13 @@
<string name="zip_process_msg">Zip-bestand verwerken…</string>
<string name="manager_update_title">Nieuwe Magisk Manager update beschikbaar!</string>
<string name="manager_download_install">Tik om te downloaden en installeren</string>
<string name="dtbo_patched_title">DTBO is gepatched!</string>
<string name="dtbo_patched_reboot">Magisk Manager heeft dtbo.img gepatched, herstarten a.u.b.</string>
<string name="magisk_updates">Magisk updates</string>
<string name="flashing">Flashen</string>
<string name="hide_manager_toast">Magisk Manager verbergen…</string>
<string name="hide_manager_fail_toast">Magisk Manager verbergen mislukt…</string>
<string name="hide_manager_toast2">Dit kan even duren…</string>
<string name="hide_manager_fail_toast">Magisk Manager verbergen mislukt…</string>
<string name="download_zip_only">Alleen zip downloaden</string>
<string name="patch_boot_file">Boot image-bestand patchen</string>
<string name="direct_install">Direct installeren (aangeraden)</string>
@@ -104,11 +109,14 @@
<string name="no_boot_file_patch_support">Magisk versie ondersteund geen boot image-bestand patchen</string>
<string name="boot_file_patch_msg">Kies originele boot image-dump in .img- of .img.tar-formaat</string>
<string name="complete_uninstall">Compleet deïnstalleren</string>
<string name="restore_img">Images herstellen</string>
<string name="uninstall_app">App deïnstalleren</string>
<string name="restore_done">Herstel voltooid!</string>
<string name="restore_fail">Originele back-up bestaat niet!</string>
<string name="uninstall_toast">Magisk Manager wordt over 5 seconden verwijderd, hierna handmatig herstarten aub</string>
<string name="proprietary_title">Google\'s code downloaden</string>
<string name="proprietary_notice">Magisk Manager is FOSS, dus bevat geen SafetyNet API code van Google.\n\nSta je Magisk Manager toe om een extensie te downloaden (bevat GoogleApiClient) voor SafetyNet controles?</string>
<string name="su_db_corrupt">SU database is corrupt, nieuwe db maken…</string>
<!--Settings Activity -->
<string name="settings_general_category">Algemeen</string>
@@ -126,6 +134,8 @@
<string name="settings_update_channel_title">Update-kanaal</string>
<string name="settings_update_stable">Stabiel</string>
<string name="settings_update_beta">Beta</string>
<string name="settings_update_custom">Aangepast</string>
<string name="settings_update_custom_msg">Aangepaste URL invoeren</string>
<string name="settings_boot_format_title">Gepatchte boot uitvoerformaat</string>
<string name="settings_boot_format_summary">Kies het formaat van de boot image uitvoer.\nKies .img om via fastboot/downloadmodus te flashen; kies .img.tar om via ODIN te flashen.</string>
<string name="settings_core_only_title">Magisk basismodus</string>
@@ -166,6 +176,7 @@
<string name="global_summary">Alle rootsessies gebruiken de globale naamruimte</string>
<string name="requester_summary">Rootsessies verkrijgen de verzoeker\'s naamruimte</string>
<string name="isolate_summary">Iedere rootsessie heeft een eigen geïsoleerde naamruimte</string>
<string name="android_o_not_support">Ondersteunt geen Android 8.0+</string>
<!--Superuser-->
<string name="su_request_title">Superuser verzoek</string>

View File

@@ -1,11 +1,14 @@
<resources>
<!--Universal-->
<!--Welcome Activity-->
<string name="modules">Модули</string>
<string name="downloads">Загрузки</string>
<string name="downloads">Репозиторий</string>
<string name="superuser">Суперпользователь</string>
<string name="log">Журнал</string>
<string name="log">Логи</string>
<string name="settings">Настройки</string>
<string name="install">Установка</string>
@@ -16,7 +19,7 @@
<string name="invalid_update_channel">Неверный канал обновлений</string>
<string name="safetyNet_check_text">Проверить статус SafetyNet</string>
<string name="checking_safetyNet_status">Проверка статуса SafetyNet…</string>
<string name="safetyNet_check_success">Проверка SafetyNet пройдена</string>
<string name="safetyNet_check_success">Результат проверки SafetyNet</string>
<string name="safetyNet_api_error">Ошибка SafetyNet API</string>
<string name="safetyNet_network_loss">Нет подключения к сети</string>
<string name="safetyNet_service_disconnected">Служба была остановлена</string>
@@ -24,24 +27,27 @@
<!--Install Fragment-->
<string name="advanced_settings_title">Расширенные настройки</string>
<string name="keep_force_encryption">Оставить шифрование</string>
<string name="keep_dm_verity">Оставить AVB 2.0/dm-verity</string>
<string name="keep_force_encryption">Сохранить шифрование</string>
<string name="keep_dm_verity">Сохранить AVB 2.0/dm-verity</string>
<string name="current_magisk_title">Установлена версия: %1$s</string>
<string name="install_magisk_title">Последняя версия: %1$s</string>
<string name="uninstall">Удаление</string>
<string name="uninstall_magisk_title">Удаление Magisk</string>
<string name="uninstall_magisk_msg">Все модули будут отключены/удалены. Root-права будут удалены. Данные будут зашифрованы.</string>
<string name="update">Обновить %1$s</string>
<!--Module Fragment-->
<string name="no_info_provided">(Нет информации)</string>
<string name="no_modules_found">Модули не обнаружены</string>
<string name="no_modules_found">Модули не найдены</string>
<string name="update_file_created">Модуль будет обновлен после перезагрузки</string>
<string name="remove_file_created">Модуль будет удален после перезагрузки</string>
<string name="remove_file_deleted">Модуль не будет удален после перезагрузки</string>
<string name="disable_file_created">Модуль будет отключен после перезагрузки</string>
<string name="disable_file_removed">Модуль будет активирован после перезагрузки</string>
<string name="author">Разработчик: %1$s</string>
<string name="reboot_recovery">Перезагрузка в Recovery</string>
<string name="reboot_bootloader">Перезагрузка в Bootloader</string>
<string name="reboot_download">Перезагрузка в Download</string>
<!--Repo Fragment-->
<string name="update_available">Доступно обновление</string>
@@ -49,12 +55,12 @@
<string name="not_installed">Не установлены</string>
<!--Log Fragment-->
<string name="menuSaveLog">Сохранить логи</string>
<string name="menuSaveLog">Сохранить лог</string>
<string name="menuReload">Обновить</string>
<string name="menuClearLog">Очистить логи</string>
<string name="logs_cleared">История успешно очищена</string>
<string name="log_is_empty">Журнал пуст</string>
<string name="logs_save_failed">Не удалось сохранить лог-файл в SD Card:</string>
<string name="menuClearLog">Очистить лог</string>
<string name="logs_cleared">Лог успешно очищен</string>
<string name="log_is_empty">Лог пуст</string>
<string name="logs_save_failed">Не удалось сохранить лог в SD Card:</string>
<!--About Activity-->
<string name="about">О приложении</string>
@@ -67,7 +73,7 @@
<string name="support_thread">Страница поддержки</string>
<!--Toasts, Dialogs-->
<string name="permissionNotGranted">Данная функция не будет работать без разрешения на запись во внешнее хранилище</string>
<string name="permissionNotGranted">Требуется разрешение на запись во внешнее хранилище.</string>
<string name="no_thanks">Нет</string>
<string name="yes">Да</string>
<string name="ok">OK</string>
@@ -106,10 +112,12 @@
<string name="no_boot_file_patch_support">Целевая версия Magisk не поддерживает патчинг boot-образов</string>
<string name="boot_file_patch_msg">Выберите файл ядра (boot), .img либо .img.tar формата</string>
<string name="complete_uninstall">Удалить</string>
<string name="restore_img">Восстановить образы</string>
<string name="uninstall_app">Удалить приложение</string>
<string name="restore_done">Восстановление завершено!</string>
<string name="restore_fail">Резервная копия отсутствует!</string>
<string name="uninstall_toast">Удаление Magisk Manager в течении 5 секунд. Выполните перезагрузку.</string>
<string name="proprietary_title">Загрузка собственного кода</string>
<string name="proprietary_title">Загрузка SafetyNet</string>
<string name="proprietary_notice">Magisk Manager — свободно распространяемый продукт, он не содержит собственный код SafetyNet API от Google.\n\nРазрешить Magisk Manager загрузить расширение (содержит GoogleApiClient) для проверки SafetyNet?</string>
<string name="su_db_corrupt">База данных SU повреждена, будет создана новая</string>
@@ -126,10 +134,10 @@
<string name="language">Язык</string>
<string name="system_default">По умолчанию (системный)</string>
<string name="settings_update">Настройки обновления</string>
<string name="settings_update_channel_title">Источник обновления</string>
<string name="settings_update_stable">Стабильный релиз</string>
<string name="settings_update_beta">Beta релиз</string>
<string name="settings_update_custom">Неофициальная сборка</string>
<string name="settings_update_channel_title">Источник обновлений</string>
<string name="settings_update_stable">Стабильный канал</string>
<string name="settings_update_beta">Beta канал</string>
<string name="settings_update_custom">Сторонний канал</string>
<string name="settings_update_custom_msg">Вставьте ссылку</string>
<string name="settings_boot_format_title">Формат образа ядра</string>
<string name="settings_boot_format_summary">Выберите формат патченого образа ядра.\n.img - для прошивки через fastboot/download режим.\n.img.tar - для прошивки через ODIN.</string>
@@ -148,18 +156,18 @@
<string name="settings_su_request_30">30 секунд</string>
<string name="settings_su_request_60">60 секунд</string>
<string name="superuser_access">Уровень доступа</string>
<string name="auto_response">Автоответ</string>
<string name="auto_response">Автоматический ответ</string>
<string name="request_timeout">Период запроса</string>
<string name="superuser_notification">Уведомление суперпользователя</string>
<string name="request_timeout_summary">%1$s сек.</string>
<string name="settings_su_reauth_title">Реаутентификация после обновления</string>
<string name="settings_su_reauth_summary">Перевыдача прав суперпользователя после обновлений приложения</string>
<string name="superuser_notification">Уведомление Суперпользователя</string>
<string name="request_timeout_summary">%1$s секунд</string>
<string name="settings_su_reauth_title">Повторная аутентификация</string>
<string name="settings_su_reauth_summary">Повторный запрос прав Суперпользователя после обновления приложения</string>
<string name="multiuser_mode">Многопользовательский режим</string>
<string name="settings_owner_only">Только владелец</string>
<string name="settings_owner_manage">Регулировка владельцем</string>
<string name="settings_user_independent">Независимый пользователь</string>
<string name="owner_only_summary">Только владелец имеет root-доступ</string>
<string name="owner_only_summary">Только владелец имеет Root-доступ</string>
<string name="owner_manage_summary">Только владелец может управлять root-доступом и обрабатывать запросы на предоставление</string>
<string name="user_indepenent_summary">Каждый пользователь имеет свои собственные правила root-доступа</string>
<string name="multiuser_hint_owner_request">Запрос был отправлен владельцу устройства. Пожалуйста, переключитесь на профиль владельца и предоставьте разрешение</string>
@@ -171,7 +179,8 @@
<string name="global_summary">Все сеансы Суперпользователя используют глобальное пространство имён</string>
<string name="requester_summary">Сессии Суперпользователя наследуют пространство имен запрашивающего</string>
<string name="isolate_summary">Каждая сессия Суперпользователя будет иметь собственное изолированное пространство имен</string>
<string name="android_o_not_support">Не поддерживается в Android 8.0+</string>
<!--Superuser-->
<string name="su_request_title">Запрос прав Суперпользователя</string>
<string name="deny_with_str">Отказать %1$s</string>
@@ -202,7 +211,7 @@
<!--Superuser logs-->
<string name="pid">PID:\u0020</string>
<string name="target_uid">Целевой UID:\u0020</string>
<string name="target_uid">UID:\u0020</string>
<string name="command">Команда:\u0020</string>
</resources>