mirror of
https://github.com/topjohnwu/Magisk.git
synced 2025-08-20 08:47:32 +00:00
Compare commits
30 Commits
manager-v5
...
manager-v5
Author | SHA1 | Date | |
---|---|---|---|
![]() |
15ed3e52f2 | ||
![]() |
8990919dab | ||
![]() |
e5638e4b15 | ||
![]() |
404c6fac9a | ||
![]() |
267395bfa2 | ||
![]() |
920fc5ae99 | ||
![]() |
92ed0ae51b | ||
![]() |
6764a98409 | ||
![]() |
fd7b5f393a | ||
![]() |
2ca528f93f | ||
![]() |
ce2e6b7d35 | ||
![]() |
684c5d225a | ||
![]() |
b75018b03b | ||
![]() |
41499d4b3c | ||
![]() |
383c97c303 | ||
![]() |
74b54ef371 | ||
![]() |
bbf7b4db79 | ||
![]() |
c61f0acab5 | ||
![]() |
398af123b2 | ||
![]() |
315fa9d7d3 | ||
![]() |
fb5e8ef40c | ||
![]() |
e79d764148 | ||
![]() |
ebbee0dc43 | ||
![]() |
ed0c16e201 | ||
![]() |
209fdf349a | ||
![]() |
f49f2afacd | ||
![]() |
8c6330a3c4 | ||
![]() |
337b777125 | ||
![]() |
1b756e8d96 | ||
![]() |
52d478df1a |
25
build.gradle
25
build.gradle
@@ -1,14 +1,15 @@
|
||||
apply plugin: 'com.android.application'
|
||||
|
||||
android {
|
||||
compileSdkVersion 27
|
||||
compileSdkVersion rootProject.ext.compileSdkVersion
|
||||
buildToolsVersion rootProject.ext.buildToolsVersion
|
||||
|
||||
defaultConfig {
|
||||
applicationId "com.topjohnwu.magisk"
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 27
|
||||
versionCode 110
|
||||
versionName "5.6.3"
|
||||
targetSdkVersion rootProject.ext.compileSdkVersion
|
||||
versionCode 115
|
||||
versionName "5.7.0"
|
||||
javaCompileOptions {
|
||||
annotationProcessorOptions {
|
||||
argument('butterknife.debuggable', 'false')
|
||||
@@ -20,7 +21,7 @@ android {
|
||||
release {
|
||||
minifyEnabled true
|
||||
shrinkResources true
|
||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
}
|
||||
compileOptions {
|
||||
@@ -36,20 +37,14 @@ android {
|
||||
}
|
||||
}
|
||||
|
||||
repositories {
|
||||
jcenter()
|
||||
google()
|
||||
maven { url "https://jitpack.io" }
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation fileTree(include: ['*.jar'], dir: 'libs')
|
||||
implementation project(':utils')
|
||||
implementation 'com.github.topjohnwu:libsu:1.1.1'
|
||||
implementation 'com.android.support:recyclerview-v7:27.1.0'
|
||||
implementation 'com.android.support:cardview-v7:27.1.0'
|
||||
implementation 'com.android.support:design:27.1.0'
|
||||
implementation 'com.android.support:support-v4:27.1.0'
|
||||
implementation "com.android.support:recyclerview-v7:${rootProject.ext.supportLibVersion}"
|
||||
implementation "com.android.support:cardview-v7:${rootProject.ext.supportLibVersion}"
|
||||
implementation "com.android.support:design:${rootProject.ext.supportLibVersion}"
|
||||
implementation "com.android.support:support-v4:${rootProject.ext.supportLibVersion}"
|
||||
implementation 'com.jakewharton:butterknife:8.8.1'
|
||||
implementation 'com.atlassian.commonmark:commonmark:0.10.0'
|
||||
implementation 'org.kamranzafar:jtar:2.3'
|
||||
|
@@ -71,6 +71,11 @@
|
||||
</receiver>
|
||||
<receiver android:name=".receivers.ManagerUpdate" />
|
||||
<receiver android:name=".receivers.RebootReceiver" />
|
||||
<receiver android:name=".receivers.ShortcutReceiver">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.LOCALE_CHANGED" />
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
<service android:name=".services.OnBootIntentService" />
|
||||
<service
|
||||
|
@@ -7,6 +7,7 @@ import android.support.annotation.Nullable;
|
||||
import android.support.annotation.StringRes;
|
||||
import android.support.v4.widget.SwipeRefreshLayout;
|
||||
import android.support.v7.widget.CardView;
|
||||
import android.text.TextUtils;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
@@ -22,6 +23,7 @@ import com.topjohnwu.magisk.asyncs.CheckUpdates;
|
||||
import com.topjohnwu.magisk.components.AlertDialogBuilder;
|
||||
import com.topjohnwu.magisk.components.ExpandableView;
|
||||
import com.topjohnwu.magisk.components.Fragment;
|
||||
import com.topjohnwu.magisk.utils.Const;
|
||||
import com.topjohnwu.magisk.utils.ShowUI;
|
||||
import com.topjohnwu.magisk.utils.Topic;
|
||||
import com.topjohnwu.magisk.utils.Utils;
|
||||
@@ -91,7 +93,14 @@ public class MagiskFragment extends Fragment
|
||||
new CheckSafetyNet(getActivity()).exec();
|
||||
collapse();
|
||||
};
|
||||
if (!CheckSafetyNet.dexPath.exists()) {
|
||||
if (!TextUtils.equals(mm.getPackageName(), Const.ORIG_PKG_NAME)) {
|
||||
new AlertDialogBuilder(getActivity())
|
||||
.setTitle(R.string.cannot_check_sn_title)
|
||||
.setMessage(R.string.cannot_check_sn_notice)
|
||||
.setCancelable(true)
|
||||
.setPositiveButton(R.string.ok, null)
|
||||
.show();
|
||||
} else if (!CheckSafetyNet.dexPath.exists()) {
|
||||
// Show dialog
|
||||
new AlertDialogBuilder(getActivity())
|
||||
.setTitle(R.string.proprietary_title)
|
||||
@@ -205,7 +214,7 @@ public class MagiskFragment extends Fragment
|
||||
|
||||
boolean hasNetwork = Utils.checkNetworkStatus();
|
||||
boolean hasRoot = Shell.rootAccess();
|
||||
boolean isUpToDate = mm.magiskVersionCode > 1300;
|
||||
boolean isUpToDate = mm.magiskVersionCode > Const.MAGISK_VER.UNIFIED;
|
||||
|
||||
magiskUpdate.setVisibility(hasNetwork ? View.VISIBLE : View.GONE);
|
||||
safetyNetCard.setVisibility(hasNetwork ? View.VISIBLE : View.GONE);
|
||||
|
@@ -15,8 +15,8 @@ import android.text.TextUtils;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.topjohnwu.magisk.container.Module;
|
||||
import com.topjohnwu.magisk.database.MagiskDatabaseHelper;
|
||||
import com.topjohnwu.magisk.database.RepoDatabaseHelper;
|
||||
import com.topjohnwu.magisk.database.SuDatabaseHelper;
|
||||
import com.topjohnwu.magisk.services.UpdateCheckService;
|
||||
import com.topjohnwu.magisk.utils.Const;
|
||||
import com.topjohnwu.magisk.utils.Topic;
|
||||
@@ -85,7 +85,7 @@ public class MagiskManager extends Shell.ContainerApp {
|
||||
|
||||
// Global resources
|
||||
public SharedPreferences prefs;
|
||||
public SuDatabaseHelper suDB;
|
||||
public MagiskDatabaseHelper mDB;
|
||||
public RepoDatabaseHelper repoDB;
|
||||
public Runnable permissionGrantCallback = null;
|
||||
|
||||
@@ -106,9 +106,9 @@ public class MagiskManager extends Shell.ContainerApp {
|
||||
@Override
|
||||
public void onRootShellInit(@NonNull Shell shell) {
|
||||
try (InputStream utils = getAssets().open(Const.UTIL_FUNCTIONS);
|
||||
InputStream sudb = getResources().openRawResource(R.raw.sudb)) {
|
||||
InputStream magiskDB = getResources().openRawResource(R.raw.magiskdb)) {
|
||||
shell.loadInputStream(null, null, utils);
|
||||
shell.loadInputStream(null, null, sudb);
|
||||
shell.loadInputStream(null, null, magiskDB);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
@@ -131,16 +131,15 @@ public class MagiskManager extends Shell.ContainerApp {
|
||||
} catch (PackageManager.NameNotFoundException ignored) { /* Expected */ }
|
||||
}
|
||||
|
||||
suDB = SuDatabaseHelper.getInstance(this);
|
||||
mDB = MagiskDatabaseHelper.getInstance(this);
|
||||
|
||||
String pkg = suDB.getStrings(Const.Key.SU_REQUESTER, Const.ORIG_PKG_NAME);
|
||||
String pkg = mDB.getStrings(Const.Key.SU_REQUESTER, Const.ORIG_PKG_NAME);
|
||||
if (getPackageName().equals(Const.ORIG_PKG_NAME) && !pkg.equals(Const.ORIG_PKG_NAME)) {
|
||||
suDB.setStrings(Const.Key.SU_REQUESTER, null);
|
||||
mDB.setStrings(Const.Key.SU_REQUESTER, null);
|
||||
Utils.uninstallPkg(pkg);
|
||||
suDB = SuDatabaseHelper.getInstance(this);
|
||||
mDB = MagiskDatabaseHelper.getInstance(this);
|
||||
}
|
||||
|
||||
repoDB = new RepoDatabaseHelper(this);
|
||||
defaultLocale = Locale.getDefault();
|
||||
setLocale();
|
||||
loadConfig();
|
||||
@@ -168,9 +167,9 @@ public class MagiskManager extends Shell.ContainerApp {
|
||||
suRequestTimeout = Utils.getPrefsInt(prefs, Const.Key.SU_REQUEST_TIMEOUT, Const.Value.timeoutList[2]);
|
||||
suResponseType = Utils.getPrefsInt(prefs, Const.Key.SU_AUTO_RESPONSE, Const.Value.SU_PROMPT);
|
||||
suNotificationType = Utils.getPrefsInt(prefs, Const.Key.SU_NOTIFICATION, Const.Value.NOTIFICATION_TOAST);
|
||||
suAccessState = suDB.getSettings(Const.Key.ROOT_ACCESS, Const.Value.ROOT_ACCESS_APPS_AND_ADB);
|
||||
multiuserMode = suDB.getSettings(Const.Key.SU_MULTIUSER_MODE, Const.Value.MULTIUSER_MODE_OWNER_ONLY);
|
||||
suNamespaceMode = suDB.getSettings(Const.Key.SU_MNT_NS, Const.Value.NAMESPACE_MODE_REQUESTER);
|
||||
suAccessState = mDB.getSettings(Const.Key.ROOT_ACCESS, Const.Value.ROOT_ACCESS_APPS_AND_ADB);
|
||||
multiuserMode = mDB.getSettings(Const.Key.SU_MULTIUSER_MODE, Const.Value.MULTIUSER_MODE_OWNER_ONLY);
|
||||
suNamespaceMode = mDB.getSettings(Const.Key.SU_MNT_NS, Const.Value.NAMESPACE_MODE_REQUESTER);
|
||||
|
||||
// config
|
||||
isDarkTheme = prefs.getBoolean(Const.Key.DARK_THEME, false);
|
||||
@@ -211,7 +210,7 @@ public class MagiskManager extends Shell.ContainerApp {
|
||||
try {
|
||||
magiskVersionString = Utils.cmd("magisk -v").split(":")[0];
|
||||
magiskVersionCode = Integer.parseInt(Utils.cmd("magisk -V"));
|
||||
String s = Utils.cmd((magiskVersionCode > 1435 ? "resetprop -p " : "getprop ")
|
||||
String s = Utils.cmd((magiskVersionCode >= Const.MAGISK_VER.RESETPROP_PERSIST ? "resetprop -p " : "getprop ")
|
||||
+ Const.MAGISKHIDE_PROP);
|
||||
magiskHide = s == null || Integer.parseInt(s) != 0;
|
||||
} catch (Exception ignored) {}
|
||||
|
@@ -1,7 +1,6 @@
|
||||
package com.topjohnwu.magisk;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.support.annotation.NonNull;
|
||||
@@ -30,8 +29,8 @@ public class MainActivity extends Activity
|
||||
implements NavigationView.OnNavigationItemSelectedListener, Topic.Subscriber {
|
||||
|
||||
private final Handler mDrawerHandler = new Handler();
|
||||
private SharedPreferences prefs;
|
||||
private int mDrawerItem;
|
||||
private boolean fromShortcut = true;
|
||||
|
||||
@BindView(R.id.toolbar) Toolbar toolbar;
|
||||
@BindView(R.id.drawer_layout) DrawerLayout drawer;
|
||||
@@ -48,7 +47,6 @@ public class MainActivity extends Activity
|
||||
protected void onCreate(final Bundle savedInstanceState) {
|
||||
|
||||
MagiskManager mm = getMagiskManager();
|
||||
prefs = mm.prefs;
|
||||
|
||||
if (!mm.hasInit) {
|
||||
Intent intent = new Intent(this, SplashActivity.class);
|
||||
@@ -95,7 +93,7 @@ public class MainActivity extends Activity
|
||||
navigationView.setNavigationItemSelectedListener(this);
|
||||
|
||||
if (mm.prefs.getInt(Const.Key.APP_VER, -1) < BuildConfig.VERSION_CODE) {
|
||||
prefs.edit().putInt(Const.Key.APP_VER, BuildConfig.VERSION_CODE).apply();
|
||||
mm.prefs.edit().putInt(Const.Key.APP_VER, BuildConfig.VERSION_CODE).apply();
|
||||
new MarkDownWindow(this, getString(R.string.app_changelog),
|
||||
getResources().openRawResource(R.raw.changelog)).exec();
|
||||
}
|
||||
@@ -111,7 +109,7 @@ public class MainActivity extends Activity
|
||||
public void onBackPressed() {
|
||||
if (drawer.isDrawerOpen(navigationView)) {
|
||||
drawer.closeDrawer(navigationView);
|
||||
} else if (mDrawerItem != R.id.magisk) {
|
||||
} else if (mDrawerItem != R.id.magisk && !fromShortcut) {
|
||||
navigate(R.id.magisk);
|
||||
} else {
|
||||
finish();
|
||||
@@ -140,8 +138,8 @@ public class MainActivity extends Activity
|
||||
MagiskManager mm = getMagiskManager();
|
||||
Menu menu = navigationView.getMenu();
|
||||
menu.findItem(R.id.magiskhide).setVisible(
|
||||
Shell.rootAccess() && mm.magiskVersionCode >= 1300
|
||||
&& prefs.getBoolean(Const.Key.MAGISKHIDE, false));
|
||||
Shell.rootAccess() && mm.magiskVersionCode >= Const.MAGISK_VER.UNIFIED
|
||||
&& mm.prefs.getBoolean(Const.Key.MAGISKHIDE, false));
|
||||
menu.findItem(R.id.modules).setVisible(!mm.prefs.getBoolean(Const.Key.COREONLY, false) &&
|
||||
Shell.rootAccess() && mm.magiskVersionCode >= 0);
|
||||
menu.findItem(R.id.downloads).setVisible(!mm.prefs.getBoolean(Const.Key.COREONLY, false)
|
||||
@@ -155,9 +153,6 @@ public class MainActivity extends Activity
|
||||
int itemId = R.id.magisk;
|
||||
if (item != null) {
|
||||
switch (item) {
|
||||
case "magisk":
|
||||
itemId = R.id.magisk;
|
||||
break;
|
||||
case "superuser":
|
||||
itemId = R.id.superuser;
|
||||
break;
|
||||
@@ -190,6 +185,7 @@ public class MainActivity extends Activity
|
||||
navigationView.setCheckedItem(itemId);
|
||||
switch (itemId) {
|
||||
case R.id.magisk:
|
||||
fromShortcut = false;
|
||||
displayFragment(new MagiskFragment(), true);
|
||||
break;
|
||||
case R.id.superuser:
|
||||
|
@@ -156,7 +156,7 @@ public class SettingsActivity extends Activity implements Topic.Subscriber {
|
||||
fingerprint.setSummary(R.string.disable_fingerprint);
|
||||
}
|
||||
|
||||
if (mm.magiskVersionCode >= 1440) {
|
||||
if (mm.magiskVersionCode >= Const.MAGISK_VER.MANAGER_HIDE) {
|
||||
if (mm.getPackageName().equals(Const.ORIG_PKG_NAME)) {
|
||||
hideManager.setOnPreferenceClickListener((pref) -> {
|
||||
new HideManager(getActivity()).exec();
|
||||
@@ -194,7 +194,7 @@ public class SettingsActivity extends Activity implements Topic.Subscriber {
|
||||
if (!Shell.rootAccess()) {
|
||||
prefScreen.removePreference(magiskCategory);
|
||||
generalCatagory.removePreference(hideManager);
|
||||
} else if (mm.magiskVersionCode < 1300) {
|
||||
} else if (mm.magiskVersionCode < Const.MAGISK_VER.UNIFIED) {
|
||||
prefScreen.removePreference(magiskCategory);
|
||||
}
|
||||
}
|
||||
@@ -276,7 +276,7 @@ public class SettingsActivity extends Activity implements Topic.Subscriber {
|
||||
case Const.Key.ROOT_ACCESS:
|
||||
case Const.Key.SU_MULTIUSER_MODE:
|
||||
case Const.Key.SU_MNT_NS:
|
||||
mm.suDB.setSettings(key, Utils.getPrefsInt(prefs, key));
|
||||
mm.mDB.setSettings(key, Utils.getPrefsInt(prefs, key));
|
||||
break;
|
||||
case Const.Key.LOCALE:
|
||||
mm.setLocale();
|
||||
|
@@ -11,23 +11,21 @@ import com.topjohnwu.magisk.asyncs.LoadModules;
|
||||
import com.topjohnwu.magisk.asyncs.ParallelTask;
|
||||
import com.topjohnwu.magisk.asyncs.UpdateRepos;
|
||||
import com.topjohnwu.magisk.components.Activity;
|
||||
import com.topjohnwu.magisk.database.RepoDatabaseHelper;
|
||||
import com.topjohnwu.magisk.receivers.ShortcutReceiver;
|
||||
import com.topjohnwu.magisk.utils.Const;
|
||||
import com.topjohnwu.magisk.utils.Utils;
|
||||
import com.topjohnwu.superuser.Shell;
|
||||
|
||||
public class SplashActivity extends Activity {
|
||||
|
||||
@Override
|
||||
public int getDarkTheme() {
|
||||
return -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
MagiskManager mm = getMagiskManager();
|
||||
|
||||
mm.repoDB = new RepoDatabaseHelper(this);
|
||||
mm.loadMagiskInfo();
|
||||
mm.getDefaultInstallFlags();
|
||||
Utils.loadPrefs();
|
||||
@@ -42,6 +40,9 @@ public class SplashActivity extends Activity {
|
||||
getSystemService(NotificationManager.class).createNotificationChannel(channel);
|
||||
}
|
||||
|
||||
// Setup shortcuts
|
||||
sendBroadcast(new Intent(this, ShortcutReceiver.class));
|
||||
|
||||
LoadModules loadModuleTask = new LoadModules();
|
||||
|
||||
if (Utils.checkNetworkStatus()) {
|
||||
|
@@ -46,7 +46,7 @@ public class SuLogFragment extends Fragment {
|
||||
View v = inflater.inflate(R.layout.fragment_su_log, container, false);
|
||||
unbinder = ButterKnife.bind(this, v);
|
||||
mm = getApplication();
|
||||
adapter = new SuLogAdapter(mm.suDB);
|
||||
adapter = new SuLogAdapter(mm.mDB);
|
||||
recyclerView.setAdapter(adapter);
|
||||
|
||||
updateList();
|
||||
@@ -73,7 +73,7 @@ public class SuLogFragment extends Fragment {
|
||||
updateList();
|
||||
return true;
|
||||
case R.id.menu_clear:
|
||||
mm.suDB.clearLogs();
|
||||
mm.mDB.clearLogs();
|
||||
updateList();
|
||||
return true;
|
||||
default:
|
||||
|
@@ -34,13 +34,13 @@ public class SuperuserFragment extends Fragment {
|
||||
PackageManager pm = getActivity().getPackageManager();
|
||||
MagiskManager mm = getApplication();
|
||||
|
||||
List<Policy> policyList = mm.suDB.getPolicyList(pm);
|
||||
List<Policy> policyList = mm.mDB.getPolicyList(pm);
|
||||
|
||||
if (policyList.size() == 0) {
|
||||
emptyRv.setVisibility(View.VISIBLE);
|
||||
recyclerView.setVisibility(View.GONE);
|
||||
} else {
|
||||
recyclerView.setAdapter(new PolicyAdapter(policyList, mm.suDB, pm));
|
||||
recyclerView.setAdapter(new PolicyAdapter(policyList, mm.mDB, pm));
|
||||
emptyRv.setVisibility(View.GONE);
|
||||
recyclerView.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
@@ -3,7 +3,6 @@ package com.topjohnwu.magisk.adapters;
|
||||
import android.content.Context;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.support.design.widget.Snackbar;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.text.TextUtils;
|
||||
import android.view.LayoutInflater;
|
||||
@@ -16,7 +15,6 @@ import android.widget.TextView;
|
||||
|
||||
import com.topjohnwu.magisk.R;
|
||||
import com.topjohnwu.magisk.asyncs.ParallelTask;
|
||||
import com.topjohnwu.magisk.components.SnackbarMaker;
|
||||
import com.topjohnwu.magisk.utils.Const;
|
||||
import com.topjohnwu.magisk.utils.Topic;
|
||||
import com.topjohnwu.magisk.utils.Utils;
|
||||
@@ -65,30 +63,17 @@ public class ApplicationAdapter extends RecyclerView.Adapter<ApplicationAdapter.
|
||||
holder.appName.setText(info.loadLabel(pm));
|
||||
holder.appPackage.setText(info.packageName);
|
||||
|
||||
// Remove all listeners
|
||||
holder.itemView.setOnClickListener(null);
|
||||
holder.checkBox.setOnCheckedChangeListener(null);
|
||||
|
||||
if (Const.SN_DEFAULTLIST.contains(info.packageName)) {
|
||||
holder.checkBox.setChecked(true);
|
||||
holder.checkBox.setEnabled(false);
|
||||
holder.itemView.setOnClickListener(v ->
|
||||
SnackbarMaker.make(holder.itemView,
|
||||
R.string.safetyNet_hide_notice, Snackbar.LENGTH_LONG).show()
|
||||
);
|
||||
} else {
|
||||
holder.checkBox.setEnabled(true);
|
||||
holder.checkBox.setChecked(mHideList.contains(info.packageName));
|
||||
holder.checkBox.setOnCheckedChangeListener((v, isChecked) -> {
|
||||
if (isChecked) {
|
||||
Shell.Async.su("magiskhide --add " + info.packageName);
|
||||
mHideList.add(info.packageName);
|
||||
} else {
|
||||
Shell.Async.su("magiskhide --rm " + info.packageName);
|
||||
mHideList.remove(info.packageName);
|
||||
}
|
||||
});
|
||||
}
|
||||
holder.checkBox.setChecked(mHideList.contains(info.packageName));
|
||||
holder.checkBox.setOnCheckedChangeListener((v, isChecked) -> {
|
||||
if (isChecked) {
|
||||
Shell.Async.su("magiskhide --add " + info.packageName);
|
||||
mHideList.add(info.packageName);
|
||||
} else {
|
||||
Shell.Async.su("magiskhide --rm " + info.packageName);
|
||||
mHideList.remove(info.packageName);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -16,7 +16,7 @@ import com.topjohnwu.magisk.components.AlertDialogBuilder;
|
||||
import com.topjohnwu.magisk.components.ExpandableView;
|
||||
import com.topjohnwu.magisk.components.SnackbarMaker;
|
||||
import com.topjohnwu.magisk.container.Policy;
|
||||
import com.topjohnwu.magisk.database.SuDatabaseHelper;
|
||||
import com.topjohnwu.magisk.database.MagiskDatabaseHelper;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
@@ -28,11 +28,11 @@ import butterknife.ButterKnife;
|
||||
public class PolicyAdapter extends RecyclerView.Adapter<PolicyAdapter.ViewHolder> {
|
||||
|
||||
private List<Policy> policyList;
|
||||
private SuDatabaseHelper dbHelper;
|
||||
private MagiskDatabaseHelper dbHelper;
|
||||
private PackageManager pm;
|
||||
private Set<Policy> expandList = new HashSet<>();
|
||||
|
||||
public PolicyAdapter(List<Policy> list, SuDatabaseHelper db, PackageManager pm) {
|
||||
public PolicyAdapter(List<Policy> list, MagiskDatabaseHelper db, PackageManager pm) {
|
||||
policyList = list;
|
||||
dbHelper = db;
|
||||
this.pm = pm;
|
||||
|
@@ -13,7 +13,7 @@ import android.widget.TextView;
|
||||
import com.topjohnwu.magisk.R;
|
||||
import com.topjohnwu.magisk.components.ExpandableView;
|
||||
import com.topjohnwu.magisk.container.SuLogEntry;
|
||||
import com.topjohnwu.magisk.database.SuDatabaseHelper;
|
||||
import com.topjohnwu.magisk.database.MagiskDatabaseHelper;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
@@ -27,10 +27,10 @@ public class SuLogAdapter extends SectionedAdapter<SuLogAdapter.SectionHolder, S
|
||||
|
||||
private List<List<Integer>> logEntryList;
|
||||
private Set<Integer> itemExpanded, sectionExpanded;
|
||||
private SuDatabaseHelper suDB;
|
||||
private MagiskDatabaseHelper suDB;
|
||||
private Cursor suLogCursor = null;
|
||||
|
||||
public SuLogAdapter(SuDatabaseHelper db) {
|
||||
public SuLogAdapter(MagiskDatabaseHelper db) {
|
||||
suDB = db;
|
||||
logEntryList = Collections.emptyList();
|
||||
sectionExpanded = new HashSet<>();
|
||||
|
@@ -43,31 +43,26 @@ public class CheckSafetyNet extends ParallelTask<Void, Void, Exception> {
|
||||
conn.disconnect();
|
||||
}
|
||||
|
||||
private void loadClasses() throws ClassNotFoundException {
|
||||
loader = new DexClassLoader(dexPath.toString(), dexPath.getParent(),
|
||||
private void dyload() throws Exception {
|
||||
loader = new DexClassLoader(dexPath.getPath(), dexPath.getParent(),
|
||||
null, ClassLoader.getSystemClassLoader());
|
||||
helperClazz = loader.loadClass(Const.SNET_PKG + ".SafetyNetHelper");
|
||||
callbackClazz = loader.loadClass(Const.SNET_PKG + ".SafetyNetCallback");
|
||||
int snet_ver = (int) helperClazz.getMethod("getVersion").invoke(null);
|
||||
if (snet_ver != Const.SNET_VER) {
|
||||
throw new Exception();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Exception doInBackground(Void... voids) {
|
||||
int snet_ver = -1;
|
||||
|
||||
try {
|
||||
if (!dexPath.exists())
|
||||
dlSnet();
|
||||
loadClasses();
|
||||
|
||||
try {
|
||||
snet_ver = (int) helperClazz.getMethod("getVersion").invoke(null);
|
||||
} catch (NoSuchMethodException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
if (snet_ver != Const.SNET_VER) {
|
||||
dyload();
|
||||
} catch (Exception e) {
|
||||
// If dynamic load failed, try re-downloading and reload
|
||||
dlSnet();
|
||||
loadClasses();
|
||||
dyload();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
return e;
|
||||
|
@@ -135,7 +135,7 @@ public class HideManager extends ParallelTask<Void, Void, Boolean> {
|
||||
|
||||
repack.delete();
|
||||
|
||||
mm.suDB.setStrings(Const.Key.SU_REQUESTER, pkg);
|
||||
mm.mDB.setStrings(Const.Key.SU_REQUESTER, pkg);
|
||||
Utils.dumpPrefs();
|
||||
Utils.uninstallPkg(Const.ORIG_PKG_NAME);
|
||||
|
||||
|
@@ -76,11 +76,19 @@ public class InstallMagisk extends ParallelTask<Void, Void, Boolean> {
|
||||
|
||||
List<String> abis = Arrays.asList(Build.SUPPORTED_ABIS);
|
||||
String arch;
|
||||
if (abis.contains("x86_64")) arch = "x64";
|
||||
else if (abis.contains("arm64-v8a")) arch = "arm64";
|
||||
else if (abis.contains("x86")) arch = "x86";
|
||||
else arch = "arm";
|
||||
console.add("- Device platform: " + arch);
|
||||
|
||||
if (mm.remoteMagiskVersionCode >= Const.MAGISK_VER.SEPOL_REFACTOR) {
|
||||
// 32-bit only
|
||||
if (abis.contains("x86")) arch = "x86";
|
||||
else arch = "arm";
|
||||
} else {
|
||||
if (abis.contains("x86_64")) arch = "x64";
|
||||
else if (abis.contains("arm64-v8a")) arch = "arm64";
|
||||
else if (abis.contains("x86")) arch = "x86";
|
||||
else arch = "arm";
|
||||
}
|
||||
|
||||
console.add("- Device platform: " + Build.SUPPORTED_ABIS[0]);
|
||||
|
||||
try {
|
||||
// Unzip files
|
||||
@@ -182,7 +190,7 @@ public class InstallMagisk extends ParallelTask<Void, Void, Boolean> {
|
||||
|
||||
Shell.Sync.sh("mv -f new-boot.img ../",
|
||||
"mv bin/busybox busybox",
|
||||
"rm -rf bin *.img update-binary",
|
||||
"rm -rf magisk.apk bin *.img update-binary",
|
||||
"cd /");
|
||||
|
||||
SuFile patched_boot = new SuFile(install.getParent(), "new-boot.img");
|
||||
|
@@ -1,12 +1,10 @@
|
||||
package com.topjohnwu.magisk.asyncs;
|
||||
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.AsyncTask;
|
||||
|
||||
import com.topjohnwu.magisk.MagiskManager;
|
||||
import com.topjohnwu.magisk.ReposFragment;
|
||||
import com.topjohnwu.magisk.container.Repo;
|
||||
import com.topjohnwu.magisk.database.RepoDatabaseHelper;
|
||||
import com.topjohnwu.magisk.utils.Const;
|
||||
import com.topjohnwu.magisk.utils.Logger;
|
||||
import com.topjohnwu.magisk.utils.WebService;
|
||||
@@ -16,6 +14,7 @@ import org.json.JSONObject;
|
||||
|
||||
import java.io.File;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.text.DateFormat;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
@@ -24,55 +23,81 @@ import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
public class UpdateRepos extends ParallelTask<Void, Void, Void> {
|
||||
|
||||
private static final int CHECK_ETAG = 0;
|
||||
private static final int LOAD_NEXT = 1;
|
||||
private static final int LOAD_PREV = 2;
|
||||
private static final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US);
|
||||
|
||||
private MagiskManager mm;
|
||||
private List<String> cached, etags, newEtags = new ArrayList<>();
|
||||
private RepoDatabaseHelper repoDB;
|
||||
private SharedPreferences prefs;
|
||||
private boolean forceUpdate;
|
||||
|
||||
private int tasks = 0;
|
||||
private AtomicInteger taskCount = new AtomicInteger(0);
|
||||
final private Object allDone = new Object();
|
||||
|
||||
public UpdateRepos(boolean force) {
|
||||
MagiskManager mm = MagiskManager.get();
|
||||
prefs = mm.prefs;
|
||||
repoDB = mm.repoDB;
|
||||
mm = MagiskManager.get();
|
||||
mm.repoLoadDone.reset();
|
||||
// Legacy data cleanup
|
||||
File old = new File(mm.getApplicationInfo().dataDir + "/shared_prefs", "RepoMap.xml");
|
||||
if (old.exists() || prefs.getString("repomap", null) != null) {
|
||||
if (old.exists() || mm.prefs.getString("repomap", null) != null) {
|
||||
old.delete();
|
||||
prefs.edit().remove("version").remove("repomap").remove(Const.Key.ETAG_KEY).apply();
|
||||
repoDB.clearRepo();
|
||||
mm.prefs.edit().remove("version").remove("repomap").remove(Const.Key.ETAG_KEY).apply();
|
||||
mm.repoDB.clearRepo();
|
||||
}
|
||||
forceUpdate = force;
|
||||
}
|
||||
|
||||
private void queueTask(Runnable task) {
|
||||
// Thread pool's queue has an upper bound, batch it with 64 tasks
|
||||
while (taskCount.get() >= 64) {
|
||||
waitTasks();
|
||||
}
|
||||
taskCount.incrementAndGet();
|
||||
AsyncTask.THREAD_POOL_EXECUTOR.execute(() -> {
|
||||
task.run();
|
||||
if (taskCount.decrementAndGet() == 0) {
|
||||
synchronized (allDone) {
|
||||
allDone.notify();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void waitTasks() {
|
||||
if (taskCount.get() == 0)
|
||||
return;
|
||||
synchronized (allDone) {
|
||||
try {
|
||||
allDone.wait();
|
||||
} catch (InterruptedException e) {
|
||||
// Wait again
|
||||
waitTasks();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void loadJSON(String jsonString) throws Exception {
|
||||
JSONArray jsonArray = new JSONArray(jsonString);
|
||||
|
||||
// Empty page, throw error
|
||||
if (jsonArray.length() == 0) throw new Exception();
|
||||
if (jsonArray.length() == 0)
|
||||
throw new Exception();
|
||||
|
||||
for (int i = 0; i < jsonArray.length(); i++) {
|
||||
JSONObject jsonobject = jsonArray.getJSONObject(i);
|
||||
String id = jsonobject.getString("description");
|
||||
String name = jsonobject.getString("name");
|
||||
String lastUpdate = jsonobject.getString("pushed_at");
|
||||
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US);
|
||||
Date updatedDate = format.parse(lastUpdate);
|
||||
++tasks;
|
||||
AsyncTask.THREAD_POOL_EXECUTOR.execute(() -> {
|
||||
Repo repo = repoDB.getRepo(id);
|
||||
JSONObject rawRepo = jsonArray.getJSONObject(i);
|
||||
String id = rawRepo.getString("description");
|
||||
String name = rawRepo.getString("name");
|
||||
Date date = dateFormat.parse(rawRepo.getString("pushed_at"));
|
||||
queueTask(() -> {
|
||||
Repo repo = mm.repoDB.getRepo(id);
|
||||
Boolean updated;
|
||||
try {
|
||||
if (repo == null) {
|
||||
repo = new Repo(name, updatedDate);
|
||||
repo = new Repo(name, date);
|
||||
updated = true;
|
||||
} else {
|
||||
// Popout from cached
|
||||
@@ -81,11 +106,11 @@ public class UpdateRepos extends ParallelTask<Void, Void, Void> {
|
||||
repo.update();
|
||||
updated = true;
|
||||
} else {
|
||||
updated = repo.update(updatedDate);
|
||||
updated = repo.update(date);
|
||||
}
|
||||
}
|
||||
if (updated) {
|
||||
repoDB.addRepo(repo);
|
||||
mm.repoDB.addRepo(repo);
|
||||
publishProgress();
|
||||
}
|
||||
if (!id.equals(repo.getId())) {
|
||||
@@ -93,9 +118,8 @@ public class UpdateRepos extends ParallelTask<Void, Void, Void> {
|
||||
}
|
||||
} catch (Repo.IllegalRepoException e) {
|
||||
Logger.error(e.getMessage());
|
||||
repoDB.removeRepo(id);
|
||||
mm.repoDB.removeRepo(id);
|
||||
}
|
||||
--tasks;
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -111,7 +135,8 @@ public class UpdateRepos extends ParallelTask<Void, Void, Void> {
|
||||
HttpURLConnection conn = WebService.request(url, header);
|
||||
|
||||
try {
|
||||
if (conn == null) throw new Exception();
|
||||
if (conn == null)
|
||||
throw new Exception();
|
||||
if (conn.getResponseCode() == HttpURLConnection.HTTP_NOT_MODIFIED) {
|
||||
newEtags.add(etag);
|
||||
return page + 1 < etags.size() && loadPage(page + 1, CHECK_ETAG);
|
||||
@@ -143,17 +168,6 @@ public class UpdateRepos extends ParallelTask<Void, Void, Void> {
|
||||
return true;
|
||||
}
|
||||
|
||||
private Void waitTasks() {
|
||||
while (tasks > 0) {
|
||||
try {
|
||||
Thread.sleep(5);
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onProgressUpdate(Void... values) {
|
||||
if (ReposFragment.adapter != null)
|
||||
@@ -162,55 +176,52 @@ public class UpdateRepos extends ParallelTask<Void, Void, Void> {
|
||||
|
||||
@Override
|
||||
protected void onPreExecute() {
|
||||
MagiskManager.get().repoLoadDone.setPending();
|
||||
mm.repoLoadDone.setPending();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Void doInBackground(Void... voids) {
|
||||
etags = new ArrayList<>(Arrays.asList(prefs.getString(Const.Key.ETAG_KEY, "").split(",")));
|
||||
cached = repoDB.getRepoIDList();
|
||||
etags = new ArrayList<>(Arrays.asList(mm.prefs.getString(Const.Key.ETAG_KEY, "").split(",")));
|
||||
cached = mm.repoDB.getRepoIDList();
|
||||
|
||||
if (!loadPage(0, CHECK_ETAG)) {
|
||||
// Nothing changed online
|
||||
if (forceUpdate) {
|
||||
for (String id : cached) {
|
||||
if (id == null) continue;
|
||||
++tasks;
|
||||
AsyncTask.THREAD_POOL_EXECUTOR.execute(() -> {
|
||||
Repo repo = repoDB.getRepo(id);
|
||||
queueTask(() -> {
|
||||
Repo repo = mm.repoDB.getRepo(id);
|
||||
try {
|
||||
repo.update();
|
||||
repoDB.addRepo(repo);
|
||||
mm.repoDB.addRepo(repo);
|
||||
} catch (Repo.IllegalRepoException e) {
|
||||
Logger.error(e.getMessage());
|
||||
repoDB.removeRepo(repo);
|
||||
mm.repoDB.removeRepo(repo);
|
||||
}
|
||||
--tasks;
|
||||
});
|
||||
}
|
||||
}
|
||||
return waitTasks();
|
||||
waitTasks();
|
||||
} else {
|
||||
waitTasks();
|
||||
|
||||
// The leftover cached means they are removed from online repo
|
||||
mm.repoDB.removeRepo(cached);
|
||||
|
||||
// Update ETag
|
||||
StringBuilder etagBuilder = new StringBuilder();
|
||||
for (int i = 0; i < newEtags.size(); ++i) {
|
||||
if (i != 0) etagBuilder.append(",");
|
||||
etagBuilder.append(newEtags.get(i));
|
||||
}
|
||||
mm.prefs.edit().putString(Const.Key.ETAG_KEY, etagBuilder.toString()).apply();
|
||||
}
|
||||
|
||||
// Wait till all tasks are done
|
||||
waitTasks();
|
||||
|
||||
// The leftover cached means they are removed from online repo
|
||||
repoDB.removeRepo(cached);
|
||||
|
||||
// Update ETag
|
||||
StringBuilder etagBuilder = new StringBuilder();
|
||||
for (int i = 0; i < newEtags.size(); ++i) {
|
||||
if (i != 0) etagBuilder.append(",");
|
||||
etagBuilder.append(newEtags.get(i));
|
||||
}
|
||||
prefs.edit().putString(Const.Key.ETAG_KEY, etagBuilder.toString()).apply();
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(Void v) {
|
||||
MagiskManager.get().repoLoadDone.publish();
|
||||
mm.repoLoadDone.publish();
|
||||
super.onPostExecute(v);
|
||||
}
|
||||
}
|
||||
|
@@ -33,7 +33,9 @@ public abstract class Activity extends AppCompatActivity {
|
||||
}
|
||||
|
||||
@StyleRes
|
||||
abstract public int getDarkTheme();
|
||||
public int getDarkTheme() {
|
||||
return -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
@@ -41,7 +43,7 @@ public abstract class Activity extends AppCompatActivity {
|
||||
if (this instanceof Topic.Subscriber) {
|
||||
((Topic.Subscriber) this).subscribeTopics();
|
||||
}
|
||||
if (getMagiskManager().isDarkTheme && getDarkTheme() > 0) {
|
||||
if (getMagiskManager().isDarkTheme && getDarkTheme() != -1) {
|
||||
setTheme(getDarkTheme());
|
||||
}
|
||||
}
|
||||
|
@@ -42,7 +42,7 @@ public class Repo extends BaseModule {
|
||||
if (getVersionCode() < 0) {
|
||||
throw new IllegalRepoException("Repo [" + repoName + "] does not contain versionCode");
|
||||
}
|
||||
if (getMinMagiskVersion() < Const.MIN_MODULE_VER) {
|
||||
if (getMinMagiskVersion() < Const.MIN_MODULE_VER()) {
|
||||
throw new IllegalRepoException("Repo [" + repoName + "] is outdated");
|
||||
}
|
||||
}
|
||||
|
@@ -27,7 +27,7 @@ import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
public class SuDatabaseHelper {
|
||||
public class MagiskDatabaseHelper {
|
||||
|
||||
private static final int DATABASE_VER = 5;
|
||||
private static final String POLICY_TABLE = "policies";
|
||||
@@ -36,80 +36,76 @@ public class SuDatabaseHelper {
|
||||
private static final String STRINGS_TABLE = "strings";
|
||||
|
||||
private PackageManager pm;
|
||||
private SQLiteDatabase mDb;
|
||||
private File DB_FILE;
|
||||
private SQLiteDatabase db;
|
||||
|
||||
@NonNull
|
||||
public static SuDatabaseHelper getInstance(MagiskManager mm) {
|
||||
public static MagiskDatabaseHelper getInstance(MagiskManager mm) {
|
||||
try {
|
||||
return new SuDatabaseHelper(mm);
|
||||
return new MagiskDatabaseHelper(mm);
|
||||
} catch (Exception e) {
|
||||
// Let's cleanup everything and try again
|
||||
Shell.Sync.su("sudb_clean '*'");
|
||||
return new SuDatabaseHelper(mm);
|
||||
Shell.Sync.su("db_clean '*'");
|
||||
return new MagiskDatabaseHelper(mm);
|
||||
}
|
||||
}
|
||||
|
||||
private SuDatabaseHelper(MagiskManager mm) {
|
||||
private MagiskDatabaseHelper(MagiskManager mm) {
|
||||
pm = mm.getPackageManager();
|
||||
mDb = openDatabase(mm);
|
||||
mDb.disableWriteAheadLogging();
|
||||
int version = mDb.getVersion();
|
||||
db = openDatabase(mm);
|
||||
db.disableWriteAheadLogging();
|
||||
int version = db.getVersion();
|
||||
if (version < DATABASE_VER) {
|
||||
onUpgrade(mDb, version);
|
||||
onUpgrade(db, version);
|
||||
} else if (version > DATABASE_VER) {
|
||||
onDowngrade(mDb);
|
||||
onDowngrade(db);
|
||||
}
|
||||
mDb.setVersion(DATABASE_VER);
|
||||
db.setVersion(DATABASE_VER);
|
||||
clearOutdated();
|
||||
}
|
||||
|
||||
private SQLiteDatabase openDatabase(MagiskManager mm) {
|
||||
final SuFile GLOBAL_DB = new SuFile("/data/adb/magisk.db", true);
|
||||
DB_FILE = new File(Utils.fmt("/sbin/.core/db-%d/magisk.db", Const.USER_ID));
|
||||
final File DB_FILE = new File(Utils.fmt("/sbin/.core/db-%d/magisk.db", Const.USER_ID));
|
||||
Context de = Build.VERSION.SDK_INT >= Build.VERSION_CODES.N
|
||||
? mm.createDeviceProtectedStorageContext() : mm;
|
||||
if (!DB_FILE.canWrite()) {
|
||||
if (!Shell.rootAccess()) {
|
||||
// We don't want the app to crash, create a db and return
|
||||
DB_FILE = mm.getDatabasePath("su.db");
|
||||
return mm.openOrCreateDatabase("su.db", Context.MODE_PRIVATE, null);
|
||||
}
|
||||
mm.loadMagiskInfo();
|
||||
// Cleanup
|
||||
Shell.Sync.su("sudb_clean " + Const.USER_ID);
|
||||
if (mm.magiskVersionCode < 1410) {
|
||||
Shell.Sync.su("db_clean " + Const.USER_ID);
|
||||
if (mm.magiskVersionCode < Const.MAGISK_VER.FBE_AWARE) {
|
||||
// Super old legacy mode
|
||||
DB_FILE = mm.getDatabasePath("su.db");
|
||||
return mm.openOrCreateDatabase("su.db", Context.MODE_PRIVATE, null);
|
||||
} else if (mm.magiskVersionCode < 1450) {
|
||||
} else if (mm.magiskVersionCode < Const.MAGISK_VER.LEGACY_GLOBAL_DB) {
|
||||
// Legacy mode with FBE aware
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
de.moveDatabaseFrom(mm, "su.db");
|
||||
}
|
||||
DB_FILE = de.getDatabasePath("su.db");
|
||||
return de.openOrCreateDatabase("su.db", Context.MODE_PRIVATE, null);
|
||||
} else {
|
||||
// Global database
|
||||
final SuFile GLOBAL_DB = new SuFile("/data/adb/magisk.db", true);
|
||||
mm.deleteDatabase("su.db");
|
||||
de.deleteDatabase("su.db");
|
||||
if (mm.magiskVersionCode < 1460) {
|
||||
if (mm.magiskVersionCode < Const.MAGISK_VER.HIDDEN_PATH) {
|
||||
// Link to new path
|
||||
File oldDB = new File(de.getFilesDir().getParentFile().getParentFile(),
|
||||
"magisk.db");
|
||||
Shell.Sync.su(Utils.fmt("mv -f %s %s; ln -s %s %s",
|
||||
oldDB, GLOBAL_DB, GLOBAL_DB, oldDB));
|
||||
}
|
||||
if (mm.magiskVersionCode < 1550) {
|
||||
if (mm.magiskVersionCode < Const.MAGISK_VER.SEPOL_REFACTOR) {
|
||||
// We need some additional policies on old versions
|
||||
Shell.Sync.su("magiskpolicy --live " +
|
||||
"'create su_file' 'allow * su_file file *' 'allow * su_file dir *'");
|
||||
Shell.Sync.su("db_sepatch");
|
||||
}
|
||||
if (!GLOBAL_DB.exists()) {
|
||||
Shell.Sync.su("sudb_init");
|
||||
Shell.Sync.su("db_init");
|
||||
SQLiteDatabase.openOrCreateDatabase(GLOBAL_DB, null).close();
|
||||
Shell.Sync.su("sudb_restore");
|
||||
Shell.Sync.su("db_restore");
|
||||
}
|
||||
Shell.Sync.su("sudb_setup " + Process.myUid());
|
||||
Shell.Sync.su("db_setup " + Process.myUid());
|
||||
}
|
||||
}
|
||||
// Not using legacy mode, open the mounted global DB
|
||||
@@ -183,9 +179,9 @@ public class SuDatabaseHelper {
|
||||
|
||||
public void clearOutdated() {
|
||||
// Clear outdated policies
|
||||
mDb.delete(POLICY_TABLE, Utils.fmt("until > 0 AND until < %d", System.currentTimeMillis() / 1000), null);
|
||||
db.delete(POLICY_TABLE, Utils.fmt("until > 0 AND until < %d", System.currentTimeMillis() / 1000), null);
|
||||
// Clear outdated logs
|
||||
mDb.delete(LOG_TABLE, Utils.fmt("time < %d", System.currentTimeMillis() - MagiskManager.get().suLogTimeout * 86400000), null);
|
||||
db.delete(LOG_TABLE, Utils.fmt("time < %d", System.currentTimeMillis() - MagiskManager.get().suLogTimeout * 86400000), null);
|
||||
}
|
||||
|
||||
public void deletePolicy(Policy policy) {
|
||||
@@ -193,16 +189,16 @@ public class SuDatabaseHelper {
|
||||
}
|
||||
|
||||
public void deletePolicy(String pkg) {
|
||||
mDb.delete(POLICY_TABLE, "package_name=?", new String[] { pkg });
|
||||
db.delete(POLICY_TABLE, "package_name=?", new String[] { pkg });
|
||||
}
|
||||
|
||||
public void deletePolicy(int uid) {
|
||||
mDb.delete(POLICY_TABLE, Utils.fmt("uid=%d", uid), null);
|
||||
db.delete(POLICY_TABLE, Utils.fmt("uid=%d", uid), null);
|
||||
}
|
||||
|
||||
public Policy getPolicy(int uid) {
|
||||
Policy policy = null;
|
||||
try (Cursor c = mDb.query(POLICY_TABLE, null, Utils.fmt("uid=%d", uid), null, null, null, null)) {
|
||||
try (Cursor c = db.query(POLICY_TABLE, null, Utils.fmt("uid=%d", uid), null, null, null, null)) {
|
||||
if (c.moveToNext()) {
|
||||
policy = new Policy(c, pm);
|
||||
}
|
||||
@@ -214,15 +210,15 @@ public class SuDatabaseHelper {
|
||||
}
|
||||
|
||||
public void addPolicy(Policy policy) {
|
||||
mDb.replace(POLICY_TABLE, null, policy.getContentValues());
|
||||
db.replace(POLICY_TABLE, null, policy.getContentValues());
|
||||
}
|
||||
|
||||
public void updatePolicy(Policy policy) {
|
||||
mDb.update(POLICY_TABLE, policy.getContentValues(), Utils.fmt("uid=%d", policy.uid), null);
|
||||
db.update(POLICY_TABLE, policy.getContentValues(), Utils.fmt("uid=%d", policy.uid), null);
|
||||
}
|
||||
|
||||
public List<Policy> getPolicyList(PackageManager pm) {
|
||||
try (Cursor c = mDb.query(POLICY_TABLE, null, Utils.fmt("uid/100000=%d", Const.USER_ID),
|
||||
try (Cursor c = db.query(POLICY_TABLE, null, Utils.fmt("uid/100000=%d", Const.USER_ID),
|
||||
null, null, null, null)) {
|
||||
List<Policy> ret = new ArrayList<>(c.getCount());
|
||||
while (c.moveToNext()) {
|
||||
@@ -240,7 +236,7 @@ public class SuDatabaseHelper {
|
||||
}
|
||||
|
||||
public List<List<Integer>> getLogStructure() {
|
||||
try (Cursor c = mDb.query(LOG_TABLE, new String[] { "time" }, Utils.fmt("from_uid/100000=%d", Const.USER_ID),
|
||||
try (Cursor c = db.query(LOG_TABLE, new String[] { "time" }, Utils.fmt("from_uid/100000=%d", Const.USER_ID),
|
||||
null, null, null, "time DESC")) {
|
||||
List<List<Integer>> ret = new ArrayList<>();
|
||||
List<Integer> list = null;
|
||||
@@ -260,28 +256,28 @@ public class SuDatabaseHelper {
|
||||
}
|
||||
|
||||
public Cursor getLogCursor() {
|
||||
return mDb.query(LOG_TABLE, null, Utils.fmt("from_uid/100000=%d", Const.USER_ID),
|
||||
return db.query(LOG_TABLE, null, Utils.fmt("from_uid/100000=%d", Const.USER_ID),
|
||||
null, null, null, "time DESC");
|
||||
}
|
||||
|
||||
public void addLog(SuLogEntry log) {
|
||||
mDb.insert(LOG_TABLE, null, log.getContentValues());
|
||||
db.insert(LOG_TABLE, null, log.getContentValues());
|
||||
}
|
||||
|
||||
public void clearLogs() {
|
||||
mDb.delete(LOG_TABLE, null, null);
|
||||
db.delete(LOG_TABLE, null, null);
|
||||
}
|
||||
|
||||
public void setSettings(String key, int value) {
|
||||
ContentValues data = new ContentValues();
|
||||
data.put("key", key);
|
||||
data.put("value", value);
|
||||
mDb.replace(SETTINGS_TABLE, null, data);
|
||||
db.replace(SETTINGS_TABLE, null, data);
|
||||
}
|
||||
|
||||
public int getSettings(String key, int defaultValue) {
|
||||
int value = defaultValue;
|
||||
try (Cursor c = mDb.query(SETTINGS_TABLE, null, "key=?",new String[] { key }, null, null, null)) {
|
||||
try (Cursor c = db.query(SETTINGS_TABLE, null, "key=?",new String[] { key }, null, null, null)) {
|
||||
if (c.moveToNext()) {
|
||||
value = c.getInt(c.getColumnIndex("value"));
|
||||
}
|
||||
@@ -291,18 +287,18 @@ public class SuDatabaseHelper {
|
||||
|
||||
public void setStrings(String key, String value) {
|
||||
if (value == null) {
|
||||
mDb.delete(STRINGS_TABLE, "key=?", new String[] { key });
|
||||
db.delete(STRINGS_TABLE, "key=?", new String[] { key });
|
||||
} else {
|
||||
ContentValues data = new ContentValues();
|
||||
data.put("key", key);
|
||||
data.put("value", value);
|
||||
mDb.replace(STRINGS_TABLE, null, data);
|
||||
db.replace(STRINGS_TABLE, null, data);
|
||||
}
|
||||
}
|
||||
|
||||
public String getStrings(String key, String defaultValue) {
|
||||
String value = defaultValue;
|
||||
try (Cursor c = mDb.query(STRINGS_TABLE, null, "key=?",new String[] { key }, null, null, null)) {
|
||||
try (Cursor c = db.query(STRINGS_TABLE, null, "key=?",new String[] { key }, null, null, null)) {
|
||||
if (c.moveToNext()) {
|
||||
value = c.getString(c.getColumnIndex("value"));
|
||||
}
|
@@ -26,9 +26,9 @@ public class RepoDatabaseHelper extends SQLiteOpenHelper {
|
||||
mm = Utils.getMagiskManager(context);
|
||||
mDb = getWritableDatabase();
|
||||
|
||||
// Clear bad repos
|
||||
// Remove outdated repos
|
||||
mDb.delete(TABLE_NAME, "minMagisk<?",
|
||||
new String[] { String.valueOf(Const.MIN_MODULE_VER) });
|
||||
new String[] { String.valueOf(Const.MIN_MODULE_VER()) });
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -20,11 +20,11 @@ public class PackageReceiver extends BroadcastReceiver {
|
||||
case Intent.ACTION_PACKAGE_REPLACED:
|
||||
// This will only work pre-O
|
||||
if (mm.prefs.getBoolean(Const.Key.SU_REAUTH, false)) {
|
||||
mm.suDB.deletePolicy(pkg);
|
||||
mm.mDB.deletePolicy(pkg);
|
||||
}
|
||||
break;
|
||||
case Intent.ACTION_PACKAGE_FULLY_REMOVED:
|
||||
mm.suDB.deletePolicy(pkg);
|
||||
mm.mDB.deletePolicy(pkg);
|
||||
Shell.Async.su("magiskhide --rm " + pkg);
|
||||
break;
|
||||
}
|
||||
|
@@ -0,0 +1,87 @@
|
||||
package com.topjohnwu.magisk.receivers;
|
||||
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.ShortcutInfo;
|
||||
import android.content.pm.ShortcutManager;
|
||||
import android.graphics.drawable.Icon;
|
||||
import android.os.Build;
|
||||
import android.support.annotation.RequiresApi;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import com.topjohnwu.magisk.MagiskManager;
|
||||
import com.topjohnwu.magisk.R;
|
||||
import com.topjohnwu.magisk.SplashActivity;
|
||||
import com.topjohnwu.magisk.utils.Const;
|
||||
import com.topjohnwu.magisk.utils.Utils;
|
||||
import com.topjohnwu.superuser.Shell;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class ShortcutReceiver extends BroadcastReceiver {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
|
||||
MagiskManager mm = Utils.getMagiskManager(context);
|
||||
ShortcutManager manager = context.getSystemService(ShortcutManager.class);
|
||||
if (TextUtils.equals(intent.getAction(), Intent.ACTION_LOCALE_CHANGED)) {
|
||||
// It is triggered with locale change, manual load Magisk info
|
||||
mm.loadMagiskInfo();
|
||||
}
|
||||
manager.setDynamicShortcuts(getShortCuts(mm));
|
||||
}
|
||||
}
|
||||
|
||||
@RequiresApi(api = Build.VERSION_CODES.N_MR1)
|
||||
private ArrayList<ShortcutInfo> getShortCuts(MagiskManager mm) {
|
||||
ArrayList<ShortcutInfo> shortCuts = new ArrayList<>();
|
||||
if (Shell.rootAccess() &&
|
||||
!(Const.USER_ID > 0 &&
|
||||
mm.multiuserMode == Const.Value.MULTIUSER_MODE_OWNER_MANAGED)) {
|
||||
shortCuts.add(new ShortcutInfo.Builder(mm, "superuser")
|
||||
.setShortLabel(mm.getString(R.string.superuser))
|
||||
.setIntent(new Intent(mm, SplashActivity.class)
|
||||
.putExtra(Const.Key.OPEN_SECTION, "superuser")
|
||||
.setAction(Intent.ACTION_VIEW)
|
||||
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK))
|
||||
.setIcon(Icon.createWithResource(mm, R.drawable.sc_superuser))
|
||||
.setRank(0)
|
||||
.build());
|
||||
}
|
||||
if (Shell.rootAccess() && mm.magiskVersionCode >= Const.MAGISK_VER.UNIFIED
|
||||
&& mm.prefs.getBoolean(Const.Key.MAGISKHIDE, false)) {
|
||||
shortCuts.add(new ShortcutInfo.Builder(mm, "magiskhide")
|
||||
.setShortLabel(mm.getString(R.string.magiskhide))
|
||||
.setIntent(new Intent(mm, SplashActivity.class)
|
||||
.putExtra(Const.Key.OPEN_SECTION, "magiskhide")
|
||||
.setAction(Intent.ACTION_VIEW)
|
||||
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK))
|
||||
.setIcon(Icon.createWithResource(mm, R.drawable.sc_magiskhide))
|
||||
.setRank(1)
|
||||
.build());
|
||||
}
|
||||
if (!mm.prefs.getBoolean(Const.Key.COREONLY, false) &&
|
||||
Shell.rootAccess() && mm.magiskVersionCode >= 0) {
|
||||
shortCuts.add(new ShortcutInfo.Builder(mm, "modules")
|
||||
.setShortLabel(mm.getString(R.string.modules))
|
||||
.setIntent(new Intent(mm, SplashActivity.class)
|
||||
.putExtra(Const.Key.OPEN_SECTION, "modules")
|
||||
.setAction(Intent.ACTION_VIEW)
|
||||
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK))
|
||||
.setIcon(Icon.createWithResource(mm, R.drawable.sc_extension))
|
||||
.setRank(3)
|
||||
.build());
|
||||
shortCuts.add(new ShortcutInfo.Builder(mm, "downloads")
|
||||
.setShortLabel(mm.getString(R.string.download))
|
||||
.setIntent(new Intent(mm, SplashActivity.class)
|
||||
.putExtra(Const.Key.OPEN_SECTION, "downloads")
|
||||
.setAction(Intent.ACTION_VIEW)
|
||||
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK))
|
||||
.setIcon(Icon.createWithResource(mm, R.drawable.sc_cloud_download))
|
||||
.setRank(2)
|
||||
.build());
|
||||
}
|
||||
return shortCuts;
|
||||
}
|
||||
}
|
@@ -68,7 +68,7 @@ public class RequestActivity extends Activity {
|
||||
|
||||
pm = getPackageManager();
|
||||
mm = Utils.getMagiskManager(this);
|
||||
mm.suDB.clearOutdated();
|
||||
mm.mDB.clearOutdated();
|
||||
|
||||
Intent intent = getIntent();
|
||||
socketPath = intent.getStringExtra("socket");
|
||||
@@ -233,7 +233,7 @@ public class RequestActivity extends Activity {
|
||||
policy.policy = action;
|
||||
if (time >= 0) {
|
||||
policy.until = (time == 0) ? 0 : (System.currentTimeMillis() / 1000 + time * 60);
|
||||
mm.suDB.addPolicy(policy);
|
||||
mm.mDB.addPolicy(policy);
|
||||
}
|
||||
handleAction();
|
||||
}
|
||||
@@ -273,7 +273,7 @@ public class RequestActivity extends Activity {
|
||||
}
|
||||
|
||||
int uid = payload.getAsInteger("uid");
|
||||
policy = mm.suDB.getPolicy(uid);
|
||||
policy = mm.mDB.getPolicy(uid);
|
||||
if (policy == null) {
|
||||
policy = new Policy(uid, pm);
|
||||
}
|
||||
|
@@ -43,7 +43,7 @@ public class SuReceiver extends BroadcastReceiver {
|
||||
action = intent.getStringExtra("action");
|
||||
if (action == null) return;
|
||||
|
||||
policy = mm.suDB.getPolicy(fromUid);
|
||||
policy = mm.mDB.getPolicy(fromUid);
|
||||
if (policy == null) {
|
||||
try {
|
||||
policy = new Policy(fromUid, context.getPackageManager());
|
||||
@@ -84,7 +84,7 @@ public class SuReceiver extends BroadcastReceiver {
|
||||
log.fromPid = pid;
|
||||
log.command = command;
|
||||
log.date = new Date();
|
||||
mm.suDB.addLog(log);
|
||||
mm.mDB.addLog(log);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -3,6 +3,7 @@ package com.topjohnwu.magisk.utils;
|
||||
import android.os.Environment;
|
||||
import android.os.Process;
|
||||
|
||||
import com.topjohnwu.magisk.BuildConfig;
|
||||
import com.topjohnwu.magisk.MagiskManager;
|
||||
import com.topjohnwu.superuser.io.SuFile;
|
||||
|
||||
@@ -13,7 +14,7 @@ import java.util.List;
|
||||
public class Const {
|
||||
|
||||
public static final String DEBUG_TAG = "MagiskManager";
|
||||
public static final String ORIG_PKG_NAME = "com.topjohnwu.magisk";
|
||||
public static final String ORIG_PKG_NAME = BuildConfig.APPLICATION_ID;
|
||||
public static final String SNET_PKG = "com.topjohnwu.snet";
|
||||
public static final String MAGISKHIDE_PROP = "persist.magisk.hide";
|
||||
|
||||
@@ -36,7 +37,10 @@ public class Const {
|
||||
// Versions
|
||||
public static final int UPDATE_SERVICE_VER = 1;
|
||||
public static final int SNET_VER = 7;
|
||||
public static final int MIN_MODULE_VER = 1400;
|
||||
|
||||
public static int MIN_MODULE_VER() {
|
||||
return MagiskManager.get().magiskVersionCode >= 1630 ? 1500 : 1400;
|
||||
}
|
||||
|
||||
public synchronized static SuFile MAGISK_PATH() {
|
||||
SuFile file;
|
||||
@@ -64,15 +68,19 @@ public class Const {
|
||||
"com.google.android.gms"
|
||||
);
|
||||
|
||||
/* A list of apps that already uses SafetyNet
|
||||
* They DO NOT need to be added to hide list */
|
||||
public static final List<String> SN_DEFAULTLIST = Arrays.asList(
|
||||
"com.google.android.apps.walletnfcrel",
|
||||
"com.nianticlabs.pokemongo"
|
||||
);
|
||||
|
||||
public static final int USER_ID = Process.myUid() / 100000;
|
||||
|
||||
public static final class MAGISK_VER {
|
||||
public static final int UNIFIED = 1300;
|
||||
public static final int FBE_AWARE = 1410;
|
||||
public static final int RESETPROP_PERSIST = 1436;
|
||||
public static final int MANAGER_HIDE = 1440;
|
||||
public static final int DTBO_SUPPORT = 1446;
|
||||
public static final int LEGACY_GLOBAL_DB = 1450;
|
||||
public static final int HIDDEN_PATH = 1460;
|
||||
public static final int SEPOL_REFACTOR = 1640;
|
||||
}
|
||||
|
||||
public static class ID {
|
||||
public static final int UPDATE_SERVICE_ID = 1;
|
||||
public static final int FETCH_ZIP = 2;
|
||||
|
@@ -268,7 +268,7 @@ public class ShowUI {
|
||||
Shell.Sync.su(
|
||||
Utils.fmt("echo '%s' > /cache/%s", uninstaller.toString().replace("'", "'\\''"), Const.UNINSTALLER),
|
||||
Utils.fmt("echo '%s' > %s/%s", utils.toString().replace("'", "'\\''"),
|
||||
mm.magiskVersionCode >= 1464 ? "/data/adb/magisk" : "/data/magisk", Const.UTIL_FUNCTIONS)
|
||||
mm.magiskVersionCode >= Const.MAGISK_VER.HIDDEN_PATH ? "/data/adb/magisk" : "/data/magisk", Const.UTIL_FUNCTIONS)
|
||||
);
|
||||
try {
|
||||
uninstaller.close();
|
||||
|
@@ -52,7 +52,7 @@ public class Utils {
|
||||
}
|
||||
|
||||
public static void uninstallPkg(String pkg) {
|
||||
Shell.Sync.su("sudb_clean " + Const.USER_ID, "pm uninstall " + pkg);
|
||||
Shell.Sync.su("db_clean " + Const.USER_ID, "pm uninstall " + pkg);
|
||||
}
|
||||
|
||||
public static void dlAndReceive(Context context, DownloadReceiver receiver, String link, String filename) {
|
||||
@@ -202,7 +202,7 @@ public class Utils {
|
||||
|
||||
public static void patchDTBO() {
|
||||
MagiskManager mm = MagiskManager.get();
|
||||
if (mm.magiskVersionCode >= 1446 && !mm.keepVerity) {
|
||||
if (mm.magiskVersionCode >= Const.MAGISK_VER.DTBO_SUPPORT && !mm.keepVerity) {
|
||||
if (ShellUtils.fastCmdResult(Shell.getShell(), "patch_dtbo_image")) {
|
||||
ShowUI.dtboPatchedNotification();
|
||||
}
|
||||
|
9
src/main/res/drawable-v26/sc_cloud_download.xml
Normal file
9
src/main/res/drawable-v26/sc_cloud_download.xml
Normal file
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/su_request_background" />
|
||||
<foreground>
|
||||
<inset
|
||||
android:drawable="@drawable/ic_cloud_download"
|
||||
android:inset="30%" />
|
||||
</foreground>
|
||||
</adaptive-icon>
|
9
src/main/res/drawable-v26/sc_extension.xml
Normal file
9
src/main/res/drawable-v26/sc_extension.xml
Normal file
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/su_request_background" />
|
||||
<foreground>
|
||||
<inset
|
||||
android:drawable="@drawable/ic_extension"
|
||||
android:inset="30%" />
|
||||
</foreground>
|
||||
</adaptive-icon>
|
9
src/main/res/drawable-v26/sc_magiskhide.xml
Normal file
9
src/main/res/drawable-v26/sc_magiskhide.xml
Normal file
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/su_request_background" />
|
||||
<foreground>
|
||||
<inset
|
||||
android:drawable="@drawable/ic_magiskhide"
|
||||
android:inset="30%" />
|
||||
</foreground>
|
||||
</adaptive-icon>
|
9
src/main/res/drawable-v26/sc_superuser.xml
Normal file
9
src/main/res/drawable-v26/sc_superuser.xml
Normal file
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/su_request_background" />
|
||||
<foreground>
|
||||
<inset
|
||||
android:drawable="@drawable/ic_superuser"
|
||||
android:inset="30%" />
|
||||
</foreground>
|
||||
</adaptive-icon>
|
@@ -1,4 +0,0 @@
|
||||
<vector android:height="24dp" android:viewportHeight="400.0"
|
||||
android:viewportWidth="400.0" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillAlpha="1.00" android:fillColor="#000000" android:pathData="M200.6,24.2C231.8,24.2 263,33 289.6,49.5C304.7,58.8 318.2,70.7 329.8,84.1C351.5,109.6 365.2,141.7 368.8,175C373.6,217.4 361.5,261.5 335.5,295.5C334.2,297.1 332.8,298.7 331.9,300.7C341.7,310.1 351,320 360.9,329.3C322.7,339.3 284.5,349.6 246.3,359.9C256.4,323.5 266,287 275.7,250.5C262.4,250.5 249.1,250.5 235.8,250.5C228.5,269.8 221.2,289.1 214.1,308.4C205.9,308.6 197.8,308.5 189.6,308.5C188.4,306.7 187.1,304.9 185.9,303C192.4,285.5 199.1,268 205.6,250.5C189.5,250.6 173.4,250.3 157.4,250.6C150.4,270 142.9,289.2 135.8,308.5C129.8,308.5 123.9,308.4 117.9,308.6C130.4,317.8 144,325.6 158.9,330.3C171.9,334.6 185.6,336.6 199.4,336.7C199.4,349.4 199.3,362.1 199.4,374.8C165.8,374.9 132.2,364.5 104.4,345.6C91.7,337 80.3,326.5 70.2,314.9C48.5,289.4 34.8,257.3 31.2,224C26.3,180.4 39.2,134.9 66.8,100.7C67.2,99.9 67.7,99.2 68.1,98.4C58.3,88.9 49,79 39.1,69.7C77.3,59.7 115.6,49.4 153.7,39.1C143.6,75.7 133.8,112.5 124.1,149.3C137.9,149.3 151.7,149.2 165.5,149.3C172.9,130 180.2,110.6 187.3,91.2C195.5,90.8 203.7,91 211.8,91C213,92.8 214.3,94.6 215.5,96.3C209.1,114 202.3,131.6 195.8,149.2C211.8,149.3 227.8,149.2 243.9,149.3C251.2,129.9 258.3,110.3 265.8,90.9C271.5,90.8 277.3,91.6 282.9,90.4C280.2,89.5 278.1,87.7 275.9,86.1C254,70.7 227.4,62.2 200.6,62.3C200.6,49.6 200.7,36.9 200.6,24.2M292.5,100C286.4,116.4 280.2,132.8 274,149.3C280.9,149.2 287.8,149.3 294.7,149.2C296,150.8 297.3,152.4 298.6,153.9C297.1,162.1 295.7,170.3 294.3,178.5C283.9,178.5 273.4,178.5 262.9,178.5C257.5,192.7 252.1,206.9 246.9,221.2C258.7,221.3 270.5,221.1 282.3,221.3C283.5,222.9 284.8,224.4 286.1,225.9C284.9,233.7 283.4,241.4 282.1,249.1C281.6,251 283.6,252.1 284.6,253.3C291.5,259.8 297.7,266.9 304.8,273.1C312.9,262.1 319.6,250.1 324.2,237.3C334.3,208.7 334.2,176.7 323.7,148.3C317,130.1 306.4,113.4 292.5,100M95.2,125.9C86.2,138 79,151.4 74.5,165.8C65.3,194.4 66.4,226.3 77.6,254.2C84.6,271.5 95.1,287.4 108.7,300.1C114.9,283.6 121.3,267.1 127.2,250.5C121.5,250.5 115.8,250.5 110,250.5C108.6,250.4 106.7,251 105.8,249.5C104.5,247.9 102.3,246.3 102.9,244.1C104.2,236.5 105.5,228.9 106.8,221.2C117.4,221.2 128.1,221.4 138.7,221.1C143.9,206.9 149.3,192.7 154.6,178.5C142.9,178.4 131.1,178.6 119.3,178.4C117.6,177.3 116.4,175.3 115,173.8C116.3,165.8 117.9,157.9 119,150C118.3,148.2 116.6,147.1 115.3,145.7C108.6,139.2 102.3,132.1 95.2,125.9M168.8,221.2C184.8,221.2 200.8,221.3 216.8,221.2C222.2,207 227.5,192.8 232.8,178.5C216.8,178.5 200.7,178.5 184.6,178.5C179.4,192.8 174,207 168.8,221.2Z"/>
|
||||
</vector>
|
@@ -4,6 +4,6 @@
|
||||
android:viewportWidth="24.0"
|
||||
android:viewportHeight="24.0">
|
||||
<path
|
||||
android:fillColor="#FF000000"
|
||||
android:fillColor="@color/primary_dark"
|
||||
android:pathData="M19.35,10.04C18.67,6.59 15.64,4 12,4 9.11,4 6.6,5.64 5.35,8.04 2.34,8.36 0,10.91 0,14c0,3.31 2.69,6 6,6h13c2.76,0 5,-2.24 5,-5 0,-2.64 -2.05,-4.78 -4.65,-4.96zM17,13l-5,5 -5,-5h3V9h4v4h3z"/>
|
||||
</vector>
|
||||
|
@@ -4,6 +4,6 @@
|
||||
android:viewportHeight="24.0"
|
||||
android:viewportWidth="24.0">
|
||||
<path
|
||||
android:fillColor="#FF000000"
|
||||
android:fillColor="@color/primary_dark"
|
||||
android:pathData="M20.5,11H19V7c0,-1.1 -0.9,-2 -2,-2h-4V3.5C13,2.12 11.88,1 10.5,1S8,2.12 8,3.5V5H4c-1.1,0 -1.99,0.9 -1.99,2v3.8H3.5c1.49,0 2.7,1.21 2.7,2.7s-1.21,2.7 -2.7,2.7H2V20c0,1.1 0.9,2 2,2h3.8v-1.5c0,-1.49 1.21,-2.7 2.7,-2.7 1.49,0 2.7,1.21 2.7,2.7V22H17c1.1,0 2,-0.9 2,-2v-4h1.5c1.38,0 2.5,-1.12 2.5,-2.5S21.88,11 20.5,11z"/>
|
||||
</vector>
|
||||
|
10
src/main/res/drawable/ic_magiskhide.xml
Normal file
10
src/main/res/drawable/ic_magiskhide.xml
Normal file
@@ -0,0 +1,10 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:height="24dp"
|
||||
android:viewportHeight="400.0"
|
||||
android:viewportWidth="400.0"
|
||||
android:width="24dp">
|
||||
<path
|
||||
android:fillAlpha="1.00"
|
||||
android:fillColor="@color/primary_dark"
|
||||
android:pathData="M200.6,24.2C231.8,24.2 263,33 289.6,49.5C304.7,58.8 318.2,70.7 329.8,84.1C351.5,109.6 365.2,141.7 368.8,175C373.6,217.4 361.5,261.5 335.5,295.5C334.2,297.1 332.8,298.7 331.9,300.7C341.7,310.1 351,320 360.9,329.3C322.7,339.3 284.5,349.6 246.3,359.9C256.4,323.5 266,287 275.7,250.5C262.4,250.5 249.1,250.5 235.8,250.5C228.5,269.8 221.2,289.1 214.1,308.4C205.9,308.6 197.8,308.5 189.6,308.5C188.4,306.7 187.1,304.9 185.9,303C192.4,285.5 199.1,268 205.6,250.5C189.5,250.6 173.4,250.3 157.4,250.6C150.4,270 142.9,289.2 135.8,308.5C129.8,308.5 123.9,308.4 117.9,308.6C130.4,317.8 144,325.6 158.9,330.3C171.9,334.6 185.6,336.6 199.4,336.7C199.4,349.4 199.3,362.1 199.4,374.8C165.8,374.9 132.2,364.5 104.4,345.6C91.7,337 80.3,326.5 70.2,314.9C48.5,289.4 34.8,257.3 31.2,224C26.3,180.4 39.2,134.9 66.8,100.7C67.2,99.9 67.7,99.2 68.1,98.4C58.3,88.9 49,79 39.1,69.7C77.3,59.7 115.6,49.4 153.7,39.1C143.6,75.7 133.8,112.5 124.1,149.3C137.9,149.3 151.7,149.2 165.5,149.3C172.9,130 180.2,110.6 187.3,91.2C195.5,90.8 203.7,91 211.8,91C213,92.8 214.3,94.6 215.5,96.3C209.1,114 202.3,131.6 195.8,149.2C211.8,149.3 227.8,149.2 243.9,149.3C251.2,129.9 258.3,110.3 265.8,90.9C271.5,90.8 277.3,91.6 282.9,90.4C280.2,89.5 278.1,87.7 275.9,86.1C254,70.7 227.4,62.2 200.6,62.3C200.6,49.6 200.7,36.9 200.6,24.2M292.5,100C286.4,116.4 280.2,132.8 274,149.3C280.9,149.2 287.8,149.3 294.7,149.2C296,150.8 297.3,152.4 298.6,153.9C297.1,162.1 295.7,170.3 294.3,178.5C283.9,178.5 273.4,178.5 262.9,178.5C257.5,192.7 252.1,206.9 246.9,221.2C258.7,221.3 270.5,221.1 282.3,221.3C283.5,222.9 284.8,224.4 286.1,225.9C284.9,233.7 283.4,241.4 282.1,249.1C281.6,251 283.6,252.1 284.6,253.3C291.5,259.8 297.7,266.9 304.8,273.1C312.9,262.1 319.6,250.1 324.2,237.3C334.3,208.7 334.2,176.7 323.7,148.3C317,130.1 306.4,113.4 292.5,100M95.2,125.9C86.2,138 79,151.4 74.5,165.8C65.3,194.4 66.4,226.3 77.6,254.2C84.6,271.5 95.1,287.4 108.7,300.1C114.9,283.6 121.3,267.1 127.2,250.5C121.5,250.5 115.8,250.5 110,250.5C108.6,250.4 106.7,251 105.8,249.5C104.5,247.9 102.3,246.3 102.9,244.1C104.2,236.5 105.5,228.9 106.8,221.2C117.4,221.2 128.1,221.4 138.7,221.1C143.9,206.9 149.3,192.7 154.6,178.5C142.9,178.4 131.1,178.6 119.3,178.4C117.6,177.3 116.4,175.3 115,173.8C116.3,165.8 117.9,157.9 119,150C118.3,148.2 116.6,147.1 115.3,145.7C108.6,139.2 102.3,132.1 95.2,125.9M168.8,221.2C184.8,221.2 200.8,221.3 216.8,221.2C222.2,207 227.5,192.8 232.8,178.5C216.8,178.5 200.7,178.5 184.6,178.5C179.4,192.8 174,207 168.8,221.2Z"/>
|
||||
</vector>
|
@@ -3,5 +3,7 @@
|
||||
android:width="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path android:fillColor="#000" android:pathData="M5.41,21L6.12,17H2.12L2.47,15H6.47L7.53,9H3.53L3.88,7H7.88L8.59,3H10.59L9.88,7H15.88L16.59,3H18.59L17.88,7H21.88L21.53,9H17.53L16.47,15H20.47L20.12,17H16.12L15.41,21H13.41L14.12,17H8.12L7.41,21H5.41M9.53,9L8.47,15H14.47L15.53,9H9.53Z" />
|
||||
<path
|
||||
android:fillColor="@color/primary_dark"
|
||||
android:pathData="M5.41,21L6.12,17H2.12L2.47,15H6.47L7.53,9H3.53L3.88,7H7.88L8.59,3H10.59L9.88,7H15.88L16.59,3H18.59L17.88,7H21.88L21.53,9H17.53L16.47,15H20.47L20.12,17H16.12L15.41,21H13.41L14.12,17H8.12L7.41,21H5.41M9.53,9L8.47,15H14.47L15.53,9H9.53Z" />
|
||||
</vector>
|
13
src/main/res/drawable/sc_cloud_download.xml
Normal file
13
src/main/res/drawable/sc_cloud_download.xml
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item>
|
||||
<shape android:shape="oval">
|
||||
<solid android:color="@color/su_request_background"/>
|
||||
</shape>
|
||||
</item>
|
||||
<item>
|
||||
<inset
|
||||
android:drawable="@drawable/ic_cloud_download"
|
||||
android:inset="13dp"/>
|
||||
</item>
|
||||
</layer-list>
|
13
src/main/res/drawable/sc_extension.xml
Normal file
13
src/main/res/drawable/sc_extension.xml
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item>
|
||||
<shape android:shape="oval">
|
||||
<solid android:color="@color/su_request_background"/>
|
||||
</shape>
|
||||
</item>
|
||||
<item>
|
||||
<inset
|
||||
android:drawable="@drawable/ic_extension"
|
||||
android:inset="13dp"/>
|
||||
</item>
|
||||
</layer-list>
|
13
src/main/res/drawable/sc_magiskhide.xml
Normal file
13
src/main/res/drawable/sc_magiskhide.xml
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item>
|
||||
<shape android:shape="oval">
|
||||
<solid android:color="@color/su_request_background"/>
|
||||
</shape>
|
||||
</item>
|
||||
<item>
|
||||
<inset
|
||||
android:drawable="@drawable/ic_magiskhide"
|
||||
android:inset="13dp"/>
|
||||
</item>
|
||||
</layer-list>
|
13
src/main/res/drawable/sc_superuser.xml
Normal file
13
src/main/res/drawable/sc_superuser.xml
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item>
|
||||
<shape android:shape="oval">
|
||||
<solid android:color="@color/su_request_background"/>
|
||||
</shape>
|
||||
</item>
|
||||
<item>
|
||||
<inset
|
||||
android:drawable="@drawable/ic_superuser"
|
||||
android:inset="13dp"/>
|
||||
</item>
|
||||
</layer-list>
|
@@ -17,7 +17,7 @@
|
||||
android:visible="false"/>
|
||||
<item
|
||||
android:id="@+id/magiskhide"
|
||||
android:icon="@drawable/ic_autoroot"
|
||||
android:icon="@drawable/ic_magiskhide"
|
||||
android:title="@string/magiskhide" />
|
||||
|
||||
</group>
|
||||
|
@@ -1,2 +1,5 @@
|
||||
### v5.6.3
|
||||
- Fix repo loading UI logic
|
||||
### v5.7.0
|
||||
- Add app shortcuts for Android 7.1+
|
||||
- Bump minimal module `minMagisk` to `1500`
|
||||
- Adjustments for new sepolicies on v16.4+
|
||||
- Fix crashes when refreshing the online repo
|
||||
|
@@ -1,31 +1,37 @@
|
||||
sudb_clean() {
|
||||
db_sepatch() {
|
||||
magiskpolicy --live 'create magisk_file' 'attradd magisk_file mlstrustedobject' \
|
||||
'allow * magisk_file file *' 'allow * magisk_file dir *' \
|
||||
'allow magisk_file * filesystem associate'
|
||||
}
|
||||
|
||||
db_clean() {
|
||||
local USERID=$1
|
||||
local DIR="/sbin/.core/db-${USERID}"
|
||||
umount -l /data/user*/*/*/databases/su.db $DIR $DIR/*
|
||||
rm -rf $DIR
|
||||
[ "$USERID" = "*" ] && rm -f /data/adb/magisk.db
|
||||
[ "$USERID" = "*" ] && rm -fv /data/adb/magisk.db*
|
||||
}
|
||||
|
||||
sudb_init() {
|
||||
db_init() {
|
||||
ADB_CONTEXT=`/system/bin/ls -dZ /data/adb | awk '{print $1}'`
|
||||
chcon u:object_r:su_file:s0 /data/adb
|
||||
chcon u:object_r:magisk_file:s0 /data/adb
|
||||
chmod 777 /data/adb
|
||||
}
|
||||
|
||||
sudb_restore() {
|
||||
db_restore() {
|
||||
chcon $ADB_CONTEXT /data/adb
|
||||
chmod 700 /data/adb
|
||||
}
|
||||
|
||||
sudb_setup() {
|
||||
db_setup() {
|
||||
local USER=$1
|
||||
local USERID=$(($USER / 100000))
|
||||
local DIR=/sbin/.core/db-${USERID}
|
||||
mkdir -p $DIR
|
||||
touch $DIR/magisk.db
|
||||
mount -o bind /data/adb/magisk.db $DIR/magisk.db
|
||||
rm -f /data/adb/magisk.db-journal
|
||||
chcon u:object_r:su_file:s0 $DIR $DIR/*
|
||||
rm -f /data/adb/magisk.db-*
|
||||
chcon u:object_r:magisk_file:s0 $DIR $DIR/*
|
||||
chmod 700 $DIR
|
||||
chown $USER.$USER $DIR
|
||||
chmod 666 $DIR/*
|
@@ -79,7 +79,6 @@
|
||||
<string name="settings_reboot_toast">إعادة التشغيل لتطبيق الإعدادات</string>
|
||||
<string name="release_notes">ملاحظات الإصدار</string>
|
||||
<string name="repo_cache_cleared">تم مسح الذاكرة المؤقته للمستودع</string>
|
||||
<string name="safetyNet_hide_notice">يستخدم هذا التطبيق SafetyNet, تم التعامل معها بالفعل من قبل MagiskHide بشكل افتراضي</string>
|
||||
<string name="process_error">خطأ في العملية</string>
|
||||
<string name="internal_storage">يتم تخزين الملف المضغوط في:\n[التخزين الداخلي]%1$s</string>
|
||||
<string name="zip_process_title">معالجة</string>
|
||||
@@ -88,8 +87,6 @@
|
||||
<string name="settings_general_category">عام</string>
|
||||
<string name="settings_dark_theme_title">السمة الغامقة</string>
|
||||
<string name="settings_dark_theme_summary">تفعيل السمة الغامقة</string>
|
||||
<string name="settings_notification_title">إشعارات التحديث</string>
|
||||
<string name="settings_notification_summary">عرض إشعارات التحديث عند توفر الإصدار الجديد</string>
|
||||
<string name="settings_clear_cache_title">حذف الذاكرة المؤقتة للمستودع</string>
|
||||
<string name="settings_clear_cache_summary">حذف المعلومات المخزنة مؤقتا للمستودع على الانترنت، يجبر التطبيق لتحديث عبر الانترنت</string>
|
||||
|
||||
|
@@ -76,7 +76,6 @@
|
||||
<string name="settings_reboot_toast">Restartovat pro použití nastavení</string>
|
||||
<string name="release_notes">Poznámky k vydání</string>
|
||||
<string name="repo_cache_cleared">Mezipaměť smazána</string>
|
||||
<string name="safetyNet_hide_notice">Tato aplikace využívá SafetyNet\nVe výchozím nastavení již ovládaný skrze MagiskHide</string>
|
||||
<string name="process_error">Chyba při Zpracování</string>
|
||||
<string name="internal_storage">Zip je uchován v:\n[Interním Úložišti]%1$s</string>
|
||||
<string name="zip_process_title">Zpracování</string>
|
||||
@@ -85,8 +84,6 @@
|
||||
<string name="settings_general_category">Obecné</string>
|
||||
<string name="settings_dark_theme_title">Tmavý Vzhled</string>
|
||||
<string name="settings_dark_theme_summary">Povolit tmavý vzhled</string>
|
||||
<string name="settings_notification_title">Oznámení o Aktualizaci</string>
|
||||
<string name="settings_notification_summary">Zobrazí oznámení aktualizace, když je k dispozici nová verze</string>
|
||||
<string name="settings_clear_cache_title">Smazat Uchovanou Mezipaměť</string>
|
||||
<string name="settings_clear_cache_summary">Smaže informace online použití v Mezipaměti, donutí aplikaci obnovit informace online</string>
|
||||
|
||||
|
@@ -92,7 +92,6 @@
|
||||
<string name="settings_reboot_toast">Neustarten, um die Änderungen anzuwenden</string>
|
||||
<string name="release_notes">Änderungen</string>
|
||||
<string name="repo_cache_cleared">Repo-Cache gelöscht</string>
|
||||
<string name="safetyNet_hide_notice">Diese App benutzt SafetyNet, welches standardmäßig von Magisk Hide verwaltet wird</string>
|
||||
<string name="process_error">Prozessfehler</string>
|
||||
<string name="internal_storage">Die zip-Datei ist gespeichert unter:\n[Interner Speicher]%1$s</string>
|
||||
<string name="zip_download_title">Herunterladen</string>
|
||||
@@ -129,8 +128,6 @@
|
||||
<string name="settings_general_category">Allgemein</string>
|
||||
<string name="settings_dark_theme_title">Dunkles Theme</string>
|
||||
<string name="settings_dark_theme_summary">Dunkles Theme aktivieren</string>
|
||||
<string name="settings_notification_title">Aktualisierungs-Benachrichtigung</string>
|
||||
<string name="settings_notification_summary">Benachrichtigung, wenn eine neue Version verfügbar ist</string>
|
||||
<string name="settings_clear_cache_title">Repo-Cache löschen</string>
|
||||
<string name="settings_clear_cache_summary">Löscht die zwischengespeicherten Informationen der Online-Repos. Erzwingt eine Online-Aktualisierung</string>
|
||||
<string name="settings_hide_manager_title">Magisk Manager verbergen</string>
|
||||
|
@@ -89,7 +89,6 @@
|
||||
<string name="settings_reboot_toast">Επανεκκίνηση για εφαρμογή ρυθμίσεων</string>
|
||||
<string name="release_notes">Σημειώσεις έκδοσης</string>
|
||||
<string name="repo_cache_cleared">Η Repo cache καθαρίστηκε</string>
|
||||
<string name="safetyNet_hide_notice">Αυτή η εφαρμογή χρησιμοποιεί SafetyNet\nΉδη διαχειρίζεται από το MagiskHide από προεπιλογή</string>
|
||||
<string name="process_error">Σφάλμα διαδικασίας</string>
|
||||
<string name="internal_storage">Το zip είναι αποθηκευμένο σε:\n[Εσωτερική μνήμη]%1$s</string>
|
||||
<string name="zip_download_title">Γίνεται λήψη</string>
|
||||
@@ -124,8 +123,6 @@
|
||||
<string name="settings_general_category">Γενικά</string>
|
||||
<string name="settings_dark_theme_title">Σκούρο θέμα</string>
|
||||
<string name="settings_dark_theme_summary">Ενεργοποίηση σκούρου θέματος</string>
|
||||
<string name="settings_notification_title">Ειδοποίηση Ενημέρωσης</string>
|
||||
<string name="settings_notification_summary">Εμφάνιση ειδοποιήσεων ενημέρωσης όταν είναι διαθέσιμη νέα έκδοση</string>
|
||||
<string name="settings_clear_cache_title">Εκκαθάριση προσωρινής μνήμης αποθετηρίων</string>
|
||||
<string name="settings_clear_cache_summary">Καθαρίζει τις κρυφές πληροφορίες για απευθείας συνδεδεμένα αποθετήρια, αναγκάζει την εφαρμογή να κάνει ανανέωση σε απευθείας σύνδεση</string>
|
||||
<string name="settings_hide_manager_title">Απόκρυψη του Magisk Manager</string>
|
||||
|
@@ -90,7 +90,6 @@
|
||||
<string name="settings_reboot_toast">Reinicia para aplicar los ajustes</string>
|
||||
<string name="release_notes">Notas de lanzamiento</string>
|
||||
<string name="repo_cache_cleared">Caché del repositorio limpiada</string>
|
||||
<string name="safetyNet_hide_notice">Esta aplicación usa SafetyNet\nYa manejado por defecto por MagiskHide</string>
|
||||
<string name="process_error">Error de proceso</string>
|
||||
<string name="internal_storage">El zip es almacenado en:\n[Internal Storage]%1$s</string>
|
||||
<string name="zip_download_title">Descargando</string>
|
||||
@@ -126,8 +125,6 @@
|
||||
<string name="settings_general_category">General</string>
|
||||
<string name="settings_dark_theme_title">Tema oscuro</string>
|
||||
<string name="settings_dark_theme_summary">Habilitar el tema oscuro</string>
|
||||
<string name="settings_notification_title">Notificar Actualización</string>
|
||||
<string name="settings_notification_summary">Notificar cuando una nueva versión esté disponible</string>
|
||||
<string name="settings_clear_cache_title">Limpiar caché del repositorio</string>
|
||||
<string name="settings_clear_cache_summary">Limpiar la información en caché para los repositorios en línea, fuerza a la aplicación a actualizar en línea</string>
|
||||
<string name="settings_hide_manager_title">Ocultar Magisk Manager</string>
|
||||
@@ -167,8 +164,8 @@
|
||||
<string name="request_timeout_summary">%1$s segundos</string>
|
||||
<string name="settings_su_reauth_title">Re-autenticación</string>
|
||||
<string name="settings_su_reauth_summary">Pedir permisos de superusuario nuevamente si una aplicación es actualizada o reinstalada</string>
|
||||
<string name="settings_su_fingerprint_title">Habilitar autenticación de Huella Dactilar</string>
|
||||
<string name="settings_su_fingerprint_summary">Utilice el sensor de Huella Dactilar para permitir las solicitudes de superusuario</string>
|
||||
<string name="settings_su_fingerprint_title">Autenticación por Huella Dactilar</string>
|
||||
<string name="settings_su_fingerprint_summary">Utilizar el sensor de Huella Dactilar para permitir las solicitudes de superusuario</string>
|
||||
|
||||
|
||||
<string name="multiuser_mode">Modo MultiUsuario</string>
|
||||
|
@@ -89,8 +89,6 @@
|
||||
<string name="settings_reboot_toast">Taaskäivita seadete rakendamiseks</string>
|
||||
<string name="release_notes">Väljalaskemärkmed</string>
|
||||
<string name="repo_cache_cleared">Hoidla vahemälu tühjendatud</string>
|
||||
<string name="safetyNet_hide_notice">See rakendus kasutab SafetyNet\'i\n
|
||||
Juba vaikimisi hallatud MagiskHide poolt</string>
|
||||
<string name="process_error">Protsessi viga</string>
|
||||
<string name="internal_storage">ZIP on salvestatud:\n
|
||||
[Sisemälu]%1$s</string>
|
||||
@@ -130,8 +128,6 @@
|
||||
<string name="settings_general_category">Üldine</string>
|
||||
<string name="settings_dark_theme_title">Tume teema</string>
|
||||
<string name="settings_dark_theme_summary">Luba tume teema</string>
|
||||
<string name="settings_notification_title">Uuendusteade</string>
|
||||
<string name="settings_notification_summary">Kuva uuendusteateid, kui uus versioon on saadaval</string>
|
||||
<string name="settings_clear_cache_title">Tühjenda hoidla vahemälu</string>
|
||||
<string name="settings_clear_cache_summary">Tühjenda võrgus olevate hoidlate vahemälus olev teave, sunnib rakendust võrgust värskendama</string>
|
||||
<string name="settings_hide_manager_title">Peida Magisk Manager</string>
|
||||
|
@@ -4,7 +4,7 @@
|
||||
<!--Welcome Activity-->
|
||||
<string name="modules">Modules</string>
|
||||
<string name="downloads">Téléchargements</string>
|
||||
<string name="superuser">Superuser</string>
|
||||
<string name="superuser">Superutilisateur</string>
|
||||
<string name="log">Journal</string>
|
||||
<string name="settings">Paramètres</string>
|
||||
<string name="install">Installer</string>
|
||||
@@ -27,7 +27,7 @@
|
||||
<string name="keep_force_encryption">Garder le chiffrement forcé</string>
|
||||
<string name="keep_dm_verity">Garder AVB 2.0/dm-verity</string>
|
||||
<string name="current_magisk_title">Version installée : %1$s</string>
|
||||
<string name="install_magisk_title">Dernière Magisk : %1$s</string>
|
||||
<string name="install_magisk_title">Dernière version : %1$s</string>
|
||||
<string name="uninstall">Désinstaller</string>
|
||||
<string name="uninstall_magisk_title">Désinstaller Magisk</string>
|
||||
<string name="uninstall_magisk_msg">Tous les modules seront désactivés/effacés. Le root sera enlevé et vos données seront potentiellement chiffrées si elles ne le sont pas actuellement</string>
|
||||
@@ -53,7 +53,7 @@
|
||||
<string name="updated_on">Mis à jour le: %1$s</string>
|
||||
<string name="sorting_order">Mode de tri</string>
|
||||
<string name="sort_by_name">Trier par nom</string>
|
||||
<string name="sort_by_update">Trier par dernière mis à jour</string>
|
||||
<string name="sort_by_update">Trier par dernière mise à jour</string>
|
||||
|
||||
<!--Log Fragment-->
|
||||
<string name="menuSaveLog">Enregistrer journal</string>
|
||||
@@ -74,7 +74,7 @@
|
||||
<string name="support_thread">Fil d\'assistance</string>
|
||||
|
||||
<!--Toasts, Dialogs-->
|
||||
<string name="permissionNotGranted">Cette fonctionnalité ne marchera pas sans la permission d\'écriture sur le stockage externe.</string>
|
||||
<string name="permissionNotGranted">Cette fonctionnalité ne fonctionnera pas sans la permission d\'écriture sur le stockage externe.</string>
|
||||
<string name="no_thanks">Non merci</string>
|
||||
<string name="yes">Oui</string>
|
||||
<string name="ok">OK</string>
|
||||
@@ -85,49 +85,46 @@
|
||||
<string name="download_file_error">Erreur de téléchargement du fichier</string>
|
||||
<string name="reboot">Redémarrer</string>
|
||||
<string name="downloading_toast">Téléchargement %1$s</string>
|
||||
<string name="magisk_update_title">Nouvelle mis à jour Magisk disponible!</string>
|
||||
<string name="magisk_update_title">Nouvelle mise à jour Magisk disponible!</string>
|
||||
<string name="settings_reboot_toast">Redémarrer afin d\'appliquer les réglages</string>
|
||||
<string name="release_notes">Notes de version</string>
|
||||
<string name="repo_cache_cleared">Cache du dépôt éffacé</string>
|
||||
<string name="safetyNet_hide_notice">Cette application utilise SafetyNet\nDéjà masqué par MagiskHide par défaut</string>
|
||||
<string name="process_error">Erreur du processus</string>
|
||||
<string name="internal_storage">Le zip est enregistré dans:\n[Stockage Interne]%1$s</string>
|
||||
<string name="zip_download_title">Téléchargement</string>
|
||||
<string name="zip_download_msg">Téléchargement du fichier zip (%1$d%%) …</string>
|
||||
<string name="zip_process_title">Tritement en cours</string>
|
||||
<string name="zip_process_title">Traitement en cours</string>
|
||||
<string name="zip_process_msg">Traitement du fichier zip…</string>
|
||||
<string name="manager_update_title">Nouvelle mise à jour du Gestionnaire Magisk disponible!</string>
|
||||
<string name="manager_download_install">Appuyer pour télécharger et installer</string>
|
||||
<string name="dtbo_patched_title">DTBO a été patché!</string>
|
||||
<string name="dtbo_patched_reboot">Le Gestionnaire Magisk a vient de patcher dtbo.img, merci de redémarrer</string>
|
||||
<string name="magisk_updates">Mises à jours Magisk</string>
|
||||
<string name="flashing">Flahage</string>
|
||||
<string name="dtbo_patched_reboot">Le Gestionnaire Magisk vient de patcher dtbo.img, merci de redémarrer</string>
|
||||
<string name="magisk_updates">Mises à jour Magisk</string>
|
||||
<string name="flashing">Flashage</string>
|
||||
<string name="hide_manager_toast">Masquage du Gestionnaire Magisk...</string>
|
||||
<string name="hide_manager_toast2">Cela pourrait prendre un certain temps ...</string>
|
||||
<string name="hide_manager_toast2">Cela pourrait prendre un certain temps...</string>
|
||||
<string name="hide_manager_fail_toast">Masquage du Gestionnaire Magisk échoué…</string>
|
||||
<string name="download_zip_only">Uniquement télécharger le zip</string>
|
||||
<string name="patch_boot_file">Patch Fichier Image Démarrage</string>
|
||||
<string name="direct_install">Installation directe (Recommendée)</string>
|
||||
<string name="direct_install">Installation directe (Recommandé)</string>
|
||||
<string name="install_second_slot">Installer dans le second Slot (Après OTA)</string>
|
||||
<string name="select_method">Sélectionner le méthode</string>
|
||||
<string name="select_method">Sélectionner la méthode</string>
|
||||
<string name="no_boot_file_patch_support">La version cible de Magisk ne prend pas en charge la correction de fichier image de démarrage</string>
|
||||
<string name="boot_file_patch_msg">Sélectionnez l\'image par défaut de démarrage stockée au format .img ou .img.tar</string>
|
||||
<string name="boot_file_patch_msg">Sélectionnez l\'image de démarrage par défaut stockée au format .img ou .img.tar</string>
|
||||
<string name="complete_uninstall">Désinstallation terminée</string>
|
||||
<string name="restore_img">Restauration des images</string>
|
||||
<string name="uninstall_app">Désinstallation de l\'application</string>
|
||||
<string name="restore_done">Restauration terminée!</string>
|
||||
<string name="restore_fail">Le sauvegarde par défaut n\'existe pas!</string>
|
||||
<string name="uninstall_toast">Désinstallation du Gestionnaire Magisk dans 5 secondes, merci de redémarrer manuellement après celà</string>
|
||||
<string name="uninstall_toast">Désinstallation du Gestionnaire Magisk dans 5 secondes, merci de redémarrer manuellement par la suite</string>
|
||||
<string name="proprietary_title">Télécharger Code Propriétaire</string>
|
||||
<string name="proprietary_notice">Magisk Manager est Libre, il ne contient pas le code API SafetyNet propriétaire de Google. \ N \ nAutorisez vous le Gestionnaire Magisk à télécharger une extension (contenant GoogleApiClient) pour les contrôles SafetyNet? </string>
|
||||
<string name = "su_db_corrupt"> La base de données SU est corrompue, une nouvelle base de donnée va être re-créé</string>
|
||||
<string name="proprietary_notice">Magisk Manager est Libre, il ne contient pas le code API SafetyNet propriétaire de Google. \ N \ nAutorisez vous le Gestionnaire Magisk à télécharger une extension (contenant GoogleApiClient) pour les contrôles SafetyNet?</string>
|
||||
<string name = "su_db_corrupt"> La base de données SU est corrompue, une nouvelle base de donnée va être re-créée</string>
|
||||
|
||||
<!--Settings Activity -->
|
||||
<string name="settings_general_category">Général</string>
|
||||
<string name="settings_dark_theme_title">Thème sombre</string>
|
||||
<string name="settings_dark_theme_summary">Activer le thème sombre</string>
|
||||
<string name="settings_notification_title">Notification de mise à jour</string>
|
||||
<string name="settings_notification_summary">Afficher des notifications de mises à jour quand une nouvelle version est disponible</string>
|
||||
<string name="settings_clear_cache_title">Effacer le cache du dépôt</string>
|
||||
<string name="settings_clear_cache_summary">Effacer les informations en cache des dépôts distants, pour forcer une actualisation de l\'application</string>
|
||||
<string name="settings_hide_manager_title">Masquer le Gestionnaire Magisk</string>
|
||||
@@ -136,10 +133,10 @@
|
||||
<string name="settings_restore_manager_summary">Restaurer le Gestionnaire Magisk avec le paquet originel</string>
|
||||
<string name="language">Language</string>
|
||||
<string name="system_default">(Système par Défaut)</string>
|
||||
<string name="settings_update">Mis à jour des réglages</string>
|
||||
<string name="settings_check_update_title">Vérification des mises à jours</string>
|
||||
<string name="settings_check_update_summary">Vérifier l\'éxistance de mise à jour en tâche de fond de façon périodique</string>
|
||||
<string name="settings_update_channel_title">Mis à jour du canal</string>
|
||||
<string name="settings_update">Mise à jour des réglages</string>
|
||||
<string name="settings_check_update_title">Vérification des mises à jour</string>
|
||||
<string name="settings_check_update_summary">Vérifier l\'existence de mises à jour en tâche de fond de façon périodique</string>
|
||||
<string name="settings_update_channel_title">Mise à jour du canal</string>
|
||||
<string name="settings_update_stable">Stable</string>
|
||||
<string name="settings_update_beta">Béta</string>
|
||||
<string name="settings_update_custom">Personalisé</string>
|
||||
@@ -160,10 +157,10 @@
|
||||
<string name="settings_su_request_20">20 secondes</string>
|
||||
<string name="settings_su_request_30">30 secondes</string>
|
||||
<string name="settings_su_request_60">60 secondes</string>
|
||||
<string name="superuser_access">Accès Superuser</string>
|
||||
<string name="superuser_access">Accès Superulisateur</string>
|
||||
<string name="auto_response">Réponse automatique</string>
|
||||
<string name="request_timeout">Délai de requête</string>
|
||||
<string name="superuser_notification">Notification Superuser</string>
|
||||
<string name="superuser_notification">Notification Superutilisateur</string>
|
||||
<string name="request_timeout_summary">%1$s secondes</string>
|
||||
<string name="settings_su_reauth_title">Ré-authentifier après la mise à niveau</string>
|
||||
<string name="settings_su_reauth_summary">Réauthentifier les autorisations de superutilisateur après une mise à niveau d\'application</string>
|
||||
@@ -190,7 +187,7 @@
|
||||
<string name="disable_fingerprint">Aucune empreinte digitale n\'a été définie ou aucun support de périphérique</string>
|
||||
|
||||
<!--Superuser-->
|
||||
<string name="su_request_title">Requête Superuser</string>
|
||||
<string name="su_request_title">Requête Superutilisateur</string>
|
||||
<string name="deny_with_str">Refuser%1$s</string>
|
||||
<string name="deny">Refuser</string>
|
||||
<string name="prompt">Demander</string>
|
||||
@@ -202,18 +199,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 a obtenu les droits Superuser</string>
|
||||
<string name="su_deny_toast">%1$s n\'a pas obtenu les droits Superuser</string>
|
||||
<string name="su_allow_toast">%1$s a obtenu les droits Superutilisateur</string>
|
||||
<string name="su_deny_toast">%1$s n\'a pas obtenu les droits Superutilisateur</string>
|
||||
<string name="no_apps_found">Aucune application trouvée</string>
|
||||
<string name="su_snack_grant">Les droits Superuser de %1$s sont accordés</string>
|
||||
<string name="su_snack_deny">Les droits Superuser de %1$s sont refusés</string>
|
||||
<string name="su_snack_grant">Les droits Superutilisateur de %1$s sont accordés</string>
|
||||
<string name="su_snack_deny">Les droits Superutilisateur de %1$s sont refusés</string>
|
||||
<string name="su_snack_notif_on">Les notifications pour %1$s sont activées</string>
|
||||
<string name="su_snack_notif_off">Les notifications pour %1$s sont désactivées</string>
|
||||
<string name="su_snack_log_on">La journalisation pour %1$s est activée</string>
|
||||
<string name="su_snack_log_off">La journalisation pour %1$s est désactivée</string>
|
||||
<string name="su_snack_revoke">Les droits de %1$s sont annulés</string>
|
||||
<string name="su_revoke_title">Annuler ?</string>
|
||||
<string name="su_revoke_msg">Vous confirmez l\'annulation des droits pour %1$s ?</string>
|
||||
<string name="su_revoke_msg">Confirmez-vous l\'annulation des droits pour %1$s ?</string>
|
||||
<string name="toast">Toast</string>
|
||||
<string name="none">Aucun</string>
|
||||
<string name="auth_fail">Authentication Échouée</string>
|
||||
|
@@ -30,7 +30,7 @@
|
||||
<string name="install_magisk_title">Najnovija inačica: %1$s</string>
|
||||
<string name="uninstall">Deinstaliraj</string>
|
||||
<string name="uninstall_magisk_title">Deinstaliraj Magisk</string>
|
||||
<string name="uninstall_magisk_msg">Svi moduli će biti onemogućeni/uklonjeni. Root će biti uklonjen i potencijalno šifrirati vaše podatke, ukoliko vaši podaci trenutačno nisu šifrirani</string>
|
||||
<string name="uninstall_magisk_msg">Svi moduli će biti onemogućeni/uklonjeni. Root će biti uklonjen i potencijalno šifrirati Vaše podatke, ukoliko Vaši podaci trenutačno nisu šifrirani</string>
|
||||
<string name="update">Ažuriraj %1$s</string>
|
||||
|
||||
<!--Module Fragment-->
|
||||
@@ -54,7 +54,7 @@
|
||||
<string name="menuClearLog">Očisti zapisnik sada</string>
|
||||
<string name="logs_cleared">Zapisnik je uspješno izbrisan</string>
|
||||
<string name="log_is_empty">Zapisnik je prazan</string>
|
||||
<string name="logs_save_failed">Nije moguće napisati zapisnik na SD karticu:</string>
|
||||
<string name="logs_save_failed">Nije moguće spremiti zapisnik na SD karticu:</string>
|
||||
|
||||
<!--About Activity-->
|
||||
<string name="about">O aplikaciji</string>
|
||||
@@ -73,7 +73,7 @@
|
||||
<string name="ok">OK</string>
|
||||
<string name="close">Zatvori</string>
|
||||
<string name="repo_install_title">Instaliraj %1$s</string>
|
||||
<string name="repo_install_msg">Da li želiš instalirati %1$s sada?</string>
|
||||
<string name="repo_install_msg">Da li želite instalirati %1$s sada?</string>
|
||||
<string name="download">Preuzmi</string>
|
||||
<string name="download_file_error">Pogreška prilikom preuzimanja datoteke</string>
|
||||
<string name="reboot">Ponovno podizanje sustava</string>
|
||||
@@ -82,7 +82,6 @@
|
||||
<string name="settings_reboot_toast">Ponovno pokrenite kako biste primjenili postavke</string>
|
||||
<string name="release_notes">Bilješke o izdavanju aplikacije</string>
|
||||
<string name="repo_cache_cleared">Predmemorija repozitorija izbrisana</string>
|
||||
<string name="safetyNet_hide_notice">Ova aplikacija upotrebljava SafetyNet\nRiješeno pomoću MagiskHide prema zadanim postavkama</string>
|
||||
<string name="process_error">Pogreška u procesu</string>
|
||||
<string name="internal_storage">Zip je pohranjen u:\n[Unutarnja pohrana]%1$s</string>
|
||||
<string name="zip_download_title">Preuzimanje</string>
|
||||
@@ -113,8 +112,6 @@
|
||||
<string name="settings_general_category">Općenito</string>
|
||||
<string name="settings_dark_theme_title">Tamna tema</string>
|
||||
<string name="settings_dark_theme_summary">Omogući tamnu temu</string>
|
||||
<string name="settings_notification_title">Obavijest o ažuriranju</string>
|
||||
<string name="settings_notification_summary">Prikaži obavijest o ažuriranju kada je dostupna nova verzija</string>
|
||||
<string name="settings_clear_cache_title">Izbriši predmemoriju repozitorija</string>
|
||||
<string name="settings_clear_cache_summary">Izbrišite predmemorirane informacije za online repozitorij, prisiljavajući aplikaciju da se osvježi online</string>
|
||||
<string name="settings_hide_manager_title">Sakrij Magisk Manager</string>
|
||||
@@ -134,7 +131,7 @@
|
||||
<string name="settings_hosts_title">Systemless hostovi</string>
|
||||
<string name="settings_hosts_summary">Systemless hostovi podržavaju Adblock aplikacije</string>
|
||||
|
||||
<string name="settings_su_app_adb">Aplikacije and ADB</string>
|
||||
<string name="settings_su_app_adb">Aplikacije i ADB</string>
|
||||
<string name="settings_su_app">Samo aplikacije</string>
|
||||
<string name="settings_su_adb">Samo ADB</string>
|
||||
<string name="settings_su_disable">Onemogućeno</string>
|
||||
@@ -161,10 +158,10 @@
|
||||
|
||||
<string name="mount_namespace_mode">Postavljanje imenskog prostora</string>
|
||||
<string name="settings_ns_global">Globalni imenski prostor</string>
|
||||
<string name="settings_ns_requester">Naslijedit imenski prostor</string>
|
||||
<string name="settings_ns_requester">Naslijediti imenski prostor</string>
|
||||
<string name="settings_ns_isolate">Izolirani imenski prostor</string>
|
||||
<string name="global_summary">Sve root sesije koriste globalni imenski prostor</string>
|
||||
<string name="requester_summary">Root sesije će nasljediti imenski prostor tražitelja</string>
|
||||
<string name="requester_summary">Root sesije će naslijediti imenski prostor tražitelja</string>
|
||||
<string name="isolate_summary">Svaka root sesija ima svoj vlastiti imenski prostor</string>
|
||||
|
||||
<!--Superuser-->
|
||||
@@ -173,7 +170,7 @@
|
||||
<string name="deny">Odbij</string>
|
||||
<string name="prompt">Upitaj</string>
|
||||
<string name="grant">Odobri</string>
|
||||
<string name="su_warning">Omogućuje potpuni pristup vašem uređaju.\nOdbijte ako niste sigurni!</string>
|
||||
<string name="su_warning">Omogućuje potpuni pristup Vašem uređaju.\nOdbijte ako niste sigurni!</string>
|
||||
<string name="forever">Zauvijek</string>
|
||||
<string name="once">Jednom</string>
|
||||
<string name="tenmin">10 min</string>
|
||||
|
@@ -89,7 +89,6 @@
|
||||
<string name="settings_reboot_toast">Reboot untuk menerapkan pengaturan</string>
|
||||
<string name="release_notes">Catatan rilis</string>
|
||||
<string name="repo_cache_cleared">Cache repo dibersihkan</string>
|
||||
<string name="safetyNet_hide_notice">Aplikasi ini menggunakan SafetyNet\nTelah ditangani oleh MagiskHide secara default</string>
|
||||
<string name="process_error">Kesalahan proses</string>
|
||||
<string name="internal_storage">Zip disimpan di:\n[Penyimpanan Internal]%1$s</string>
|
||||
<string name="zip_download_title">Mengunduh</string>
|
||||
@@ -126,8 +125,6 @@
|
||||
<string name="settings_general_category">Umum</string>
|
||||
<string name="settings_dark_theme_title">Tema Gelap</string>
|
||||
<string name="settings_dark_theme_summary">Aktifkan tema gelap</string>
|
||||
<string name="settings_notification_title">Notifikasi Pembaruan</string>
|
||||
<string name="settings_notification_summary">Tampilkan notifikasi pembaruan bila versi baru tersedia</string>
|
||||
<string name="settings_clear_cache_title">Bersihkan Cache Repo</string>
|
||||
<string name="settings_clear_cache_summary">Bersihkan informasi ter-cache untuk repo online, memaksa apl untuk menyegarkan online</string>
|
||||
<string name="settings_hide_manager_title">Sembunyikan Magisk Manager</string>
|
||||
|
@@ -89,8 +89,7 @@
|
||||
<string name="settings_reboot_toast">Riavvia per applicare</string>
|
||||
<string name="release_notes">Note di rilascio</string>
|
||||
<string name="repo_cache_cleared">La cache delle repository è stata svuotata</string>
|
||||
<string name="safetyNet_hide_notice">Quest\'app usa SafetyNet\ned è già gestita da Magisk Hide</string>
|
||||
<string name="process_error">Errore di elaborazione</string>
|
||||
<string name="process_error">Errore di elaborazione</string>
|
||||
<string name="internal_storage">Il file zip si trova in:\n[Memoria Interna]%1$s</string>
|
||||
<string name="zip_download_title">Download in corso</string>
|
||||
<string name="zip_download_msg">Download del file zip (%1$d%%) …</string>
|
||||
@@ -126,9 +125,7 @@
|
||||
<string name="settings_general_category">Generale</string>
|
||||
<string name="settings_dark_theme_title">Tema scuro</string>
|
||||
<string name="settings_dark_theme_summary">Abilita il tema scuro</string>
|
||||
<string name="settings_notification_title">Notifica aggiornamenti</string>
|
||||
<string name="settings_notification_summary">Mostra una notifica quando sono disponibili aggiornamenti</string>
|
||||
<string name="settings_clear_cache_title">Svuota cache repository</string>
|
||||
<string name="settings_clear_cache_title">Svuota cache repository</string>
|
||||
<string name="settings_clear_cache_summary">Svuota la cache delle repository e forza l\'aggiornamento online dell\'app</string>
|
||||
<string name="settings_hide_manager_title">Nascondi Magisk Manager</string>
|
||||
<string name="settings_hide_manager_summary">Reinstalla Magisk Manager con un nome pacchetto casuale</string>
|
||||
|
@@ -89,7 +89,6 @@
|
||||
<string name="settings_reboot_toast">再起動して設定を適用する</string>
|
||||
<string name="release_notes">更新履歴</string>
|
||||
<string name="repo_cache_cleared">リポジトリキャッシュを消去しました</string>
|
||||
<string name="safetyNet_hide_notice">このアプリはSafetyNetを使用しています。\n既定ではMagiskHideで既に処理されています</string>
|
||||
<string name="process_error">プロセスエラー</string>
|
||||
<string name="internal_storage">ZIPは\n[内部ストレージ]%1$sに保存されます</string>
|
||||
<string name="zip_download_title">ダウンロード中</string>
|
||||
@@ -126,8 +125,6 @@
|
||||
<string name="settings_general_category">一般</string>
|
||||
<string name="settings_dark_theme_title">ダークテーマ</string>
|
||||
<string name="settings_dark_theme_summary">ダークテーマを有効化します</string>
|
||||
<string name="settings_notification_title">更新通知</string>
|
||||
<string name="settings_notification_summary">新しいバージョンがあるときに通知します</string>
|
||||
<string name="settings_clear_cache_title">キャッシュを消去</string>
|
||||
<string name="settings_clear_cache_summary">オンラインリポジトリのキャッシュされた情報を消去し、アプリをオンラインで更新します</string>
|
||||
<string name="settings_hide_manager_title">Magisk Managerを隠す</string>
|
||||
|
@@ -75,7 +75,6 @@
|
||||
<string name="settings_reboot_toast">기기를 다시 시작하면 설정이 적용됩니다.</string>
|
||||
<string name="release_notes">릴리즈 노트</string>
|
||||
<string name="repo_cache_cleared">저장소 캐시 비워짐</string>
|
||||
<string name="safetyNet_hide_notice">이 앱은 MagiskHide에서\n이미 기본적으로 관리하는 SafetyNet을 사용합니다.</string>
|
||||
<string name="process_error">처리 오류</string>
|
||||
<string name="internal_storage">zip 파일이 다음 위치에 저장됨:\n[내부 저장소]%1$s</string>
|
||||
<string name="zip_process_title">처리 중</string>
|
||||
@@ -84,8 +83,6 @@
|
||||
<string name="settings_general_category">일반</string>
|
||||
<string name="settings_dark_theme_title">어두운 테마</string>
|
||||
<string name="settings_dark_theme_summary">어두운 테마 사용</string>
|
||||
<string name="settings_notification_title">업데이트 알림</string>
|
||||
<string name="settings_notification_summary">새 버전을 사용할 수 있을 때 업데이트 알림 표시</string>
|
||||
<string name="settings_clear_cache_title">저장소 캐시 비우기</string>
|
||||
<string name="settings_clear_cache_summary">온라인 저장소에 대해 캐시된 정보를 지우고, 온라인에서 정보를 강제로 새로 고칩니다.</string>
|
||||
|
||||
|
@@ -3,11 +3,11 @@
|
||||
|
||||
<!--Welcome Activity-->
|
||||
<string name="modules">Papildiniai</string>
|
||||
<string name="downloads">Atsisiuntimai</string>
|
||||
<string name="downloads">Papildinių parduotuvė</string>
|
||||
<string name="superuser">Supervartotojas</string>
|
||||
<string name="log">Surašymai</string>
|
||||
<string name="log">Įvykių sąrašas</string>
|
||||
<string name="settings">Nustatymai</string>
|
||||
<string name="install">Instaliuoti</string>
|
||||
<string name="install">Instaliuo-ti</string>
|
||||
|
||||
<!--Status Fragment-->
|
||||
<string name="magisk_version_error">Magisk yra neinstaliuotas</string>
|
||||
@@ -20,7 +20,7 @@
|
||||
<string name="safetyNet_api_error">SafetyNet API Klaida</string>
|
||||
<string name="safetyNet_network_loss">Nėra prieigos prie interneto</string>
|
||||
<string name="safetyNet_service_disconnected">Paslauga atjungta</string>
|
||||
<string name="safetyNet_res_invalid">Gautas neteisingas atsakas</string>
|
||||
<string name="safetyNet_res_invalid">Gautas neteisingas atsakymas</string>
|
||||
|
||||
<!--Install Fragment-->
|
||||
<string name="advanced_settings_title">Išplėstiniai nustatymai</string>
|
||||
@@ -30,7 +30,7 @@
|
||||
<string name="install_magisk_title">Naujausia versija: %1$s</string>
|
||||
<string name="uninstall">Pašalinti</string>
|
||||
<string name="uninstall_magisk_title">Pašalinti Magisk</string>
|
||||
<string name="uninstall_magisk_msg">Visi papildiniai bus išjungti/pašalinti. Root bus panaikintas. Jei duomenys nėra užšifruoti, yra galimybė, kad jie taps užšifruotais..</string>
|
||||
<string name="uninstall_magisk_msg">Visi papildiniai bus išjungti/pašalinti. Root bus panaikintas. Yra galimybė, kad duomenys bus užšifruoti...</string>
|
||||
<string name="update">Atnaujinti %1$s</string>
|
||||
|
||||
<!--Module Fragment-->
|
||||
@@ -39,7 +39,7 @@
|
||||
<string name="update_file_created">Perkrovus sistemą papildinys bus atnaujintas</string>
|
||||
<string name="remove_file_created">Perkrovus sistemą papildinys bus panaikintas</string>
|
||||
<string name="remove_file_deleted">Perkrovus sistemą papildinys nebus panaikintas</string>
|
||||
<string name="disable_file_created">Perkrovus sistemą papildinys bus išjungtas, bet ne panaikintas</string>
|
||||
<string name="disable_file_created">Perkrovus sistemą papildinys bus išjungtas, tačiau nepanaikintas</string>
|
||||
<string name="disable_file_removed">Perkrovus sistemą papildinys bus įjungtas</string>
|
||||
<string name="author">Sukūrė %1$s</string>
|
||||
<string name="reboot_recovery">Perkrauti į Recovery</string>
|
||||
@@ -49,19 +49,19 @@
|
||||
<!--Repo Fragment-->
|
||||
<string name="update_available">Galimas atnaujinimas</string>
|
||||
<string name="installed">Instaliuota</string>
|
||||
<string name="not_installed">Ne instaliuota</string>
|
||||
<string name="not_installed">Neinstaliuota</string>
|
||||
<string name="updated_on">Atnaujinta: %1$s</string>
|
||||
<string name="sorting_order">Išdėliojimo tvarka</string>
|
||||
<string name="sort_by_name">Išdėlioti pagal pavadinimą (A-Z)</string>
|
||||
<string name="sort_by_update">Išdėlioti pagal atnaujinimo datą (Naujausi-Seniausi)</string>
|
||||
|
||||
<!--Log Fragment-->
|
||||
<string name="menuSaveLog">Išsaugoti surašymus</string>
|
||||
<string name="menuReload">Iš naujo</string>
|
||||
<string name="menuClearLog">Išvalyti surašymus</string>
|
||||
<string name="logs_cleared">Surašymai pašalinti</string>
|
||||
<string name="log_is_empty">Surašymų nėra</string>
|
||||
<string name="logs_save_failed">Nesugebėjome įrašyti surašymų į SD kortelę:</string>
|
||||
<string name="menuSaveLog">Išsaugoti įvykių sąrašą</string>
|
||||
<string name="menuReload">Įvykių sąrašo atnaujinmas</string>
|
||||
<string name="menuClearLog">Išvalyti įvykių sąrašą</string>
|
||||
<string name="logs_cleared">Įvykių sąrašas pašalintas</string>
|
||||
<string name="log_is_empty">Įvykių sąrašas tuščias</string>
|
||||
<string name="logs_save_failed">Įvykių sąrašo įrašymas į SD kortelę nesėkmingas:</string>
|
||||
|
||||
<!--About Activity-->
|
||||
<string name="about">Apie</string>
|
||||
@@ -75,13 +75,13 @@
|
||||
<string name="support_thread">Mūsų XDA puslapis</string>
|
||||
|
||||
<!--Toasts, Dialogs-->
|
||||
<string name="permissionNotGranted">Ši įpatybė neveiks be prieigos prie saugyklos.</string>
|
||||
<string name="permissionNotGranted">Ši funkija neveiks be prieigos prie saugyklos.</string>
|
||||
<string name="no_thanks">Ačiū, nereikia</string>
|
||||
<string name="yes">Taip</string>
|
||||
<string name="ok">Gerai</string>
|
||||
<string name="close">Uždaryti</string>
|
||||
<string name="repo_install_title">Instaliuoti %1$s</string>
|
||||
<string name="repo_install_msg">Ar jūs norite dabar instaliuoti %1$s?</string>
|
||||
<string name="repo_install_msg">Ar jūs norite instaliuoti %1$s?</string>
|
||||
<string name="download">Atsisiųsti</string>
|
||||
<string name="download_file_error">Atsisiunčiant failą įvyko klaida</string>
|
||||
<string name="reboot">Perkrauti</string>
|
||||
@@ -90,11 +90,10 @@
|
||||
<string name="settings_reboot_toast">Nustatymų įgalinimui prašome perkrauti telefoną</string>
|
||||
<string name="release_notes">Pakeitimai</string>
|
||||
<string name="repo_cache_cleared">Repo failai išvalyti</string>
|
||||
<string name="safetyNet_hide_notice">Ši programėlė naudoja SafetyNet\nMagiskHide tai automatiškai sutvarko</string>
|
||||
<string name="process_error">Proceso klaida</string>
|
||||
<string name="internal_storage">Zip failas yra saugomas:\n[Internal Storage]%1$s</string>
|
||||
<string name="zip_download_title">Atsisiunčiama</string>
|
||||
<string name="zip_download_msg">Atsiunčiamas zip failas(%1$d%%) …</string>
|
||||
<string name="zip_download_msg">Atsiunčiamas zip failas(%1$d%%)…</string>
|
||||
<string name="zip_process_title">Vyksta procesas</string>
|
||||
<string name="zip_process_msg">Zip failas apdorojamas…</string>
|
||||
<string name="manager_update_title">Atsirado naujas Magisk Manager atnaujinimas!</string>
|
||||
@@ -121,14 +120,12 @@
|
||||
<string name="uninstall_toast">Magisk Manager bus pašalintas po 5 sekundžių, pašalinus perkraukite telefoną.</string>
|
||||
<string name="proprietary_title">Atsisiųsti patentuotą kodą</string>
|
||||
<string name="proprietary_notice">Magisk Manager yra FOSS todėl neturi Google patentuoto SafetyNet API kodo.\n\nAr jūs leidžiate Magisk Manager atsisiųsti papildinį (turintį GoogleApiClient) SafetyNet paieškai?</string>
|
||||
<string name="su_db_corrupt">SU duomenų bazė yra sugadinta, perkursime naują duomenų bazę</string>
|
||||
<string name="su_db_corrupt">Supervartotojo duomenų bazė yra sugadinta, perkursime naują duomenų bazę</string>
|
||||
|
||||
<!--Settings Activity -->
|
||||
<string name="settings_general_category">Pagrininiai</string>
|
||||
<string name="settings_dark_theme_title">Tamsi tema</string>
|
||||
<string name="settings_dark_theme_summary">Įjungti tamsią temą</string>
|
||||
<string name="settings_notification_title">Pranešimai atsiradus atnaujinimui</string>
|
||||
<string name="settings_notification_summary">Parodyti pranešmus atsiradus naujai versijai</string>
|
||||
<string name="settings_clear_cache_title">Išvalyti nereikalingus saugyklos failus</string>
|
||||
<string name="settings_clear_cache_summary">Išvalyti patalpintą informaciją talpykloms internete, priverčia perkrauti interneto jungtį</string>
|
||||
<string name="settings_hide_manager_title">Paslėpti Magisk Manager</string>
|
||||
@@ -148,7 +145,7 @@
|
||||
<string name="settings_boot_format_title">Boot failo formatas</string>
|
||||
<string name="settings_boot_format_summary">Pasirinkti boot failo formatą.\n.img naudojamas įdiegimui per fastboot/download; .img.tar naudojamas įdiegimui per ODIN.</string>
|
||||
<string name="settings_core_only_title">Pagrindinis Magisk režimas</string>
|
||||
<string name="settings_core_only_summary">Įgalinti tik pagrindines funkcijos, išjungti visus papildinius. MagiskSU, Magisk Hide ir Sistemos pedejėjai liks įgalinti</string>
|
||||
<string name="settings_core_only_summary">Įgalinti tik pagrindines funkcijas, išjungti visus papildinius. MagiskSU, Magisk Hide ir Sistemos pedejėjai liks įgalinti.</string>
|
||||
<string name="settings_magiskhide_summary">Paslėpti Magisk nuo įvairių susekimų</string>
|
||||
<string name="settings_hosts_title">Sistemos padejėjai</string>
|
||||
<string name="settings_hosts_summary">Įgalinti sistemos padejėjus Adblock programėlėms</string>
|
||||
@@ -187,7 +184,7 @@
|
||||
<string name="global_summary">Visos root sesijos naudoja globalią vardų sritį</string>
|
||||
<string name="requester_summary">Root sesijos paveldi jos išprašytojo/s vardų sritį</string>
|
||||
<string name="isolate_summary">Kiekviena root sesija turi savo izoliuotą vardų sritį</string>
|
||||
<string name="android_o_not_support">Negalima įrenginiams naudojantiems Android 8.0+</string>
|
||||
<string name="android_o_not_support">Įrenginiai su Android 8.0+ nepalaiko šio nustatymo</string>
|
||||
<string name="disable_fingerprint">Jūsų įrenginyje nebuvo surasta pirštų antspaudų arba jūsų įrenginys neturi pirštų antspaudų skaitytuvo</string>
|
||||
|
||||
<!--Superuser-->
|
||||
@@ -196,23 +193,23 @@
|
||||
<string name="deny">Atmesti</string>
|
||||
<string name="prompt">Klausti</string>
|
||||
<string name="grant">Suteikti(a)</string>
|
||||
<string name="su_warning">Suteikia pilną prieigą prie jūsų įrenginio\nAtmeskite jei neesate tikri dėl programėlės šaltinio!</string>
|
||||
<string name="su_warning">Supervartotojo prieiga suteikia pilną prieigą prie jūsų įrenginio\nAtmeskite jei neesate tikri dėl programėlės patikimumo!</string>
|
||||
<string name="forever">Visados</string>
|
||||
<string name="once">Vieną kartą</string>
|
||||
<string name="tenmin">10 min</string>
|
||||
<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 gavo Supervartotojo teises</string>
|
||||
<string name="su_deny_toast">%1$s negavo Supervartotojo teisių</string>
|
||||
<string name="su_allow_toast">%1$s gavo supervartotojo teises</string>
|
||||
<string name="su_deny_toast">%1$s negavo supervartotojo teisių</string>
|
||||
<string name="no_apps_found">Nėra surastų programėlių</string>
|
||||
<string name="su_snack_grant">%1$s supervartotojo teisių prašymas buvo atsakytas teigiamai</string>
|
||||
<string name="su_snack_deny">%1$s supervartotojo teisių prašymas buvo atmestas</string>
|
||||
<string name="su_snack_notif_on">Buvo įjungta %1$s pranešimai</string>
|
||||
<string name="su_snack_notif_off">Buvo išjungta %1$s pranešimai</string>
|
||||
<string name="su_snack_log_on">%1$s veiksmų surašymas yra įgalintas</string>
|
||||
<string name="su_snack_log_off">%1$s veiksmų surašymas yra išjungtas</string>
|
||||
<string name="su_snack_revoke">%1$s teisių atšaukta</string>
|
||||
<string name="su_snack_log_on">%1$s įvykių surašymas yra įgalintas</string>
|
||||
<string name="su_snack_log_off">%1$s įvykių surašymas yra išjungtas</string>
|
||||
<string name="su_snack_revoke">%1$s supervartotojo teisės atimtos</string>
|
||||
<string name="su_revoke_title">Neleisti?</string>
|
||||
<string name="su_revoke_msg">Neleisti %1$s naudotis supervartotojo teisėmis?</string>
|
||||
<string name="toast">Išmesti</string>
|
||||
|
@@ -89,7 +89,6 @@
|
||||
<string name="settings_reboot_toast">Herstarten om instellingen toe te passen</string>
|
||||
<string name="release_notes">Publicatie notities</string>
|
||||
<string name="repo_cache_cleared">Opslagcache gewist</string>
|
||||
<string name="safetyNet_hide_notice">Deze app gebruikt SafetyNet\nReeds afgehandeld door standaard MagiskHide</string>
|
||||
<string name="process_error">Verwerkingsfout</string>
|
||||
<string name="internal_storage">De zip is opgeslagen in:\n[Interne opslag]%1$s</string>
|
||||
<string name="zip_download_title">Downloaden</string>
|
||||
@@ -126,8 +125,6 @@
|
||||
<string name="settings_general_category">Algemeen</string>
|
||||
<string name="settings_dark_theme_title">Donker thema</string>
|
||||
<string name="settings_dark_theme_summary">Donker thema inschakelen</string>
|
||||
<string name="settings_notification_title">Update melding</string>
|
||||
<string name="settings_notification_summary">Een update melding weergeven wanneer een nieuwe versie beschikbaar is</string>
|
||||
<string name="settings_clear_cache_title">Opslagcache wissen</string>
|
||||
<string name="settings_clear_cache_summary">Wis de gecachte informatie voor online opslagplaatsen. Dit dwingt de app om online te verversen</string>
|
||||
<string name="settings_hide_manager_title">Magisk Manager verbergen</string>
|
||||
|
@@ -92,7 +92,6 @@
|
||||
<string name="settings_reboot_toast">Uruchom ponownie, aby zastosować ustawienia</string>
|
||||
<string name="release_notes">Zmiany</string>
|
||||
<string name="repo_cache_cleared">Cache repozytorium wyczyszczone</string>
|
||||
<string name="safetyNet_hide_notice">Ta aplikacja wykorzystuje SafetyNet\nJest już domyślnie obsługiwana przez MagiskHide</string>
|
||||
<string name="process_error">Błąd procesu</string>
|
||||
<string name="internal_storage">Zip jest przechowywany w:\n[Pamięć Wewnętrzna]%1$s</string>
|
||||
<string name="zip_download_title">Pobieranie</string>
|
||||
@@ -129,8 +128,6 @@
|
||||
<string name="settings_general_category">Ogólne</string>
|
||||
<string name="settings_dark_theme_title">Ciemny Motyw</string>
|
||||
<string name="settings_dark_theme_summary">Włącz ciemny motyw</string>
|
||||
<string name="settings_notification_title">Powiadomienie o Aktualizacji</string>
|
||||
<string name="settings_notification_summary">Pokaż powiadomienie o aktualizacji kiedy będzie dostępna nowa wersja</string>
|
||||
<string name="settings_clear_cache_title">Wyczyść Pamięć Repozytorium</string>
|
||||
<string name="settings_clear_cache_summary">Wymusza na aplikacji odświeżenie online repozytorium</string>
|
||||
<string name="settings_hide_manager_title">Ukryj Magisk Manager</string>
|
||||
|
@@ -14,12 +14,12 @@
|
||||
<string name="checking_for_updates">Verificando por atualizações…</string>
|
||||
<string name="magisk_update_available">Magisk v%1$s está disponível!</string>
|
||||
<string name="invalid_update_channel">Canal de Atualização Inválido</string>
|
||||
<string name="safetyNet_check_text">Toque para iniciar verificação de SafetyNet</string>
|
||||
<string name="safetyNet_check_text">Verificar SafetyNet</string>
|
||||
<string name="checking_safetyNet_status">Verificando status de SafetyNet…</string>
|
||||
<string name="safetyNet_check_success">SafetyNet Verificado Com Sucesso</string>
|
||||
<string name="safetyNet_api_error">Erro de SafetyNet API</string>
|
||||
<string name="safetyNet_network_loss">Conexão de rede indisponível</string>
|
||||
<string name="safetyNet_service_disconnected">O serviço foi morto</string>
|
||||
<string name="safetyNet_service_disconnected">Serviço foi morto</string>
|
||||
<string name="safetyNet_res_invalid">A resposta é inválida</string>
|
||||
|
||||
<!--Install Fragment-->
|
||||
@@ -36,11 +36,11 @@
|
||||
<!--Module Fragment-->
|
||||
<string name="no_info_provided">(Nenhuma informação fornecida)</string>
|
||||
<string name="no_modules_found">Nenhum módulo encontrado</string>
|
||||
<string name="update_file_created">O módulo será atualizado na próxima reinicialização</string>
|
||||
<string name="remove_file_created">O módulo será removido na próxima reinicialização</string>
|
||||
<string name="remove_file_deleted">O módulo não será removido na próxima reinicialização</string>
|
||||
<string name="disable_file_created">O módulo será desativado na próxima reinicialização</string>
|
||||
<string name="disable_file_removed">O módulo será ativado na próxima reinicialização</string>
|
||||
<string name="update_file_created">Módulo será atualizado na próxima reinicialização</string>
|
||||
<string name="remove_file_created">Módulo será removido na próxima reinicialização</string>
|
||||
<string name="remove_file_deleted">Módulo não será removido na próxima reinicialização</string>
|
||||
<string name="disable_file_created">Módulo será desativado na próxima reinicialização</string>
|
||||
<string name="disable_file_removed">Módulo será ativado na próxima reinicialização</string>
|
||||
<string name="author">Criado por %1$s</string>
|
||||
<string name="reboot_recovery">Reiniciar na Recuperação</string>
|
||||
<string name="reboot_bootloader">Reiniciar no Bootloader</string>
|
||||
@@ -51,7 +51,7 @@
|
||||
<string name="installed">Instalado</string>
|
||||
<string name="not_installed">Não Instalado</string>
|
||||
<string name="updated_on">Atualizado em: %1$s</string>
|
||||
<string name="sorting_order">Ordem de Ordenação</string>
|
||||
<string name="sorting_order">Ordenar</string>
|
||||
<string name="sort_by_name">Ordenar por nome</string>
|
||||
<string name="sort_by_update">Ordenar por última atualização</string>
|
||||
|
||||
@@ -60,8 +60,8 @@
|
||||
<string name="menuReload">Recarregar</string>
|
||||
<string name="menuClearLog">Limpar registro agora</string>
|
||||
<string name="logs_cleared">Registro limpo com sucesso</string>
|
||||
<string name="log_is_empty">O registro está vazio</string>
|
||||
<string name="logs_save_failed">Não foi possível gravar o registro no cartão SD:</string>
|
||||
<string name="log_is_empty">Registro está vazio</string>
|
||||
<string name="logs_save_failed">Incapaz de gravar registro no cartão SD:</string>
|
||||
|
||||
<!--About Activity-->
|
||||
<string name="about">Sobre</string>
|
||||
@@ -75,7 +75,7 @@
|
||||
|
||||
<!--Toasts, Dialogs-->
|
||||
<string name="permissionNotGranted">Este recurso não funcionará sem permissão para gravar no armazenamento externo.</string>
|
||||
<string name="no_thanks">Não, obrigado</string>
|
||||
<string name="no_thanks">Não</string>
|
||||
<string name="yes">Sim</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="close">Fechar</string>
|
||||
@@ -89,7 +89,6 @@
|
||||
<string name="settings_reboot_toast">Reinicie para aplicar as definições</string>
|
||||
<string name="release_notes">Notas de lançamento</string>
|
||||
<string name="repo_cache_cleared">Cache de repositório limpado</string>
|
||||
<string name="safetyNet_hide_notice">Este app usa SafetyNet\nJá manipulado por MagiskHide por padrão</string>
|
||||
<string name="process_error">Erro de processo</string>
|
||||
<string name="internal_storage">O zip está armazenado em:\n[Armazenamento Interno]%1$s</string>
|
||||
<string name="zip_download_title">Baixando</string>
|
||||
@@ -101,33 +100,31 @@
|
||||
<string name="dtbo_patched_title">DTBO foi emendado!</string>
|
||||
<string name="dtbo_patched_reboot">Magisk Manager emendou dtbo.img, reinicie</string>
|
||||
<string name="magisk_updates">Atualizações do Magisk</string>
|
||||
<string name="flashing">Flasheando</string>
|
||||
<string name="flashing">Gravando</string>
|
||||
<string name="hide_manager_toast">Ocultando Magisk Manager…</string>
|
||||
<string name="hide_manager_toast2">Isto pode demorar um pouco…</string>
|
||||
<string name="hide_manager_fail_toast">Ocultar Magisk Manager falhou…</string>
|
||||
<string name="hide_manager_fail_toast">Falha ao ocultar Magisk Manager…</string>
|
||||
<string name="download_zip_only">Baixar Zip Apenas</string>
|
||||
<string name="patch_boot_file">Emendar Arquivo de Imagem de Inicialização</string>
|
||||
<string name="direct_install">Instalação Direta (Recomendado)</string>
|
||||
<string name="install_second_slot">Instalar no Segundo Slot (Após OTA)</string>
|
||||
<string name="select_method">Selecionar Método</string>
|
||||
<string name="no_boot_file_patch_support">A versão alvo do Magisk não suporta emendamento de imagem de inicialização</string>
|
||||
<string name="boot_file_patch_msg">Selecione o depósito de imagem de inicialização de stock em formato .img ou .img.tar</string>
|
||||
<string name="complete_uninstall">Concluir Desinstalação</string>
|
||||
<string name="boot_file_patch_msg">Selecionar depósito de imagem de inicialização de fábrica no formato .img ou .img.tar</string>
|
||||
<string name="complete_uninstall">Completar Desinstalação</string>
|
||||
<string name="restore_img">Restaurar Imagens</string>
|
||||
<string name="uninstall_app">Desinstalar App</string>
|
||||
<string name="restore_done">Restauração concluída!</string>
|
||||
<string name="restore_fail">O backup da stock não existe!</string>
|
||||
<string name="restore_fail">Backup de fábrica não existe!</string>
|
||||
<string name="uninstall_toast">Desinstalando Magisk Manager em 5 segundos, manualmente reinicie logo após</string>
|
||||
<string name="proprietary_title">Baixar Código de Propriedade</string>
|
||||
<string name="proprietary_notice">Magisk Manager é FOSS(Software Livre de Código Aberto), que não contém o código de propriedade de SafetyNet API da Google.\n\nPermitir ao Magisk Manager baixar uma extensão (que contém a GoogleApiClient) para verificação de SafetyNet?</string>
|
||||
<string name="su_db_corrupt">O banco de dados do SU está corrompido, será recriado novo db</string>
|
||||
<string name="proprietary_notice">Magisk Manager é FOSS, que não contém o código de propriedade de SafetyNet API da Google.\n\nPermitir ao Magisk Manager baixar uma extensão (que contém a GoogleApiClient) para verificação de SafetyNet?</string>
|
||||
<string name="su_db_corrupt">Banco de dados do SU está corrompido, será recriado novo db</string>
|
||||
|
||||
<!--Settings Activity -->
|
||||
<string name="settings_general_category">Geral</string>
|
||||
<string name="settings_dark_theme_title">Tema Escuro</string>
|
||||
<string name="settings_dark_theme_summary">Ativar tema escuro</string>
|
||||
<string name="settings_notification_title">Notificação de Atualização</string>
|
||||
<string name="settings_notification_summary">Mostrar notificação de atualização quando nova versão estiver disponível</string>
|
||||
<string name="settings_clear_cache_title">Limpar Cache de Repositório</string>
|
||||
<string name="settings_clear_cache_summary">Limpar as informações no cache para repositórios onlines, força o app a reatualizar online</string>
|
||||
<string name="settings_hide_manager_title">Ocultar Magisk Manager</string>
|
||||
@@ -145,12 +142,12 @@
|
||||
<string name="settings_update_custom">Personalizado</string>
|
||||
<string name="settings_update_custom_msg">Inserir uma URL personalizada</string>
|
||||
<string name="settings_boot_format_title">Formato de Saída de Inicialização Emendada</string>
|
||||
<string name="settings_boot_format_summary">Selecionar formato de saída de imagem de inicialização emendada.\nEscolha .img para flashear através do modo fastboot/download; escolha .img.tar para flashear com ODIN.</string>
|
||||
<string name="settings_boot_format_summary">Selecionar formato de saída de imagem de inicialização emendada.\nEscolha .img para gravar através do modo fastboot/download; escolha .img.tar para gravar com ODIN.</string>
|
||||
<string name="settings_core_only_title">Modo Magisk de Núcleo Apenas</string>
|
||||
<string name="settings_core_only_summary">Ativar apenas recursos de núcleo. MagiskSU, MagiskHide e hosts systemless ainda serão ativados, mas nenhum módulo será carregado.</string>
|
||||
<string name="settings_core_only_summary">Ativar apenas recursos de núcleo. MagiskSU, MagiskHide e hosts sem sistema ainda serão ativados, mas nenhum módulo será carregado.</string>
|
||||
<string name="settings_magiskhide_summary">Ocultar Magisk de várias detecções</string>
|
||||
<string name="settings_hosts_title">Hosts systemless</string>
|
||||
<string name="settings_hosts_summary">Suporte de hosts systemless para apps de Adblock</string>
|
||||
<string name="settings_hosts_title">Hosts sem sistema</string>
|
||||
<string name="settings_hosts_summary">Suporte de hosts sem sistema para apps de Adblock</string>
|
||||
|
||||
<string name="settings_su_app_adb">Apps e ADB</string>
|
||||
<string name="settings_su_app">Apps apenas</string>
|
||||
@@ -193,7 +190,7 @@
|
||||
<string name="su_request_title">Solicitação de Superusuário</string>
|
||||
<string name="deny_with_str">Negar%1$s</string>
|
||||
<string name="deny">Negar</string>
|
||||
<string name="prompt">Expedir</string>
|
||||
<string name="prompt">Solicitar</string>
|
||||
<string name="grant">Conceder</string>
|
||||
<string name="su_warning">Concede acesso total ao seu dispositivo.\nNegue se você não tem certeza!</string>
|
||||
<string name="forever">Sempre</string>
|
||||
@@ -205,13 +202,13 @@
|
||||
<string name="su_allow_toast">%1$s teve concedido direitos de Superusuário</string>
|
||||
<string name="su_deny_toast">%1$s teve negado direitos de Superusuário</string>
|
||||
<string name="no_apps_found">Nenhum app encontrado</string>
|
||||
<string name="su_snack_grant">Os direitos de Superusuário de %1$s estão concedidos</string>
|
||||
<string name="su_snack_deny">Os direitos de Superusuário de %1$s estão negados</string>
|
||||
<string name="su_snack_notif_on">As notificações de %1$s estão ativadas</string>
|
||||
<string name="su_snack_notif_off">As notificações de %1$s estão desativadas</string>
|
||||
<string name="su_snack_log_on">A registração de %1$s está ativada</string>
|
||||
<string name="su_snack_log_off">A registração de %1$s está desativada</string>
|
||||
<string name="su_snack_revoke">Os direitos de %1$s estão revogados</string>
|
||||
<string name="su_snack_grant">Direitos de Superusuário de %1$s estão concedidos</string>
|
||||
<string name="su_snack_deny">Direitos de Superusuário de %1$s estão negados</string>
|
||||
<string name="su_snack_notif_on">Notificações de %1$s estão ativadas</string>
|
||||
<string name="su_snack_notif_off">Notificações de %1$s estão desativadas</string>
|
||||
<string name="su_snack_log_on">Registração de %1$s está ativada</string>
|
||||
<string name="su_snack_log_off">Registração de %1$s está desativada</string>
|
||||
<string name="su_snack_revoke">Direitos de %1$s estão revogados</string>
|
||||
<string name="su_revoke_title">Revogar?</string>
|
||||
<string name="su_revoke_msg">Revogar os direitos de %1$s?</string>
|
||||
<string name="toast">Torrada</string>
|
||||
@@ -224,6 +221,3 @@
|
||||
<string name="command">Comando:\u0020</string>
|
||||
|
||||
</resources>
|
||||
|
||||
|
||||
|
||||
|
@@ -80,9 +80,7 @@
|
||||
<string name="settings_reboot_toast">Reinicie para aplicar definições</string>
|
||||
<string name="release_notes">Notas da atualização</string>
|
||||
<string name="repo_cache_cleared">Cache do repositório apagado</string>
|
||||
<string name="safetyNet_hide_notice">Esta aplicação usa SafetyNet
|
||||
\nJá manipulado pelo MagiskHide por padrão</string>
|
||||
<string name="process_error">Erro no processo</string>
|
||||
<string name="process_error">Erro no processo</string>
|
||||
<string name="internal_storage">O zip foi guardado em:
|
||||
\n[Armazenamento interno]%1$s</string>
|
||||
<string name="zip_download_msg">A transferir ficheiro zip (%1$d%%) …</string>
|
||||
@@ -106,9 +104,7 @@
|
||||
<string name="settings_general_category">Geral</string>
|
||||
<string name="settings_dark_theme_title">Tema escuro</string>
|
||||
<string name="settings_dark_theme_summary">Ativa o tema escuro</string>
|
||||
<string name="settings_notification_title">Notificação de Atualização</string>
|
||||
<string name="settings_notification_summary">Mostrar notificações de atualização quando a nova versão estiver disponível</string>
|
||||
<string name="settings_clear_cache_title">Apagar Cache de Repositório</string>
|
||||
<string name="settings_clear_cache_title">Apagar Cache de Repositório</string>
|
||||
<string name="settings_clear_cache_summary">Apaga a informação cache de repositórios online. online, forçando a aplicação a atualizar online</string>
|
||||
<string name="settings_hide_manager_title">Esconder Magisk Manager</string>
|
||||
<string name="language">Língua</string>
|
||||
|
@@ -83,7 +83,6 @@
|
||||
<string name="settings_reboot_toast">Reporniți pentru a aplica setările</string>
|
||||
<string name="release_notes">Note de lansare</string>
|
||||
<string name="repo_cache_cleared">Arhive cache eliminate</string>
|
||||
<string name="safetyNet_hide_notice">Această aplicație utilizează SafetyNet\nDeja gestionat de MagiskHide în mod implicit</string>
|
||||
<string name="process_error">Eroare de proces</string>
|
||||
<string name="internal_storage">Zip stocat în:\n[Stocare internă]%1$s</string>
|
||||
<string name="zip_download_title">Descărcare</string>
|
||||
@@ -118,8 +117,6 @@
|
||||
<string name="settings_general_category">General</string>
|
||||
<string name="settings_dark_theme_title">Temă întunecată</string>
|
||||
<string name="settings_dark_theme_summary">Activare temă întunecată</string>
|
||||
<string name="settings_notification_title">Notificare actualizare</string>
|
||||
<string name="settings_notification_summary">Se afișează notificări de actualizare atunci când este disponibilă o nouă versiune</string>
|
||||
<string name="settings_clear_cache_title">Eliminare cache</string>
|
||||
<string name="settings_clear_cache_summary">Ștergeți informațiile memorate în cache, forțează actualizarea aplicației online</string>
|
||||
<string name="settings_hide_manager_title">Ascundeţi Magisk Manager</string>
|
||||
|
@@ -92,7 +92,6 @@
|
||||
<string name="settings_reboot_toast">Для применения настроек перезагрузите устройство</string>
|
||||
<string name="release_notes">О версии</string>
|
||||
<string name="repo_cache_cleared">Кэш репозитория очищен</string>
|
||||
<string name="safetyNet_hide_notice">Приложение использует SafetyNet API.\nПо умолчанию добавлено в MagiskHide.</string>
|
||||
<string name="process_error">Ошибка обработки</string>
|
||||
<string name="internal_storage">Расположение архива:\n[Внутреннее Хранилище]%1$s</string>
|
||||
<string name="zip_download_title">Загрузка</string>
|
||||
@@ -129,8 +128,6 @@
|
||||
<string name="settings_general_category">Основные</string>
|
||||
<string name="settings_dark_theme_title">Тёмная тема</string>
|
||||
<string name="settings_dark_theme_summary">Включить темное оформление</string>
|
||||
<string name="settings_notification_title">Уведомление об обновлении</string>
|
||||
<string name="settings_notification_summary">Показывать уведомления о выходе новой версии</string>
|
||||
<string name="settings_clear_cache_title">Очистка кэша репозитория</string>
|
||||
<string name="settings_clear_cache_summary">Очистить сохранённую информацию о репозитории. Будет обновлено принудительно</string>
|
||||
<string name="settings_hide_manager_title">Скрытие Magisk Manager</string>
|
||||
|
@@ -82,7 +82,6 @@
|
||||
<string name="settings_reboot_toast">Рестартуј да примениш подешавања</string>
|
||||
<string name="release_notes">Белешке обљављивања</string>
|
||||
<string name="repo_cache_cleared">Кеш спремишта обрисан</string>
|
||||
<string name="safetyNet_hide_notice">Ова апликација користи СигурнаМрежа\nФабрички већ управљано од стране MagiskHide-а</string>
|
||||
<string name="process_error">Грешка у обради</string>
|
||||
<string name="internal_storage">Зип је сачуван у:\n[Интерно складиште]%1$s</string>
|
||||
<string name="zip_download_title">Преузимање</string>
|
||||
@@ -117,8 +116,6 @@
|
||||
<string name="settings_general_category">Генерално</string>
|
||||
<string name="settings_dark_theme_title">Црна тема</string>
|
||||
<string name="settings_dark_theme_summary">Омогући црну тему</string>
|
||||
<string name="settings_notification_title">Нотификација Ажурирања</string>
|
||||
<string name="settings_notification_summary">Прикажи нотификације ажурирања када је нова верзија доступна</string>
|
||||
<string name="settings_clear_cache_title">Обриши кеш спремишта</string>
|
||||
<string name="settings_clear_cache_summary">Очисти кеширану имформацију за онлајн спремишта, форсира апликацију да освежи онлајн</string>
|
||||
<string name="settings_hide_manager_title">Сакриј Магиск Менаџер</string>
|
||||
|
@@ -81,7 +81,6 @@
|
||||
<string name="settings_reboot_toast">Starta om för att tillämpa inställningar</string>
|
||||
<string name="release_notes">Release notes</string>
|
||||
<string name="repo_cache_cleared">Repo-cache rensad</string>
|
||||
<string name="safetyNet_hide_notice">Denna appen använder SafetyNet\nHanteras redan av MagiskHide som standard</string>
|
||||
<string name="process_error">Processfel</string>
|
||||
<string name="internal_storage">ZIP-filen är sparad i:\n[Internal Storage]%1$s</string>
|
||||
<string name="zip_process_title">Arbetar</string>
|
||||
@@ -93,8 +92,6 @@
|
||||
<string name="settings_general_category">Allmän</string>
|
||||
<string name="settings_dark_theme_title">Mörkt tema</string>
|
||||
<string name="settings_dark_theme_summary">Aktivera mörkt tema</string>
|
||||
<string name="settings_notification_title">Uppdateringsavisering</string>
|
||||
<string name="settings_notification_summary">Visa en avisering när det finns en ny version tillgänglig</string>
|
||||
<string name="settings_clear_cache_title">Rensa repo-cache</string>
|
||||
<string name="settings_clear_cache_summary">Rensa den lagrade information för online-repos, tvingar appen att uppdatera online</string>
|
||||
|
||||
|
@@ -13,7 +13,7 @@
|
||||
<string name="checking_for_updates">Güncelleştirmeler denetleniyor…</string>
|
||||
<string name="magisk_update_available">Magisk v%1$s mevcut!</string>
|
||||
<string name="invalid_update_channel">Geçersiz Güncelleme Kanalı</string>
|
||||
<string name="safetyNet_check_text">SafetyNet kontrolünü başlatmak için dokunun</string>
|
||||
<string name="safetyNet_check_text">SafetyNet kontrolünü başlatmak için dokun</string>
|
||||
<string name="checking_safetyNet_status">SafetyNet durumu kontrol ediliyor…</string>
|
||||
<string name="safetyNet_check_success">SafetyNet Kontrolü Başarılı</string>
|
||||
<string name="safetyNet_api_error">SafetyNet API Hatası</string>
|
||||
@@ -88,7 +88,6 @@
|
||||
<string name="settings_reboot_toast">Ayarları uygulamak için yeniden başlatın</string>
|
||||
<string name="release_notes">Sürüm notları</string>
|
||||
<string name="repo_cache_cleared">Repo önbelleği temizlendi</string>
|
||||
<string name="safetyNet_hide_notice">Bu uygulama, SafetyNet kullanıyor\nZaten MagiskHide tarafından varsayılan olarak ele alındı</string>
|
||||
<string name="process_error">İşlem hatası</string>
|
||||
<string name="internal_storage">Zip şuraya depolandı:\n[Dahili Hafıza]%1$s</string>
|
||||
<string name="zip_download_title">İndiriliyor</string>
|
||||
@@ -125,8 +124,6 @@
|
||||
<string name="settings_general_category">Genel</string>
|
||||
<string name="settings_dark_theme_title">Karanlık Tema</string>
|
||||
<string name="settings_dark_theme_summary">Karanlık temayı etkinleştir</string>
|
||||
<string name="settings_notification_title">Güncelleme Bildirimi</string>
|
||||
<string name="settings_notification_summary">Yeni sürüm kullanılabilir olduğunda güncelleme bildirimlerini göster</string>
|
||||
<string name="settings_clear_cache_title">Repo Önbelleğini Temizle</string>
|
||||
<string name="settings_clear_cache_summary">Çevrimiçi repolar için önbellek bilgilerini temizle, uygulamayı çevrimiçi yenilemeye zorla</string>
|
||||
<string name="settings_hide_manager_title">Magisk Manager\'ı Gizle</string>
|
||||
@@ -137,14 +134,14 @@
|
||||
<string name="system_default">(Sistem Varsayılanı)</string>
|
||||
<string name="settings_update">Güncelleme Ayarları</string>
|
||||
<string name="settings_check_update_title">Güncellemeleri denetle</string>
|
||||
<string name="settings_check_update_summary">Arka planda düzenli olarak güncellemeleri denetle</string>
|
||||
<string name="settings_check_update_summary">Düzenli aralıklarla arka planda güncellemeleri denetle</string>
|
||||
<string name="settings_update_channel_title">Güncelleme Kanalı</string>
|
||||
<string name="settings_update_stable">Kararlı</string>
|
||||
<string name="settings_update_beta">Beta</string>
|
||||
<string name="settings_update_custom">Özel</string>
|
||||
<string name="settings_update_custom_msg">Özel bir URL ekleyin</string>
|
||||
<string name="settings_boot_format_title">Yamalı Önyükleme Formatı</string>
|
||||
<string name="settings_boot_format_summary">Yamalı önyükleme imaj dosyasının formatını seçin\nFastboot/indirme modunda yüklemek için .img seçeneğini seçin; ODIN ile yüklemek için .img.tar\'ı seçin.</string>
|
||||
<string name="settings_boot_format_summary">Yamalı önyükleme imaj dosyasının formatını seçin\nFastboot/download modunda yüklemek için .img seçeneğini seçin; ODIN ile yüklemek için .img.tar\'ı seçin.</string>
|
||||
<string name="settings_core_only_title">Magisk Sadece Çekirdek Modu</string>
|
||||
<string name="settings_core_only_summary">Sadece temel özellikleri etkinleştirin, tüm modüller yüklenmez. MagiskSU, MagiskHide ve host yine de etkinleştirilecektir</string>
|
||||
<string name="settings_magiskhide_summary">"Magisk\'i çeşitli algılamalardan gizle"</string>
|
||||
|
@@ -88,7 +88,6 @@
|
||||
<string name="settings_reboot_toast">Для застосування змін перезавантажте пристрій</string>
|
||||
<string name="release_notes">Особливості версії</string>
|
||||
<string name="repo_cache_cleared">Кеш репозиторію очищено</string>
|
||||
<string name="safetyNet_hide_notice">Ця програма використовує SafetyNet.\nВже опрацьовано MagiskHide за замовчуванням</string>
|
||||
<string name="process_error">Помилка опрацювання</string>
|
||||
<string name="internal_storage">Архів розташований:\n[Внутрішнє Сховище]%1$s</string>
|
||||
<string name="zip_download_title">Завантаження</string>
|
||||
@@ -125,8 +124,6 @@
|
||||
<string name="settings_general_category">Основні</string>
|
||||
<string name="settings_dark_theme_title">Темна тема</string>
|
||||
<string name="settings_dark_theme_summary">Увімкнути темне оформлення</string>
|
||||
<string name="settings_notification_title">Сповіщення про оновлення</string>
|
||||
<string name="settings_notification_summary">Показувати сповіщення про оновлення в Панелі сповіщень, коли доступна нова версія</string>
|
||||
<string name="settings_clear_cache_title">Очищення кешу</string>
|
||||
<string name="settings_clear_cache_summary">Очистити збережену інформацію про мережеві репозиторії, змушуючи програму примусово оновлюватися через Інтернет</string>
|
||||
<string name="settings_hide_manager_title">Приховати Magisk Manager</string>
|
||||
|
@@ -76,7 +76,6 @@
|
||||
<string name="settings_reboot_toast">Khởi động lại để áp dụng thiết lập</string>
|
||||
<string name="release_notes">Ghi chú phát hành</string>
|
||||
<string name="repo_cache_cleared">Đã xoá bộ đệm kho</string>
|
||||
<string name="safetyNet_hide_notice">Ứng dụng này dùng SafetyNet\nĐã được MagiskHide xử lý theo mặc định</string>
|
||||
<string name="process_error">Lỗi xử lý</string>
|
||||
<string name="internal_storage">Tập tin zip được lưu vào:\n[Bộ nhớ trong]%1$s</string>
|
||||
<string name="zip_process_title">Đang xử lý</string>
|
||||
@@ -85,8 +84,6 @@
|
||||
<string name="settings_general_category">Chung</string>
|
||||
<string name="settings_dark_theme_title">Chủ đề tối</string>
|
||||
<string name="settings_dark_theme_summary">Dùng chủ đề tối</string>
|
||||
<string name="settings_notification_title">Thông báo cập nhật</string>
|
||||
<string name="settings_notification_summary">Hiện thông báo cập nhật khi có phiên bản mới</string>
|
||||
<string name="settings_clear_cache_title">Xoá bộ đệm kho</string>
|
||||
<string name="settings_clear_cache_summary">Xoá thông tin truy cập nhật về các kho mô-đun, buộc ứng dụng làm mới trực tuyến</string>
|
||||
|
||||
|
@@ -89,7 +89,6 @@
|
||||
<string name="settings_reboot_toast">重启以应用设置</string>
|
||||
<string name="release_notes">发布说明</string>
|
||||
<string name="repo_cache_cleared">资源库缓存已清除</string>
|
||||
<string name="safetyNet_hide_notice">此应用使用了 SafetyNet\n已默认由 MagiskHide 处理</string>
|
||||
<string name="process_error">处理失败</string>
|
||||
<string name="internal_storage">Zip 已被储存到:\n[内部存储空间]%1$s</string>
|
||||
<string name="zip_download_title">正在下载</string>
|
||||
@@ -126,8 +125,6 @@
|
||||
<string name="settings_general_category">常规</string>
|
||||
<string name="settings_dark_theme_title">暗色主题</string>
|
||||
<string name="settings_dark_theme_summary">使用暗色主题</string>
|
||||
<string name="settings_notification_title">更新通知</string>
|
||||
<string name="settings_notification_summary">当有新版本时显示更新通知</string>
|
||||
<string name="settings_clear_cache_title">清除仓库缓存</string>
|
||||
<string name="settings_clear_cache_summary">清除已缓存的在线仓库信息,强制刷新在线数据</string>
|
||||
<string name="settings_hide_manager_title">隐藏 Magisk Manager</string>
|
||||
|
@@ -72,7 +72,6 @@
|
||||
<string name="settings_reboot_toast">重啟以完成設定</string>
|
||||
<string name="release_notes">發布說明</string>
|
||||
<string name="repo_cache_cleared">資源庫暫存已清除</string>
|
||||
<string name="safetyNet_hide_notice">此應用使用了 SafetyNet\n已默認由 MagiskHide 處理</string>
|
||||
|
||||
<!--Settings Activity -->
|
||||
<string name="settings_general_category">常規</string>
|
||||
@@ -140,8 +139,6 @@
|
||||
<string name="zip_process_title">處理中</string>
|
||||
<string name="uninstall_magisk_title">解除安裝 Magisk</string>
|
||||
<string name="uninstall_magisk_msg">所有模組將會被停用 / 刪除。root會被移除,並有可能在目前資料未加密的情況下被加密</string>
|
||||
<string name="settings_notification_summary">有更新的時候顯示通知</string>
|
||||
<string name="settings_notification_title">更新通知</string>
|
||||
<string name="settings_core_only_summary">僅啟用核心功能,所有模組將不會被載入。MagiskSU、MagiskHide 和 systemless hosts 仍會持續運作</string>
|
||||
<string name="safetyNet_check_success">SafetyNet 檢查成功</string>
|
||||
<string name="safetyNet_network_loss">網路斷線</string>
|
||||
@@ -222,5 +219,7 @@
|
||||
<string name="settings_check_update_title">檢查更新</string>
|
||||
<string name="settings_check_update_summary">在背景定期檢查更新</string>
|
||||
<string name="disable_fingerprint">沒有指紋加入或是裝置不支援</string>
|
||||
<string name="cannot_check_sn_title">無法檢查 SafetyNet</string>
|
||||
<string name="cannot_check_sn_notice">由於一些 Google Play Service 的改變,重新包裝過的 Magisk Manager 無法進行 SafetyNet 檢查。</string>
|
||||
|
||||
</resources>
|
||||
|
@@ -10,6 +10,5 @@
|
||||
<dimen name="card_layout_padding">10dp</dimen>
|
||||
<dimen name="card_textview_width">300dip</dimen>
|
||||
<dimen name="checkbox_padding">3dp</dimen>
|
||||
<dimen name="card_appicon_size">50dp</dimen>
|
||||
<dimen name="fab_padding">16dp</dimen>
|
||||
</resources>
|
@@ -92,7 +92,6 @@
|
||||
<string name="settings_reboot_toast">Reboot to apply settings</string>
|
||||
<string name="release_notes">Release notes</string>
|
||||
<string name="repo_cache_cleared">Repo cache cleared</string>
|
||||
<string name="safetyNet_hide_notice">This app uses SafetyNet\nAlready handled by MagiskHide by default</string>
|
||||
<string name="process_error">Process error</string>
|
||||
<string name="internal_storage">The zip is stored in:\n[Internal Storage]%1$s</string>
|
||||
<string name="zip_download_title">Downloading</string>
|
||||
@@ -124,13 +123,13 @@
|
||||
<string name="proprietary_title">Download Proprietary Code</string>
|
||||
<string name="proprietary_notice">Magisk Manager is FOSS, which doesn\'t contain Google\'s proprietary SafetyNet API code.\n\nDo you allow Magisk Manager to download an extension (contains GoogleApiClient) for SafetyNet checks?</string>
|
||||
<string name="su_db_corrupt">SU database is corrupted, will recreate new db</string>
|
||||
<string name="cannot_check_sn_title">Cannot check SafetyNet</string>
|
||||
<string name="cannot_check_sn_notice">Due to some changes in Google Play Services, it is not possible to check SafetyNet on repackaged Magisk Manager</string>
|
||||
|
||||
<!--Settings Activity -->
|
||||
<string name="settings_general_category">General</string>
|
||||
<string name="settings_dark_theme_title">Dark Theme</string>
|
||||
<string name="settings_dark_theme_summary">Enable dark theme</string>
|
||||
<string name="settings_notification_title">Update Notification</string>
|
||||
<string name="settings_notification_summary">Show update notifications when new version is available</string>
|
||||
<string name="settings_clear_cache_title">Clear Repo Cache</string>
|
||||
<string name="settings_clear_cache_summary">Clear the cached information for online repos, forces the app to refresh online</string>
|
||||
<string name="settings_hide_manager_title">Hide Magisk Manager</string>
|
||||
|
Reference in New Issue
Block a user