mirror of
https://github.com/topjohnwu/Magisk.git
synced 2025-08-14 10:07:27 +00:00
Compare commits
53 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 | ||
![]() |
0c782edf21 | ||
![]() |
e3948d295e | ||
![]() |
5f2c742a5c | ||
![]() |
b30c77aab9 | ||
![]() |
a5916b9c49 | ||
![]() |
453180e30b | ||
![]() |
8bd432d391 | ||
![]() |
c9d3e20aef | ||
![]() |
d5408d1f09 | ||
![]() |
f334532aba | ||
![]() |
be77c09f3d | ||
![]() |
7de6a92753 | ||
![]() |
36f76f5a14 | ||
![]() |
b84523d557 | ||
![]() |
2c78c415e9 | ||
![]() |
79ccb30dd2 | ||
![]() |
3c566becf6 | ||
![]() |
151ca593af | ||
![]() |
4132eacba0 | ||
![]() |
06e6151816 | ||
![]() |
70277d4edd | ||
![]() |
d21d2f1a9c | ||
![]() |
74a7be996f |
26
build.gradle
26
build.gradle
@@ -1,15 +1,15 @@
|
||||
apply plugin: 'com.android.application'
|
||||
|
||||
android {
|
||||
compileSdkVersion 27
|
||||
buildToolsVersion "27.0.3"
|
||||
compileSdkVersion rootProject.ext.compileSdkVersion
|
||||
buildToolsVersion rootProject.ext.buildToolsVersion
|
||||
|
||||
defaultConfig {
|
||||
applicationId "com.topjohnwu.magisk"
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 27
|
||||
versionCode 105
|
||||
versionName "5.6.1"
|
||||
targetSdkVersion rootProject.ext.compileSdkVersion
|
||||
versionCode 115
|
||||
versionName "5.7.0"
|
||||
javaCompileOptions {
|
||||
annotationProcessorOptions {
|
||||
argument('butterknife.debuggable', 'false')
|
||||
@@ -21,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 {
|
||||
@@ -37,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.0.2'
|
||||
implementation 'com.android.support:cardview-v7:27.0.2'
|
||||
implementation 'com.android.support:design:27.0.2'
|
||||
implementation 'com.android.support:support-v4:27.0.2'
|
||||
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)
|
||||
@@ -159,8 +168,8 @@ public class MagiskFragment extends Fragment
|
||||
|
||||
safetyNetStatusText.setText(R.string.safetyNet_check_text);
|
||||
|
||||
mm.safetyNetDone.hasPublished = false;
|
||||
mm.updateCheckDone.hasPublished = false;
|
||||
mm.safetyNetDone.reset();
|
||||
mm.updateCheckDone.reset();
|
||||
mm.remoteMagiskVersionString = null;
|
||||
mm.remoteMagiskVersionCode = -1;
|
||||
collapse();
|
||||
@@ -176,11 +185,11 @@ public class MagiskFragment extends Fragment
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTopicPublished(Topic topic, Object result) {
|
||||
public void onTopicPublished(Topic topic) {
|
||||
if (topic == mm.updateCheckDone) {
|
||||
updateCheckUI();
|
||||
} else if (topic == mm.safetyNetDone) {
|
||||
updateSafetyNetUI((int) result);
|
||||
updateSafetyNetUI((int) topic.getResults()[0]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
@@ -84,7 +84,7 @@ public class MagiskHideFragment extends Fragment implements Topic.Subscriber {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTopicPublished(Topic topic, Object result) {
|
||||
public void onTopicPublished(Topic topic) {
|
||||
mSwipeRefreshLayout.setRefreshing(false);
|
||||
appAdapter.filter(lastFilter);
|
||||
}
|
||||
|
@@ -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();
|
||||
@@ -127,7 +125,7 @@ public class MainActivity extends Activity
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTopicPublished(Topic topic, Object result) {
|
||||
public void onTopicPublished(Topic topic) {
|
||||
recreate();
|
||||
}
|
||||
|
||||
@@ -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,22 +185,23 @@ public class MainActivity extends Activity
|
||||
navigationView.setCheckedItem(itemId);
|
||||
switch (itemId) {
|
||||
case R.id.magisk:
|
||||
displayFragment(new MagiskFragment(), "magisk", true);
|
||||
fromShortcut = false;
|
||||
displayFragment(new MagiskFragment(), true);
|
||||
break;
|
||||
case R.id.superuser:
|
||||
displayFragment(new SuperuserFragment(), "superuser", true);
|
||||
displayFragment(new SuperuserFragment(), true);
|
||||
break;
|
||||
case R.id.modules:
|
||||
displayFragment(new ModulesFragment(), "modules", true);
|
||||
displayFragment(new ModulesFragment(), true);
|
||||
break;
|
||||
case R.id.downloads:
|
||||
displayFragment(new ReposFragment(), "downloads", true);
|
||||
displayFragment(new ReposFragment(), true);
|
||||
break;
|
||||
case R.id.magiskhide:
|
||||
displayFragment(new MagiskHideFragment(), Const.Key.MAGISKHIDE, true);
|
||||
displayFragment(new MagiskHideFragment(), true);
|
||||
break;
|
||||
case R.id.log:
|
||||
displayFragment(new LogFragment(), "log", false);
|
||||
displayFragment(new LogFragment(), false);
|
||||
break;
|
||||
case R.id.settings:
|
||||
startActivity(new Intent(this, SettingsActivity.class));
|
||||
@@ -218,12 +214,13 @@ public class MainActivity extends Activity
|
||||
}
|
||||
}
|
||||
|
||||
private void displayFragment(@NonNull Fragment navFragment, String tag, boolean setElevation) {
|
||||
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
|
||||
private void displayFragment(@NonNull Fragment navFragment, boolean setElevation) {
|
||||
supportInvalidateOptionsMenu();
|
||||
transaction.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out);
|
||||
transaction.replace(R.id.content_frame, navFragment, tag).commitNow();
|
||||
if (setElevation) toolbar.setElevation(toolbarElevation);
|
||||
else toolbar.setElevation(0);
|
||||
getSupportFragmentManager()
|
||||
.beginTransaction()
|
||||
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
|
||||
.replace(R.id.content_frame, navFragment)
|
||||
.commitNow();
|
||||
toolbar.setElevation(setElevation ? toolbarElevation : 0);
|
||||
}
|
||||
}
|
||||
|
@@ -79,7 +79,7 @@ public class ModulesFragment extends Fragment implements Topic.Subscriber {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTopicPublished(Topic topic, Object result) {
|
||||
public void onTopicPublished(Topic topic) {
|
||||
updateUI();
|
||||
}
|
||||
|
||||
|
@@ -27,6 +27,7 @@ import butterknife.Unbinder;
|
||||
public class ReposFragment extends Fragment implements Topic.Subscriber {
|
||||
|
||||
private Unbinder unbinder;
|
||||
private MagiskManager mm;
|
||||
@BindView(R.id.recyclerView) RecyclerView recyclerView;
|
||||
@BindView(R.id.empty_rv) TextView emptyRv;
|
||||
@BindView(R.id.swipeRefreshLayout) SwipeRefreshLayout mSwipeRefreshLayout;
|
||||
@@ -44,8 +45,9 @@ public class ReposFragment extends Fragment implements Topic.Subscriber {
|
||||
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
||||
View view = inflater.inflate(R.layout.fragment_repos, container, false);
|
||||
unbinder = ButterKnife.bind(this, view);
|
||||
mm = getApplication();
|
||||
|
||||
mSwipeRefreshLayout.setRefreshing(true);
|
||||
mSwipeRefreshLayout.setRefreshing(mm.repoLoadDone.isPending());
|
||||
|
||||
mSwipeRefreshLayout.setOnRefreshListener(() -> {
|
||||
recyclerView.setVisibility(View.VISIBLE);
|
||||
@@ -60,7 +62,7 @@ public class ReposFragment extends Fragment implements Topic.Subscriber {
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
adapter = new ReposAdapter(getApplication().repoDB, getApplication().moduleMap);
|
||||
adapter = new ReposAdapter(mm.repoDB, mm.moduleMap);
|
||||
recyclerView.setAdapter(adapter);
|
||||
super.onResume();
|
||||
}
|
||||
@@ -72,7 +74,7 @@ public class ReposFragment extends Fragment implements Topic.Subscriber {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTopicPublished(Topic topic, Object result) {
|
||||
public void onTopicPublished(Topic topic) {
|
||||
mSwipeRefreshLayout.setRefreshing(false);
|
||||
recyclerView.setVisibility(adapter.getItemCount() == 0 ? View.GONE : View.VISIBLE);
|
||||
emptyRv.setVisibility(adapter.getItemCount() == 0 ? View.VISIBLE : View.GONE);
|
||||
@@ -80,7 +82,7 @@ public class ReposFragment extends Fragment implements Topic.Subscriber {
|
||||
|
||||
@Override
|
||||
public Topic[] getSubscription() {
|
||||
return new Topic[] { getApplication().repoLoadDone };
|
||||
return new Topic[] { mm.repoLoadDone };
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -103,7 +105,6 @@ public class ReposFragment extends Fragment implements Topic.Subscriber {
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
MagiskManager mm = getApplication();
|
||||
if (item.getItemId() == R.id.repo_sort) {
|
||||
new AlertDialog.Builder(getActivity())
|
||||
.setTitle(R.string.sorting_order)
|
||||
|
@@ -69,7 +69,7 @@ public class SettingsActivity extends Activity implements Topic.Subscriber {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTopicPublished(Topic topic, Object result) {
|
||||
public void onTopicPublished(Topic topic) {
|
||||
recreate();
|
||||
}
|
||||
|
||||
@@ -156,12 +156,10 @@ 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) -> {
|
||||
Utils.runWithPermission(getActivity(),
|
||||
Manifest.permission.WRITE_EXTERNAL_STORAGE,
|
||||
() -> new HideManager(getActivity()).exec());
|
||||
new HideManager(getActivity()).exec();
|
||||
return true;
|
||||
});
|
||||
generalCatagory.removePreference(restoreManager);
|
||||
@@ -188,18 +186,6 @@ public class SettingsActivity extends Activity implements Topic.Subscriber {
|
||||
generalCatagory.removePreference(hideManager);
|
||||
}
|
||||
|
||||
if (mm.getPackageName().equals(Const.ORIG_PKG_NAME) && mm.magiskVersionCode >= 1440) {
|
||||
hideManager.setOnPreferenceClickListener((pref) -> {
|
||||
Utils.runWithPermission(getActivity(),
|
||||
Manifest.permission.WRITE_EXTERNAL_STORAGE,
|
||||
() -> new HideManager(getActivity()).exec());
|
||||
return true;
|
||||
});
|
||||
generalCatagory.removePreference(restoreManager);
|
||||
} else {
|
||||
generalCatagory.removePreference(hideManager);
|
||||
}
|
||||
|
||||
if (!Shell.rootAccess() || (Const.USER_ID > 0 &&
|
||||
mm.multiuserMode == Const.Value.MULTIUSER_MODE_OWNER_MANAGED)) {
|
||||
prefScreen.removePreference(suCategory);
|
||||
@@ -208,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);
|
||||
}
|
||||
}
|
||||
@@ -290,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();
|
||||
@@ -325,7 +311,7 @@ public class SettingsActivity extends Activity implements Topic.Subscriber {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTopicPublished(Topic topic, Object result) {
|
||||
public void onTopicPublished(Topic topic) {
|
||||
setLocalePreference((ListPreference) findPreference(Const.Key.LOCALE));
|
||||
}
|
||||
|
||||
|
@@ -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;
|
||||
|
@@ -11,9 +11,10 @@ import com.topjohnwu.magisk.utils.Utils;
|
||||
import com.topjohnwu.magisk.utils.ZipUtils;
|
||||
import com.topjohnwu.superuser.Shell;
|
||||
import com.topjohnwu.superuser.ShellUtils;
|
||||
import com.topjohnwu.superuser.io.SuFile;
|
||||
import com.topjohnwu.superuser.io.SuFileOutputStream;
|
||||
import com.topjohnwu.utils.JarMap;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.security.SecureRandom;
|
||||
import java.util.jar.JarEntry;
|
||||
@@ -104,8 +105,7 @@ public class HideManager extends ParallelTask<Void, Void, Boolean> {
|
||||
MagiskManager mm = MagiskManager.get();
|
||||
|
||||
// Generate a new unhide app with random package name
|
||||
File repack = new File(Const.EXTERNAL_PATH, "repack.apk");
|
||||
repack.getParentFile().mkdirs();
|
||||
SuFile repack = new SuFile("/data/local/tmp/repack.apk", true);
|
||||
String pkg = genPackageName("com.", Const.ORIG_PKG_NAME.length());
|
||||
|
||||
try {
|
||||
@@ -123,7 +123,7 @@ public class HideManager extends ParallelTask<Void, Void, Boolean> {
|
||||
apk.getOutputStream(je).write(xml);
|
||||
|
||||
// Sign the APK
|
||||
ZipUtils.signZip(apk, repack);
|
||||
ZipUtils.signZip(apk, new SuFileOutputStream(repack));
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return false;
|
||||
@@ -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);
|
||||
|
||||
|
@@ -42,6 +42,7 @@ public class InstallMagisk extends ParallelTask<Void, Void, Boolean> {
|
||||
private List<String> console, logs;
|
||||
private String mBootLocation;
|
||||
private int mode;
|
||||
private File install;
|
||||
|
||||
private InstallMagisk(Activity context, List<String> console, List<String> logs, Uri zip) {
|
||||
super(context);
|
||||
@@ -66,20 +67,28 @@ public class InstallMagisk extends ParallelTask<Void, Void, Boolean> {
|
||||
protected Boolean doInBackground(Void... voids) {
|
||||
MagiskManager mm = MagiskManager.get();
|
||||
|
||||
File install = new File(
|
||||
install = new File(
|
||||
(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N ?
|
||||
mm.createDeviceProtectedStorageContext() :
|
||||
mm).getFilesDir().getParent()
|
||||
mm.createDeviceProtectedStorageContext() : mm)
|
||||
.getFilesDir().getParent()
|
||||
, "install");
|
||||
Shell.Sync.sh("rm -rf " + install);
|
||||
|
||||
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
|
||||
@@ -181,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");
|
||||
@@ -249,6 +258,7 @@ public class InstallMagisk extends ParallelTask<Void, Void, Boolean> {
|
||||
protected void onPostExecute(Boolean result) {
|
||||
FlashActivity activity = (FlashActivity) getActivity();
|
||||
if (!result) {
|
||||
Shell.Async.sh("rm -rf " + install);
|
||||
console.add("! Installation failed");
|
||||
activity.reboot.setVisibility(View.GONE);
|
||||
}
|
||||
|
@@ -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.repoLoadDone.hasPublished = false;
|
||||
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,69 +168,60 @@ 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)
|
||||
ReposFragment.adapter.notifyDBChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPreExecute() {
|
||||
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,79 +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);
|
||||
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
|
||||
@@ -182,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) {
|
||||
@@ -192,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);
|
||||
}
|
||||
@@ -213,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()) {
|
||||
@@ -239,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;
|
||||
@@ -259,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"));
|
||||
}
|
||||
@@ -290,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();
|
||||
|
@@ -7,8 +7,13 @@ import java.util.List;
|
||||
|
||||
public class Topic {
|
||||
|
||||
public boolean hasPublished = false;
|
||||
private static final int NON_INIT = 0;
|
||||
private static final int PENDING = 1;
|
||||
private static final int PUBLISHED = 2;
|
||||
|
||||
private int state = NON_INIT;
|
||||
private List<WeakReference<Subscriber>> subscribers;
|
||||
private Object[] results;
|
||||
|
||||
public void subscribe(Subscriber sub) {
|
||||
if (subscribers == null) {
|
||||
@@ -30,29 +35,47 @@ public class Topic {
|
||||
}
|
||||
}
|
||||
|
||||
public void reset() {
|
||||
state = NON_INIT;
|
||||
results = null;
|
||||
}
|
||||
|
||||
public boolean isPublished() {
|
||||
return state == PUBLISHED;
|
||||
}
|
||||
|
||||
public void publish() {
|
||||
publish(true, null);
|
||||
publish(true);
|
||||
}
|
||||
|
||||
public void publish(boolean record) {
|
||||
publish(record, null);
|
||||
}
|
||||
|
||||
public void publish(boolean record, Object result) {
|
||||
hasPublished = record;
|
||||
public void publish(boolean record, Object... results) {
|
||||
if (record)
|
||||
state = PUBLISHED;
|
||||
this.results = results;
|
||||
if (subscribers != null) {
|
||||
for (WeakReference<Subscriber> subscriber : subscribers) {
|
||||
if (subscriber.get() != null)
|
||||
subscriber.get().onTopicPublished(this, result);
|
||||
subscriber.get().onTopicPublished(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Object[] getResults() {
|
||||
return results;
|
||||
}
|
||||
|
||||
public boolean isPending() {
|
||||
return state == PENDING;
|
||||
}
|
||||
|
||||
public void setPending() {
|
||||
state = PENDING;
|
||||
}
|
||||
|
||||
public interface Subscriber {
|
||||
default void subscribeTopics() {
|
||||
for (Topic topic : getSubscription()) {
|
||||
if (topic.hasPublished) {
|
||||
if (topic.isPublished()) {
|
||||
onTopicPublished(topic);
|
||||
}
|
||||
topic.subscribe(this);
|
||||
@@ -63,13 +86,7 @@ public class Topic {
|
||||
event.unsubscribe(this);
|
||||
}
|
||||
}
|
||||
default void onTopicPublished() {
|
||||
onTopicPublished(null, null);
|
||||
}
|
||||
default void onTopicPublished(Topic topic) {
|
||||
onTopicPublished(topic, null);
|
||||
}
|
||||
void onTopicPublished(Topic topic, Object result);
|
||||
void onTopicPublished(Topic topic);
|
||||
Topic[] getSubscription();
|
||||
}
|
||||
}
|
||||
|
@@ -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();
|
||||
}
|
||||
|
@@ -49,21 +49,10 @@ public class ZipUtils {
|
||||
}
|
||||
}
|
||||
|
||||
public static void signZip(InputStream is, File output) throws Exception {
|
||||
try (JarMap map = new JarMap(is, false)) {
|
||||
signZip(map, output);
|
||||
}
|
||||
}
|
||||
|
||||
public static void signZip(File input, File output) throws Exception {
|
||||
try (JarMap map = new JarMap(input, false)) {
|
||||
signZip(map, output);
|
||||
}
|
||||
}
|
||||
|
||||
public static void signZip(JarMap input, File output) throws Exception {
|
||||
try (BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(output))) {
|
||||
signZip(input, out);
|
||||
try (JarMap map = new JarMap(input, false);
|
||||
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(output))) {
|
||||
signZip(map, out);
|
||||
}
|
||||
}
|
||||
|
||||
|
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,4 +1,5 @@
|
||||
### v5.6.1
|
||||
- Fix database crashes on F2FS with SQLite 3.21.0+
|
||||
- Optimize several settings options
|
||||
- Use native XML for settings migration
|
||||
### 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>
|
||||
@@ -140,6 +137,8 @@
|
||||
<string name="language">Sprache</string>
|
||||
<string name="system_default">(Systemstandard)</string>
|
||||
<string name="settings_update">Aktualisierungs-Einstellungen</string>
|
||||
<string name="settings_check_update_title">Prüfe nach Aktualisierungen</string>
|
||||
<string name="settings_check_update_summary">Prüfe regelmäßig im Hintergrund nach Aktualisierungen</string>
|
||||
<string name="settings_update_channel_title">Aktualisierungs-Kanal</string>
|
||||
<string name="settings_update_stable">Stabil</string>
|
||||
<string name="settings_update_beta">Beta</string>
|
||||
@@ -188,6 +187,7 @@
|
||||
<string name="requester_summary">Root-Sitzungen erben den Namensraum des Abfragenden</string>
|
||||
<string name="isolate_summary">Jede Root-Sitzung hat ihren isolierten Namensraum</string>
|
||||
<string name="android_o_not_support">Android 8.0+ wird nicht unterstützt</string>
|
||||
<string name="disable_fingerprint">Keine Fingerabdrücke gespeichert oder keine Geräteunterstützung</string>
|
||||
|
||||
<!--Superuser-->
|
||||
<string name="su_request_title">Superuser-Anfrage</string>
|
||||
@@ -197,7 +197,7 @@
|
||||
<string name="grant">Gewähren</string>
|
||||
<string name="su_warning">Erlaubt den vollen Zugriff auf das Gerät.\nVerweigere, wenn du dir unsicher bist!</string>
|
||||
<string name="forever">Dauerhaft</string>
|
||||
<string name="once">Nur diesmal</string>
|
||||
<string name="once">Einmalig</string>
|
||||
<string name="tenmin">10 Min.</string>
|
||||
<string name="twentymin">20 Min.</string>
|
||||
<string name="thirtymin">30 Min.</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>
|
||||
|
@@ -11,14 +11,14 @@
|
||||
|
||||
<!--Status Fragment-->
|
||||
<string name="magisk_version_error">Magisk no está instalado</string>
|
||||
<string name="checking_for_updates">Comprobando actualizaciones…</string>
|
||||
<string name="checking_for_updates">Comprobando Actualizaciones…</string>
|
||||
<string name="magisk_update_available">¡Disponible Magisk v%1$s!</string>
|
||||
<string name="invalid_update_channel">Canal de actualización inválido</string>
|
||||
<string name="safetyNet_check_text">Toque para empezar la comprobación de SafetyNet</string>
|
||||
<string name="safetyNet_check_text">Comprobar el estado de SafetyNet</string>
|
||||
<string name="checking_safetyNet_status">Comprobando estado de SafetyNet…</string>
|
||||
<string name="safetyNet_check_success">La comprobación de SafetyNet fue exitosa</string>
|
||||
<string name="safetyNet_check_success">La comprobación fue exitosa</string>
|
||||
<string name="safetyNet_api_error">Error en la API de SafetyNet</string>
|
||||
<string name="safetyNet_network_loss">Conexión de red perdida</string>
|
||||
<string name="safetyNet_network_loss">Red no Disponible</string>
|
||||
<string name="safetyNet_service_disconnected">Se ha detenido el servicio</string>
|
||||
<string name="safetyNet_res_invalid">La respuesta no es válida</string>
|
||||
|
||||
@@ -29,13 +29,13 @@
|
||||
<string name="current_magisk_title">Versión instalada: %1$s</string>
|
||||
<string name="install_magisk_title">Última versión: %1$s</string>
|
||||
<string name="uninstall">Desinstalar</string>
|
||||
<string name="uninstall_magisk_msg">Todos los módulos serán desactivados / eliminados. El acceso Root se eliminará y, posiblemente, encriptará los datos si los datos no están cifrados actualmente.</string>
|
||||
<string name="uninstall_magisk_msg">Todos los módulos serán desactivados / eliminados. El acceso Root se eliminará y, posiblemente, cifrará los datos si los datos no están cifrados actualmente.</string>
|
||||
<string name="uninstall_magisk_title">Desinstalar Magisk</string>
|
||||
<string name="update">Actualización %1$s</string>
|
||||
|
||||
<!--Module Fragment-->
|
||||
<string name="no_info_provided">(No hay información)</string>
|
||||
<string name="no_modules_found">No se han encontrado módulos</string>
|
||||
<string name="no_modules_found">No se encontraron módulos</string>
|
||||
<string name="update_file_created">El módulo se actualizará en el siguiente reinicio</string>
|
||||
<string name="remove_file_created">El módulo se eliminará en el siguiente reinicio</string>
|
||||
<string name="remove_file_deleted">El módulo no se eliminará en el siguiente reinicio</string>
|
||||
@@ -47,10 +47,10 @@
|
||||
<string name="reboot_download">Reiniciar en Modo Download</string>
|
||||
|
||||
<!--Repo Fragment-->
|
||||
<string name="update_available">Actualización disponible</string>
|
||||
<string name="update_available">Actualización Disponible</string>
|
||||
<string name="installed">Instalado</string>
|
||||
<string name="not_installed">No Instalado</string>
|
||||
<string name="updated_on">Actualizando en: %1$s</string>
|
||||
<string name="updated_on">Actualizado el: %1$s</string>
|
||||
<string name="sorting_order">Orden de Clasificación</string>
|
||||
<string name="sort_by_name">Ordenar por nombre</string>
|
||||
<string name="sort_by_update">Ordenar según la última actualización</string>
|
||||
@@ -84,17 +84,16 @@
|
||||
<string name="download">Descargar</string>
|
||||
<string name="download_file_error">Error descargando archivo</string>
|
||||
<string name="reboot">Reiniciar</string>
|
||||
<string name="zip_process_msg">Procesando archivo zip …</string>
|
||||
<string name="zip_process_msg">Procesando archivo zip…</string>
|
||||
<string name="downloading_toast">Descargando %1$s</string>
|
||||
<string name="magisk_update_title">¡Nueva actualización de Magisk disponible!</string>
|
||||
<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>
|
||||
<string name="zip_download_msg">Descargando el archivo zip (%1$d%%) …</string>
|
||||
<string name="zip_download_msg">Descargando el archivo zip (%1$d%%)…</string>
|
||||
<string name="zip_process_title">Procesando</string>
|
||||
<string name="manager_update_title">Nueva actualización de Magisk Manager disponible!</string>
|
||||
<string name="manager_download_install">Pulse para descargar e instalar</string>
|
||||
@@ -102,8 +101,8 @@
|
||||
<string name="dtbo_patched_reboot">Magisk Manager ha parcheado dtbo.img, por favor reinicia</string>
|
||||
<string name="magisk_updates">Actualización de Magisk</string>
|
||||
<string name="flashing">Flasheando</string>
|
||||
<string name="hide_manager_toast">Ocultando Magisk Manager...</string>
|
||||
<string name="hide_manager_toast2">Esto podría tomar un tiempo...</string>
|
||||
<string name="hide_manager_toast">Ocultando Magisk Manager…</string>
|
||||
<string name="hide_manager_toast2">Esto podría tomar un tiempo…</string>
|
||||
<string name="hide_manager_fail_toast">La Ocultación de Magisk Manager ha fallado…</string>
|
||||
<string name="download_zip_only">Descargar sólo el archivo ZIP</string>
|
||||
<string name="patch_boot_file">Parcheo de la imagen boot</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>
|
||||
@@ -147,10 +144,10 @@
|
||||
<string name="settings_boot_format_title">Parchear imagen boot por tipo de formato</string>
|
||||
<string name="settings_boot_format_summary">Seleccionar el formato de salida para parchear la imagen boot.\nEscoja .img para flashear mediante fastboot/download mode; escoja .img.tar para flashear con ODIN.</string>
|
||||
|
||||
<string name="settings_core_only_summary">Habilitar sólo funciones principales, no se cargarán todos los módulos. MagiskSU, MagiskHide, y archivo hosts fuera de la partición de sistema seguirán habilitados</string>
|
||||
<string name="settings_core_only_summary">Habilitar sólo funciones principales, no se cargarán todos los módulos. MagiskSU, MagiskHide, y Systemless Hosts seguirán habilitados</string>
|
||||
<string name="settings_magiskhide_summary">Ocultar Magisk de varias detecciones</string>
|
||||
<string name="settings_hosts_title">Habilitar archivo hosts fuera de la partición de sistema</string>
|
||||
<string name="settings_hosts_summary">Soporte para aplicaciones de bloqueo de publicidad fuera de la partición de sistema</string>
|
||||
<string name="settings_hosts_title">Systemless Hosts</string>
|
||||
<string name="settings_hosts_summary">Soporte para aplicaciones Adblock fuera de la partición system</string>
|
||||
|
||||
<string name="settings_su_app_adb">Aplicaciones y ADB</string>
|
||||
<string name="settings_su_app">Sólo aplicaciones</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 la autenticación de huellas digitales</string>
|
||||
<string name="settings_su_fingerprint_summary">Utilice el escáner de huellas digitales 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>
|
||||
|
@@ -1,46 +1,60 @@
|
||||
<resources>
|
||||
<!--Universal-->
|
||||
|
||||
<!--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>
|
||||
|
||||
<!--Status Fragment-->
|
||||
<string name="magisk_version_error">Magisk non installé</string>
|
||||
<string name="checking_for_updates">Vérification de mises à jour…</string>
|
||||
<string name="magisk_version_error">Magisk n\'est pas installé</string>
|
||||
<string name="checking_for_updates">Vérification des mises à jours…</string>
|
||||
<string name="magisk_update_available">Magisk v%1$s disponible !</string>
|
||||
<string name="invalid_update_channel">Canal de mise à jour invalide</string>
|
||||
<string name="safetyNet_check_text">Appuyer pour lancer le contrôle SafetyNet</string>
|
||||
<string name="checking_safetyNet_status">Vérification de l\'état de SafetyNet…</string>
|
||||
<string name="checking_safetyNet_status">Vérification de l\'état SafetyNet…</string>
|
||||
<string name="safetyNet_check_success">Contrôle SafetyNet passé avec succès</string>
|
||||
<string name="safetyNet_api_error">Erreur d\'API SafetyNet</string>
|
||||
<string name="safetyNet_network_loss">Connexion réseau indisponible</string>
|
||||
<string name="safetyNet_service_disconnected">Le service a été tué</string>
|
||||
<string name="safetyNet_res_invalid">La réponse est invalide</string>
|
||||
|
||||
<!--Install Fragment-->
|
||||
<string name="advanced_settings_title">Paramètres avancés</string>
|
||||
<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>
|
||||
<string name="update">Mise à jour %1$s</string>
|
||||
|
||||
<!--Module Fragment-->
|
||||
<string name="no_info_provided">(Aucune information transmise)</string>
|
||||
<string name="no_modules_found">Aucun module trouvé</string>
|
||||
<string name="update_file_created">Le module va être mis à jour au prochain redémarrage</string>
|
||||
<string name="remove_file_created">Le module va être supprimé au prochain redémarrage</string>
|
||||
<string name="remove_file_deleted">Le module ne va pas être supprimé au prochain redémarrage</string>
|
||||
<string name="remove_file_deleted">Le module ne sera pas supprimé au prochain redémarrage</string>
|
||||
<string name="disable_file_created">Le module va être désactivé au prochain redémarrage</string>
|
||||
<string name="disable_file_removed">Le module va être activé au prochain redémarrage</string>
|
||||
<string name="author">Créé par %1$s</string>
|
||||
<string name="reboot_recovery">Redémarrer en récupération</string>
|
||||
<string name="reboot_bootloader">Redémarrer en chargement d\'image système</string>
|
||||
<string name="reboot_download">Redémarrer en mode téléchargement</string>
|
||||
|
||||
<!--Repo Fragment-->
|
||||
<string name="update_available">Mise à jour disponible</string>
|
||||
<string name="installed">Installé</string>
|
||||
<string name="not_installed">Non installé</string>
|
||||
<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 mise à jour</string>
|
||||
|
||||
<!--Log Fragment-->
|
||||
<string name="menuSaveLog">Enregistrer journal</string>
|
||||
<string name="menuReload">Actualiser</string>
|
||||
@@ -48,17 +62,19 @@
|
||||
<string name="logs_cleared">Journal effacé avec succès</string>
|
||||
<string name="log_is_empty">Journal vide</string>
|
||||
<string name="logs_save_failed">Impossible d\'écrire le journal sur la carte SD:</string>
|
||||
|
||||
<!--About Activity-->
|
||||
<string name="about">À propos</string>
|
||||
<string name="app_changelog">Modifications de l\'application</string>
|
||||
<string name="translators">Primokorn, Naboleo, tonymanou</string>
|
||||
<string name="app_version">Version de l\'application</string>
|
||||
<string name="app_changelog">Journal</string>
|
||||
<string name="translators"></string>
|
||||
<string name="app_version">Version</string>
|
||||
<string name="app_source_code">Code source</string>
|
||||
<string name="donation">Dons</string>
|
||||
<string name="app_translators">Traducteurs de l\'application</string>
|
||||
<string name="support_thread">Fil de discussion pour support</string>
|
||||
<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>
|
||||
@@ -68,54 +84,71 @@
|
||||
<string name="download">Télécharger</string>
|
||||
<string name="download_file_error">Erreur de téléchargement du fichier</string>
|
||||
<string name="reboot">Redémarrer</string>
|
||||
<string name="zip_process_msg">Exécution du fichier zip…</string>
|
||||
<string name="downloading_toast">Téléchargement %1$s</string>
|
||||
<string name="magisk_update_title">Nouvelle mise à jour de Magisk disponible !</string>
|
||||
<string name="settings_reboot_toast">Redémarrer pour appliquer les changements</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 effacé</string>
|
||||
<string name="safetyNet_hide_notice">Cette application utilise SafetyNet\nDéjà pris en charge par MagiskHide par défaut</string>
|
||||
<string name="process_error">Erreur de traitement</string>
|
||||
<string name="internal_storage">Le zip est stocké dans :\n[Stockage interne]%1$s</string>
|
||||
<string name="zip_process_title">Traitement</string>
|
||||
<string name="repo_cache_cleared">Cache du dépôt éffacé</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="manager_update_title">Nouvelle mise à jour de Magisk Manager disponible !</string>
|
||||
<string name="manager_download_install">Appuyez pour télécharger et installer</string>
|
||||
<string name="dtbo_patched_title">DTBO a été patché !</string>
|
||||
<string name="dtbo_patched_reboot">Magisk Manager a patché dtbo.img, veuillez redémarrer</string>
|
||||
<string name="magisk_updates">Mises à jour Magisk</string>
|
||||
<string name="flashing">Flashage en cours</string>
|
||||
<string name="hide_manager_toast">Masquage de Magisk Manager…</string>
|
||||
<string name="hide_manager_toast2">Cela peut prendre du temps…</string>
|
||||
<string name="hide_manager_fail_toast">Échec du masquage de Magisk Manager…</string>
|
||||
<string name="download_zip_only">Télécharger uniquement le zip</string>
|
||||
<string name="patch_boot_file">Patcher le fichier image Boot</string>
|
||||
<string name="direct_install">Installation directe (recommandée)</string>
|
||||
<string name="install_second_slot">Intaller sur le second slot (après une OTA)</string>
|
||||
<string name="select_method">Choisir une méthode</string>
|
||||
<string name="no_boot_file_patch_support">La version cible de Magisk ne supporte pas la modification du fichier image Boot</string>
|
||||
<string name="boot_file_patch_msg">Sélectionnez l\'image Boot stock au format .img ou .img.tar</string>
|
||||
<string name="complete_uninstall">Désinstaller complètement</string>
|
||||
<string name="restore_done">Restauration effectuée !</string>
|
||||
<string name="restore_fail">Pas de sauvegarde stock disponible !</string>
|
||||
<string name="uninstall_toast">Désinstallation de Magisk Manager dans 5 secondes, n\'oubliez pas de redémarrer par la suite</string>
|
||||
<string name="proprietary_title">Télécharger le code propriétaire</string>
|
||||
<string name="proprietary_notice">Magisk Manager est un logiciel FOSS et ne contient donc pas le code propriétaire de l\'API SafetyNet de Google. Autorisez-vous Magisk Manager à télécharger une extension (qui contient GoogleApiClient) afin de tester SafetyNet ?</string>
|
||||
<string name="su_db_corrupt">La base de données SU est corrompue, création d\'une nouvelle base de données prévue</string>
|
||||
<!--Settings Activity -->
|
||||
<string name="zip_download_msg">Téléchargement du fichier zip (%1$d%%) …</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 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_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 (Recommandé)</string>
|
||||
<string name="install_second_slot">Installer dans le second Slot (Après OTA)</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 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 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éé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>
|
||||
<string name="settings_hide_manager_summary">Reconstruire le Gestionnaire Magisk avec un nom de paquet aléatoire</string>
|
||||
<string name="settings_restore_manager_title">Restaurer le Gestionnaire Magisk</string>
|
||||
<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">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>
|
||||
<string name="settings_update_custom_msg">Insérer une URL personalisée</string>
|
||||
<string name="settings_boot_format_title">Patcher Format Fichier Démarrage</string>
|
||||
<string name="settings_boot_format_summary">Sélectioner le format de sortie de l\'image de boot.\nChoisir .img pour flasher à traver le mode démarrage rapide/téléchargement; choisir .img.tar pour flasher via ODIN.</string>
|
||||
<string name="settings_core_only_title">Mode Magisk Core uniquement</string>
|
||||
<string name="settings_core_only_summary">Activer uniquement les fonctionnalités de base, tous les modules ne seront pas chargés. MagiskSU, MagiskHide et les hosts systemless restent activés</string>
|
||||
<string name="settings_magiskhide_summary">Masquer Magisk de diverses détections</string>
|
||||
<string name="settings_hosts_title">Hosts systemless</string>
|
||||
<string name="settings_hosts_summary">Support hosts systemless pour les applications type Adblock</string>
|
||||
|
||||
<string name="settings_su_app_adb">Applications et ADB</string>
|
||||
<string name="settings_su_app">Applications uniquement</string>
|
||||
<string name="settings_su_adb">ADB uniquement</string>
|
||||
@@ -124,43 +157,37 @@
|
||||
<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_hide_manager_title">Masquer Magisk Manager</string>
|
||||
<string name="settings_hide_manager_summary">Reconstruire Magisk Manager avec un nom de paquet aléatoire</string>
|
||||
<string name="language">Langue</string>
|
||||
<string name="system_default">(Selon système)</string>
|
||||
<string name="settings_update">Paramètres de mises à jour</string>
|
||||
<string name="settings_update_channel_title">Canal de mise à jour</string>
|
||||
<string name="settings_update_stable">Stable</string>
|
||||
<string name="settings_update_beta">Beta</string>
|
||||
<string name="settings_update_custom">Personnaliser</string>
|
||||
<string name="settings_update_custom_msg">Insérer une URL personnalisée</string>
|
||||
<string name="settings_boot_format_title">Format de sortie du boot patché</string>
|
||||
<string name="settings_boot_format_summary">Sélectionner le format de l\'image boot patchée finale.\nChoisir .img pour flasher via fastboot/mode download ; choisir .img.tar pour flasher via ODIN.</string>
|
||||
<string name="settings_su_reauth_title">Ré-authentifier après mise à jour</string>
|
||||
<string name="settings_su_reauth_summary">Ré-authentifier les permissions superuser après les mises à jour d\'une application</string>
|
||||
<string name="settings_su_fingerprint_title">Activer l\'authentification par empreinte</string>
|
||||
<string name="multiuser_mode">Mode multi-utilisateurs</string>
|
||||
<string name="settings_owner_only">Appareil du propriétaire uniquement</string>
|
||||
<string name="settings_owner_manage">Appareil du propriétaire géré</string>
|
||||
<string name="settings_user_independent">Utilisateur indépendant</string>
|
||||
<string name="owner_only_summary">Seul le propriétaire a l\'accès root</string>
|
||||
<string name="owner_manage_summary">Seul le propriétaire peut gérer les accès root et recevoir des demandes de permissions</string>
|
||||
<string name="user_indepenent_summary">Chaque utilisateur dispose de ses propres règles root</string>
|
||||
<string name="multiuser_hint_owner_request">Une requête a été envoyée au propriétaire de l\'appareil. Veuillez basculer sur le profil du propriétaire et accorder la permission</string>
|
||||
<string name="mount_namespace_mode">Monter le mode espace de noms</string>
|
||||
<string name="settings_ns_global">Espace de noms global</string>
|
||||
<string name="settings_ns_requester">Hériter de l\'espace de noms</string>
|
||||
<string name="settings_ns_isolate">Espace de noms isolé</string>
|
||||
<string name="global_summary">Toutes les sessions root utilisent l\'espace de noms global monté</string>
|
||||
<string name="requester_summary">Les sessions root hériteront des espaces de noms du demandeur</string>
|
||||
<string name="isolate_summary">Chaque session root aura son propre espace de noms isolé</string>
|
||||
<!--Superuser-->
|
||||
<string name="su_request_title">Requête Superuser</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>
|
||||
<string name="settings_su_fingerprint_title">Activer l\'authentification par empreinte digitale</string>
|
||||
<string name="settings_su_fingerprint_summary">Utiliser un scanner d\'empreintes digitales pour autoriser les demandes superutilisateur</string>
|
||||
|
||||
<string name="multiuser_mode">Mode Multi-utilisateurs</string>
|
||||
<string name="settings_owner_only">Propriétaire de l\'appareil uniquement</string>
|
||||
<string name="settings_owner_manage">Propriétaire de l\'appareil géré</string>
|
||||
<string name="settings_user_independent">Utilisateur indépendant</string>
|
||||
<string name="owner_only_summary">Seul le propriétaire a un accès root</string>
|
||||
<string name="owner_manage_summary">Seul le propriétaire peut gérer l\'accès root et recevoir des demandes de requêtes</string>
|
||||
<string name="user_indepenent_summary">Chaque utilisateur a ses propres règles de root séparées</string>
|
||||
<string name="multiuser_hint_owner_request">Une requête a été envoyée au propriétaire du périphérique. Merci de basculer en propriétaire et d\'accepter les permissions requises</string>
|
||||
|
||||
<string name="mount_namespace_mode">Mode Montage Espace de Noms</string>
|
||||
<string name="settings_ns_global">Espace de Nom Global</string>
|
||||
<string name="settings_ns_requester">Hériter de l\'espace de noms</string>
|
||||
<string name="settings_ns_isolate">Espace de noms isolé</string>
|
||||
<string name="global_summary">Toutes les sessions racines utilisent l\'espace de noms de montage global</string>
|
||||
<string name="requester_summary">Les sessions racines hériteront de l\'espace de noms de son demandeur</string>
|
||||
<string name="isolate_summary">Chaque session racine aura son propre espace de noms isolé</string>
|
||||
<string name="android_o_not_support">Android 8.0+ n\'est pas supporté</string>
|
||||
<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 Superutilisateur</string>
|
||||
<string name="deny_with_str">Refuser%1$s</string>
|
||||
<string name="deny">Refuser</string>
|
||||
<string name="prompt">Demander</string>
|
||||
@@ -172,22 +199,25 @@
|
||||
<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>
|
||||
|
||||
<!--Superuser logs-->
|
||||
<string name="pid">PID :\u0020</string>
|
||||
<string name="target_uid">UID cible :\\u0020</string>
|
||||
<string name="command">Commande :\u0020</string>
|
||||
|
||||
</resources>
|
||||
|
@@ -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>
|
||||
@@ -185,6 +182,7 @@
|
||||
<string name="requester_summary">Sesi root akan mewarisi ruang nama pemintanya</string>
|
||||
<string name="isolate_summary">Setiap sesi root akan memiliki ruang nama tersendiri</string>
|
||||
<string name="android_o_not_support">Tidak mendukung Android 8.0+</string>
|
||||
<string name="disable_fingerprint">Tidak ada sidik jari diatur atau tidak ada dukungan perangkat</string>
|
||||
|
||||
<!--Superuser-->
|
||||
<string name="su_request_title">Permintaan Superuser</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="superuser">Super Naudotojas</string>
|
||||
<string name="log">Surašymai</string>
|
||||
<string name="downloads">Papildinių parduotuvė</string>
|
||||
<string name="superuser">Supervartotojas</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>
|
||||
@@ -28,9 +28,9 @@
|
||||
<string name="keep_dm_verity">Palikti dm-verity</string>
|
||||
<string name="current_magisk_title">Instaliuota versija: %1$s</string>
|
||||
<string name="install_magisk_title">Naujausia versija: %1$s</string>
|
||||
<string name="uninstall">Ištrinti</string>
|
||||
<string name="uninstall_magisk_title">Ištrinti Magisk</string>
|
||||
<string name="uninstall_magisk_msg">Visi papildiniai bus išjungti/panaikinti. Root bus panaikintas. Jei duomenys nėra užšifruoti, yra galimybė, kad jie taps užšifruotais..</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. 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,51 +49,51 @@
|
||||
<!--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šymas sėkmingai užrašytas</string>
|
||||
<string name="log_is_empty">Surašymas yra tuščias</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>
|
||||
<string name="app_changelog">Pakeitimų sąrašas</string>
|
||||
<string name="translators">Vv2233Bb</string>
|
||||
<string name="app_version">Versija</string>
|
||||
|
||||
<string name="app_source_code">Prisidėkite</string>
|
||||
<string name="donation">Paaukoti</string>
|
||||
<string name="app_translators">Vertėjai</string>
|
||||
<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>
|
||||
<string name="downloading_toast">Atsisiunčiamas %1$s</string>
|
||||
<string name="magisk_update_title">Naujas Magisk atnaujinimas egzistuoja!</string>
|
||||
<string name="magisk_update_title">Atsirado nauja Magisk versija!</string>
|
||||
<string name="settings_reboot_toast">Nustatymų įgalinimui prašome perkrauti telefoną</string>
|
||||
<string name="release_notes">Šios versijos pakeitimai</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>
|
||||
@@ -114,39 +114,41 @@
|
||||
<string name="boot_file_patch_msg">Pasirinkti boot failą .img ar .img.tar formate.</string>
|
||||
<string name="complete_uninstall">Pilnas pašalinimas</string>
|
||||
<string name="restore_img">Atstatyti boot failą.</string>
|
||||
<string name="uninstall_app">Ištrinti programėlę</string>
|
||||
<string name="uninstall_app">Pašalinti programėlę</string>
|
||||
<string name="restore_done">Atstatymas įvykdytas!</string>
|
||||
<string name="restore_fail">Gamyklinis atstatymo failas neegzistuoja!</string>
|
||||
<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 inerneto jungtį</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>
|
||||
<string name="settings_hide_manager_summary">Perpakuoti Magisk Manager su atsitiktiniu pakuotės pavadinimu</string>
|
||||
<string name="settings_restore_manager_title">Grąžinti Magisk Manager</string>
|
||||
<string name="settings_restore_manager_summary">Grąžinti Magisk Manager su orginalia pakuote</string>
|
||||
<string name="language">Kalba</string>
|
||||
<string name="system_default">(Sistemos)</string>
|
||||
<string name="settings_update">Atnaujinimų nustatymai</string>
|
||||
<string name="settings_check_update_title">Automatiškas atnaujinimų ieškojimas</string>
|
||||
<string name="settings_check_update_summary">Automatiškai ieškoti Magisk ir Magisk Manager atnaujinimų.</string>
|
||||
<string name="settings_update_channel_title">Atnaujinimų tipai</string>
|
||||
<string name="settings_update_stable">Stabilūs</string>
|
||||
<string name="settings_update_beta">Beta</string>
|
||||
<string name="settings_update_custom">Pasirinktiniai</string>
|
||||
<string name="settings_update_custom_msg">Įvesti pasirinktinį URL</string>
|
||||
<string name="settings_boot_format_title">Boot failo formatas</string>
|
||||
<string name="settings_boot_format_summary">Pasirinkite boot failo formatą.\nPasirinkite .img įdiegimui per fastboot/download; Pasirinkite .img.tar įdiegimui per ODIN.</string>
|
||||
<string name="settings_core_only_title">Magisk Pagrindinis režimas</string>
|
||||
<string name="settings_core_only_summary">Įgalintos bus tik pagrindines funkcijos, visi papildiniai bus išjungti. MagiskSU, Magisk Hide ir Sistemos pedejėjai liks įgalinti</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 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">Sistemų padejėjų įgalinimas Adblock programėlėms</string>
|
||||
<string name="settings_hosts_summary">Įgalinti sistemos padejėjus Adblock programėlėms</string>
|
||||
|
||||
<string name="settings_su_app_adb">Programėlėms ir ADB</string>
|
||||
<string name="settings_su_app">Tik programėlėms</string>
|
||||
@@ -158,7 +160,7 @@
|
||||
<string name="settings_su_request_60">60 sekundžių</string>
|
||||
<string name="superuser_access">Supervartotojo prieiga</string>
|
||||
<string name="auto_response">Automatinis atsakymas</string>
|
||||
<string name="request_timeout">Prašymo laikas baigėsi</string>
|
||||
<string name="request_timeout">Prašymo laikas baigiasi po</string>
|
||||
<string name="superuser_notification">Supervartotojo pranešimai</string>
|
||||
<string name="request_timeout_summary">%1$s sekundžių</string>
|
||||
<string name="settings_su_reauth_title">Pakartotinai patvirtinti po atnaujinimo</string>
|
||||
@@ -182,33 +184,34 @@
|
||||
<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-->
|
||||
<string name="su_request_title">Supervartotojo prašymas</string>
|
||||
<string name="deny_with_str">Atmesti%1$s</string>
|
||||
<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">Supervartotojo teisių buvo %1$s suteikta</string>
|
||||
<string name="su_snack_deny">Supervartotojo teisių buvo %1$s atmesta</string>
|
||||
<string name="su_snack_notif_on">Buvo įjungta %1$s pranešimų</string>
|
||||
<string name="su_snack_notif_off">Buvo išjungta %1$s pranešimų</string>
|
||||
<string name="su_snack_log_on">%1$s surašymų buvo įjungta</string>
|
||||
<string name="su_snack_log_off">%1$s surašymų buvo išjungta</string>
|
||||
<string name="su_snack_revoke">%1$s teisių atšaukta</string>
|
||||
<string name="su_revoke_title">Atšaukti?</string>
|
||||
<string name="su_revoke_msg">Atšaukti %1$s teisių?</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 į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>
|
||||
<string name="none">Nėra</string>
|
||||
<string name="auth_fail">Patvirtinimas žlugo</string>
|
||||
|
@@ -50,6 +50,10 @@
|
||||
<string name="update_available">Update beschikbaar</string>
|
||||
<string name="installed">Geïnstalleerd</string>
|
||||
<string name="not_installed">Niet geïnstalleerd</string>
|
||||
<string name="updated_on">Bijgewerkt op: %1$s</string>
|
||||
<string name="sorting_order">Sorteervolgorde</string>
|
||||
<string name="sort_by_name">Sorteren op naam</string>
|
||||
<string name="sort_by_update">Sorteren op laatste update</string>
|
||||
|
||||
<!--Log Fragment-->
|
||||
<string name="menuSaveLog">Opslaan log</string>
|
||||
@@ -85,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>
|
||||
@@ -122,15 +125,17 @@
|
||||
<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>
|
||||
<string name="settings_hide_manager_summary">Magisk Manager opnieuw inpakken met een willekeurige pakketnaam</string>
|
||||
<string name="settings_restore_manager_title">Magisk Manager herstellen</string>
|
||||
<string name="settings_restore_manager_summary">Magisk Manager met oorspronkelijk pakket herstellen</string>
|
||||
<string name="language">Taal</string>
|
||||
<string name="system_default">(Systeem standaard)</string>
|
||||
<string name="settings_update">Instellingen bijwerken</string>
|
||||
<string name="settings_check_update_title">Updates controleren</string>
|
||||
<string name="settings_check_update_summary">Periodiek op updates controleren in de achtergrond</string>
|
||||
<string name="settings_update_channel_title">Update-kanaal</string>
|
||||
<string name="settings_update_stable">Stabiel</string>
|
||||
<string name="settings_update_beta">Beta</string>
|
||||
@@ -159,6 +164,8 @@
|
||||
<string name="request_timeout_summary">%1$s seconden</string>
|
||||
<string name="settings_su_reauth_title">Opnieuw verzoeken na bijwerken</string>
|
||||
<string name="settings_su_reauth_summary">Superuser rechten opnieuw opvragen na bijwerken applicatie</string>
|
||||
<string name="settings_su_fingerprint_title">Vingerafdruk authenticatie inschakelen</string>
|
||||
<string name="settings_su_fingerprint_summary">Vingerafdruk gebruiken om superuser verzoeken toe te staan</string>
|
||||
|
||||
<string name="multiuser_mode">Multi-gebruiker modus</string>
|
||||
<string name="settings_owner_only">Alleen apparaateigenaar</string>
|
||||
@@ -177,6 +184,7 @@
|
||||
<string name="requester_summary">Rootsessies verkrijgen de verzoeker\'s naamruimte</string>
|
||||
<string name="isolate_summary">Iedere rootsessie heeft een eigen geïsoleerde naamruimte</string>
|
||||
<string name="android_o_not_support">Ondersteunt geen Android 8.0+</string>
|
||||
<string name="disable_fingerprint">Geen vingerafdrukken ingesteld, of geen apparaatondersteuning</string>
|
||||
|
||||
<!--Superuser-->
|
||||
<string name="su_request_title">Superuser verzoek</string>
|
||||
@@ -205,6 +213,7 @@
|
||||
<string name="su_revoke_msg">De rechten van %1$s intrekken?</string>
|
||||
<string name="toast">Toast</string>
|
||||
<string name="none">Geen</string>
|
||||
<string name="auth_fail">Authenticatie mislukt</string>
|
||||
|
||||
<!--Superuser logs-->
|
||||
<string name="pid">PID:\u0020</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>
|
||||
@@ -140,7 +137,9 @@
|
||||
<string name="language">Język</string>
|
||||
<string name="system_default">(Domyślny Systemu)</string>
|
||||
<string name="settings_update">Aktualizacja Ustawień</string>
|
||||
<string name="settings_update_channel_title">Kanał Aktualizacji</string>
|
||||
<string name="settings_check_update_title">Sprawdź Aktualizację</string>
|
||||
<string name="settings_check_update_summary">Regularnie sprawdzaj aktualizacje w tle</string>
|
||||
<string name="settings_update_channel_title">Kanał Aktualizacji</string>
|
||||
<string name="settings_update_stable">Stabilny</string>
|
||||
<string name="settings_update_beta">Beta</string>
|
||||
<string name="settings_update_custom">Własny</string>
|
||||
@@ -188,7 +187,8 @@
|
||||
<string name="requester_summary">Sesje Root będzie dziedziczyć prośby i nazwy</string>
|
||||
<string name="isolate_summary">W każdej sesji root będzie miał własną odosobnioną nazwę</string>
|
||||
<string name="android_o_not_support">Brak wsparcia dla Androida 8.0+</string>
|
||||
|
||||
<string name="disable_fingerprint">Nie ustawiono żadnych odcisków palców lub brak obsługi urządzenia</string>
|
||||
|
||||
<!--Superuser-->
|
||||
<string name="su_request_title">Prośba o dostęp Superusera</string>
|
||||
<string name="deny_with_str">Odmów%1$s</string>
|
||||
|
@@ -1,39 +1,36 @@
|
||||
<resources>
|
||||
|
||||
|
||||
|
||||
|
||||
<!--Welcome Activity-->
|
||||
<!--Universal-->
|
||||
|
||||
<!--Welcome Activity-->
|
||||
<string name="modules">Módulos</string>
|
||||
<string name="downloads">Baixar</string>
|
||||
<string name="superuser">Superusuário</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
<string name="superuser">Superusuário</string>
|
||||
<string name="log">Registro</string>
|
||||
<string name="settings">Configurações</string>
|
||||
<string name="settings">Definições</string>
|
||||
<string name="install">Instalar</string>
|
||||
|
||||
<!--Status Fragment-->
|
||||
<string name="magisk_version_error">Magisk não instalado</string>
|
||||
|
||||
<string name="checking_for_updates">Checando por atualizações…</string>
|
||||
<string name="magisk_update_available">Magisk v%1$s disponível!</string>
|
||||
<string name="safetyNet_check_text">Pressione para checar o SafetyNet</string>
|
||||
<string name="checking_safetyNet_status">Verificando status do SafetyNet…</string>
|
||||
<string name="safetyNet_check_success">SafetyNet verificado</string>
|
||||
<string name="safetyNet_api_error">SafetyNet erro na API</string>
|
||||
<string name="safetyNet_network_loss">Conexão com a rede perdida</string>
|
||||
<string name="safetyNet_service_disconnected">O serviço foi morto</string>
|
||||
<string name="magisk_version_error">Magisk não está instalado</string>
|
||||
<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">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">Serviço foi morto</string>
|
||||
<string name="safetyNet_res_invalid">A resposta é inválida</string>
|
||||
|
||||
<!--Install Fragment-->
|
||||
<string name="advanced_settings_title">Configurações avançadas</string>
|
||||
<string name="keep_force_encryption">Keep force encryption</string>
|
||||
<string name="keep_dm_verity">Keep AVB 2.0/dm-verity</string>
|
||||
<string name="current_magisk_title">Versão instalada: %1$s</string>
|
||||
<string name="install_magisk_title">Última versão: %1$s</string>
|
||||
<string name="uninstall">Desinstalar</string>
|
||||
<string name="advanced_settings_title">Definições Avançadas</string>
|
||||
<string name="keep_force_encryption">Preservar criptografia forçada</string>
|
||||
<string name="keep_dm_verity">Preservar AVB 2.0/dm-verity</string>
|
||||
<string name="current_magisk_title">Versão Instalada: %1$s</string>
|
||||
<string name="install_magisk_title">Última Versão: %1$s</string>
|
||||
<string name="uninstall">Desinstalar</string>
|
||||
<string name="uninstall_magisk_title">Desinstalar Magisk</string>
|
||||
<string name="uninstall_magisk_msg">Todos os modulos magisk será desativado/removido. O root será removido, e possivelmente a encriptação de seus dados se seus dados não foram encriptado.</string>
|
||||
<string name="uninstall_magisk_msg">Todos os módulos serão desativados/removidos. O root será removido, e potencialmente criptografará seus dados se seus dados não estiverem atualmente criptografados</string>
|
||||
<string name="update">Atualizar %1$s</string>
|
||||
|
||||
<!--Module Fragment-->
|
||||
@@ -45,181 +42,182 @@
|
||||
<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 no Recovery</string>
|
||||
<string name="reboot_recovery">Reiniciar na Recuperação</string>
|
||||
<string name="reboot_bootloader">Reiniciar no Bootloader</string>
|
||||
<string name="reboot_download">Reiniciar no Download</string>
|
||||
|
||||
<!--Repo Fragment-->
|
||||
<string name="update_available">Atualização disponível</string>
|
||||
<string name="update_available">Atualização Disponível</string>
|
||||
<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 classificação</string>
|
||||
<string name="sort_by_name">Classificar por nome</string>
|
||||
<string name="sort_by_update">Classificar por última atualização</string>
|
||||
|
||||
<string name="updated_on">Atualizado em: %1$s</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>
|
||||
|
||||
<!--Log Fragment-->
|
||||
<string name="menuSaveLog">Salvar registro</string>
|
||||
<string name="menuReload">Recarregar</string>
|
||||
<string name="menuClearLog">Limpar registro agora</string>
|
||||
<string name="logs_cleared">Registro limpado com sucesso</string>
|
||||
<string name="logs_cleared">Registro limpo com sucesso</string>
|
||||
<string name="log_is_empty">Registro está vazio</string>
|
||||
<string name="logs_save_failed">Não foi possível gravar o registro para o cartão SD:</string>
|
||||
<string name="logs_save_failed">Incapaz de gravar registro no cartão SD:</string>
|
||||
|
||||
<!--About Activity-->
|
||||
<string name="about">Sobre</string>
|
||||
<string name="app_changelog">Registro de Mudanças do App</string>
|
||||
<string name="translators">Killer7Mod</string>
|
||||
<string name="app_version">Versão do App</string>
|
||||
<string name="app_changelog">Registro de mudanças</string>
|
||||
<string name="translators" />
|
||||
<string name="app_version">Versão</string>
|
||||
<string name="app_source_code">Código fonte</string>
|
||||
<string name="donation">Doação</string>
|
||||
<string name="app_translators">Tradutores do App</string>
|
||||
<string name="support_thread">Suporte</string>
|
||||
<string name="app_translators">Tradutores</string>
|
||||
<string name="support_thread">Tópico de suporte</string>
|
||||
|
||||
<!--Toasts, Dialogs-->
|
||||
<string name="permissionNotGranted">Este recurso não funcionará sem permissão de escrita do armazenamento externo.</string>
|
||||
<string name="no_thanks">Não, Obrigado</string>
|
||||
<string name="yes">Sim</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="permissionNotGranted">Este recurso não funcionará sem permissão para gravar no armazenamento externo.</string>
|
||||
<string name="no_thanks">Não</string>
|
||||
<string name="yes">Sim</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="close">Fechar</string>
|
||||
<string name="repo_install_title">Instalar %1$s</string>
|
||||
<string name="repo_install_msg">Você deseja instalar%1$s ?</string>
|
||||
<string name="repo_install_msg">Instalar %1$s agora?</string>
|
||||
<string name="download">Baixar</string>
|
||||
<string name="download_file_error">Erro ao baixar o arquivo</string>
|
||||
<string name="download_file_error">Erro ao baixar arquivo</string>
|
||||
<string name="reboot">Reiniciar</string>
|
||||
<string name="downloading_toast">Baixando %1$s</string>
|
||||
<string name="magisk_update_title">Nova atualização do Magisk disponível!</string>
|
||||
<string name="settings_reboot_toast">Reinicie para aplicar configurações</string>
|
||||
<string name="release_notes">Notas da atualização</string>
|
||||
<string name="repo_cache_cleared">Cache do Repo. limpado</string>
|
||||
<string name="safetyNet_hide_notice">Este aplicativo usa SafetyNet\nJá manipulado pelo MagiskHide por padrão</string>
|
||||
<string name="process_error">Erro no processo</string>
|
||||
<string name="internal_storage">O zip foi salvo em:\n[Armazenamento interno]%1$s</string>
|
||||
<string name="zip_download_title">Baixando</string>
|
||||
<string name="zip_download_msg">Baixando o arquivo zip (%1$d%%) …</string>
|
||||
<string name="magisk_update_title">Nova Atualização do Magisk Disponível!</string>
|
||||
<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="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>
|
||||
<string name="zip_download_msg">Baixando arquivo zip (%1$d%%) …</string>
|
||||
<string name="zip_process_title">Processando</string>
|
||||
<string name="zip_process_msg">Processando arquivo zip …</string>
|
||||
<string name="manager_update_title">Nova atualização do Magisk Manager disponível!</string>
|
||||
<string name="manager_download_install">Pressione para baixar e instalar</string>
|
||||
<string name="dtbo_patched_title">Patch no DTBO instalado!</string>
|
||||
<string name="dtbo_patched_reboot">Magisk Manager instalou um patch no dtbo.img, por favor reinicie</string>
|
||||
<string name="zip_process_msg">Processando arquivo zip …</string>
|
||||
<string name="manager_update_title">Nova Atualização do Magisk Manager Disponível!</string>
|
||||
<string name="manager_download_install">Toque para baixar e instalar</string>
|
||||
<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">Isso pode demorar um pouco…</string>
|
||||
<string name="hide_manager_fail_toast">Falha ao ocultar o Magisk Manager…</string>
|
||||
<string name="download_zip_only">Baixar somente o zip</string>
|
||||
<string name="patch_boot_file">Patchear um arquivo Boot Image</string>
|
||||
<string name="hide_manager_toast2">Isto pode demorar um pouco…</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">Instalação no segundo Slot (Depois do OTA)</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">Versão do Magisk escolhida não suporta arquivo de patch boot image</string>
|
||||
<string name="boot_file_patch_msg">Selecione a stock boot image despejada(dump) no formato .img ou img.tar</string>
|
||||
<string name="complete_uninstall">Desinstalação Completa</string>
|
||||
<string name="restore_img">Restaurar Images</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">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 Completa!</string>
|
||||
<string name="restore_fail">backup da Stock não existe!</string>
|
||||
<string name="uninstall_toast">Desinstalando o Magisk Manager em 5 segundos, por favor reinicie manualmente depois</string>
|
||||
<string name="proprietary_title">Baixar Código do Proprietário</string>
|
||||
<string name="proprietary_notice">Magisk Manager é FOSS então não contém o código proprietário da API SafetyNet do Google.\n\nVocê permite que o Magisk Manager baixe uma extensão (contém o GoogleApiClient) para verificações SafetyNet?</string>
|
||||
<string name="su_db_corrupt">O Banco de dados do SU está corrompido, criará novo db</string>
|
||||
|
||||
<!--Settings Fragment -->
|
||||
<string name="restore_done">Restauração concluída!</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, 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">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">Limpar Repo Cache</string>
|
||||
<string name="settings_clear_cache_summary">Limpe as informações armazenadas em cache para repos. online, forçando o aplicativo a atualizar online</string>
|
||||
<string name="settings_hide_manager_title">Ocultar Magisk Manager</string>
|
||||
<string name="settings_hide_manager_summary">Criar um Magisk Manager com o nome do pacote aleatório</string>
|
||||
<string name="language">Linguagem</string>
|
||||
<string name="settings_dark_theme_title">Tema Escuro</string>
|
||||
<string name="settings_dark_theme_summary">Ativar tema escuro</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>
|
||||
<string name="settings_hide_manager_summary">Reempacotar Magisk Manager com nome de pacote aleatório</string>
|
||||
<string name="settings_restore_manager_title">Restaurar Magisk Manager</string>
|
||||
<string name="settings_restore_manager_summary">Restaurar Magisk Manager com pacote original</string>
|
||||
<string name="language">Idioma</string>
|
||||
<string name="system_default">(Padrão do Sistema)</string>
|
||||
<string name="settings_update">Atualizar Configurações</string>
|
||||
<string name="settings_update_channel_title">Canal de atualizações</string>
|
||||
<string name="settings_update">Definições de Atualizações</string>
|
||||
<string name="settings_check_update_title">Verificar Atualizações</string>
|
||||
<string name="settings_check_update_summary">Verificar atualizações em segundo plano periodicamente</string>
|
||||
<string name="settings_update_channel_title">Canal de Atualização</string>
|
||||
<string name="settings_update_stable">Estável</string>
|
||||
<string name="settings_update_beta">Beta</string>
|
||||
<string name="settings_update_custom">personalizado</string>
|
||||
<string name="settings_update_custom_msg">Insira um URL personalizado</string>
|
||||
<string name="settings_boot_format_title">Formato de Saida do Boot com patch instalado</string>
|
||||
<string name="settings_boot_format_summary">Selecione o formato de saida do Boot Image com patch instalado.\nSelecione .img para flashear através do fastboot/modo de download; Selecione .img.tar para flashear com o ODIN.</string>
|
||||
<string name="settings_core_only_title">Magisk modo somente Core</string>
|
||||
<string name="settings_core_only_summary">Ativar somente recursos principais, todos os módulos não serão carregados. MagiskSU, MagiskHide, e systemless hosts ainda estará ativado</string>
|
||||
<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 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 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">Ativar systemless hosts</string>
|
||||
<string name="settings_hosts_summary">Suporte do systemless para Adblock apps</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">Aplicativos e ADB</string>
|
||||
<string name="settings_su_app">Somente Aplicativos</string>
|
||||
<string name="settings_su_adb">Somente ADB</string>
|
||||
<string name="settings_su_app_adb">Apps e ADB</string>
|
||||
<string name="settings_su_app">Apps apenas</string>
|
||||
<string name="settings_su_adb">ADB apenas</string>
|
||||
<string name="settings_su_disable">Desativado</string>
|
||||
<string name="settings_su_request_10">10 segundos</string>
|
||||
<string name="settings_su_request_20">20 segundos</string>
|
||||
<string name="settings_su_request_30">30 segundos</string>
|
||||
<string name="settings_su_request_60">60 segundos</string>
|
||||
<string name="superuser_access">Acesso de superusuário</string>
|
||||
<string name="superuser_access">Acesso de Superusuário</string>
|
||||
<string name="auto_response">Resposta Automática</string>
|
||||
<string name="request_timeout">Tempo limite de solicitação</string>
|
||||
<string name="superuser_notification">Notificação do superusuário</string>
|
||||
<string name="request_timeout">Tempo Limite de Solicitação</string>
|
||||
<string name="superuser_notification">Notificação de Superusuário</string>
|
||||
<string name="request_timeout_summary">%1$s segundos</string>
|
||||
<string name="settings_su_reauth_title">Re-autenticar após a atualização</string>
|
||||
<string name="settings_su_reauth_summary">Re-autenticar permissões de superusuário após as atualizações de um aplicativo</string>
|
||||
<string name="settings_su_fingerprint_title">Ativar autenticação de impressão digital</string>
|
||||
<string name="settings_su_fingerprint_summary">Use o scanner de impressão digital para permitir solicitações de superusuário</string>
|
||||
|
||||
<string name="multiuser_mode">Modo Multiusuário</string>
|
||||
<string name="settings_owner_only">Apenas Proprietário do Dispositivo</string>
|
||||
<string name="settings_owner_manage">Proprietário do dispositivo gerenciado</string>
|
||||
<string name="settings_user_independent">Usuário Independente</string>
|
||||
<string name="owner_only_summary">Somente o proprietário possui acesso de root</string>
|
||||
<string name="owner_manage_summary">Somente o proprietário pode gerenciar o acesso root e receber paineis de solicitações</string>
|
||||
<string name="user_indepenent_summary">Cada usuário tem suas próprias regras raiz separadas</string>
|
||||
<string name="multiuser_hint_owner_request">Um pedido foi enviado ao proprietário do dispositivo. Mude para o proprietário e conceda a permissão</string>
|
||||
<string name="settings_su_reauth_title">Reautenticar após atualizar</string>
|
||||
<string name="settings_su_reauth_summary">Reautenticar permissões de superusuário após um app atualizar</string>
|
||||
<string name="settings_su_fingerprint_title">Ativar Autenticação de Impressão Digital</string>
|
||||
<string name="settings_su_fingerprint_summary">Usar escaneador de impressão digital para permitir solicitações de superusuário</string>
|
||||
|
||||
<string name="multiuser_mode">Modo de Multiusuário</string>
|
||||
<string name="settings_owner_only">Proprietário do Dispositivo Apenas</string>
|
||||
<string name="settings_owner_manage">Proprietário do Dispositivo Gerenciado</string>
|
||||
<string name="settings_user_independent">Usuário Independente</string>
|
||||
<string name="owner_only_summary">Apenas proprietário tem acesso root</string>
|
||||
<string name="owner_manage_summary">Apenas proprietário pode gerenciar acesso root e receber expedições de solicitações</string>
|
||||
<string name="user_indepenent_summary">Cada usuário tem suas próprias regras root separadas</string>
|
||||
<string name="multiuser_hint_owner_request">Uma solicitação foi enviada ao proprietário do dispositivo. Mude para proprietário e conceda as permissões requeridas</string>
|
||||
|
||||
<string name="mount_namespace_mode">Montar Modo de Espaço de Nome</string>
|
||||
<string name="settings_ns_global">Espaço de Nome Global</string>
|
||||
<string name="settings_ns_requester">Espaço de Nome Herdado</string>
|
||||
<string name="settings_ns_isolate">Espaço de Nome Isolado</string>
|
||||
<string name="global_summary">Todas as sessões root usam montagem de espaço de nome global</string>
|
||||
<string name="requester_summary">As sessões root herdarão espaço de nome de seu solicitante</string>
|
||||
<string name="isolate_summary">Cada sessão root terá seu próprio espaço de nome isolado</string>
|
||||
<string name="android_o_not_support">Não suporta Android 8.0+</string>
|
||||
<string name="disable_fingerprint">Nenhuma impressão digital foi definida ou dispostivo sem suporte</string>
|
||||
|
||||
<string name="mount_namespace_mode">Modo namespace de montagem</string>
|
||||
<string name="settings_ns_global">Global namespace</string>
|
||||
<string name="settings_ns_requester">Herdar namespace</string>
|
||||
<string name="settings_ns_isolate">Isolar namespace</string>
|
||||
<string name="global_summary">Todas as sessões raiz usam o namespace de montagem global</string>
|
||||
<string name="requester_summary">As sessões de raiz herdarão o namespace do seu solicitante</string>
|
||||
<string name="isolate_summary">Cada sessão raiz terá seu próprio namespace isolado</string>
|
||||
<string name="android_o_not_support">Não suporta Android 8.0+</string>
|
||||
|
||||
<!--Superuser-->
|
||||
<string name="su_request_title">Solicitação de superusuário</string>
|
||||
<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">Perguntar</string>
|
||||
<string name="grant">Permitir</string>
|
||||
<string name="su_warning">Concede acesso total ao seu dispositivo.\nNegue se você não tiver certeza!</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>
|
||||
<string name="once">Uma vez</string>
|
||||
<string name="tenmin">10 minutos</string>
|
||||
<string name="twentymin">20 minutos</string>
|
||||
<string name="thirtymin">30 minutos</string>
|
||||
<string name="sixtymin">60 minutos</string>
|
||||
<string name="su_allow_toast">%1$s foi permitido o acesso de superusuário</string>
|
||||
<string name="su_deny_toast">%1$s foi negado o acesso de superusuário</string>
|
||||
<string name="no_apps_found">Não foram encontrados apps</string>
|
||||
<string name="su_snack_grant">Acesso de superusuário do %1$s está permitido</string>
|
||||
<string name="su_snack_deny">Acesso de superusuário do %1$s está negado</string>
|
||||
<string name="su_snack_notif_on">Notificações do %1$s está ativado</string>
|
||||
<string name="su_snack_notif_off">Notificações do %1$s está desativado</string>
|
||||
<string name="su_snack_log_on">Registro do %1$s está ativado</string>
|
||||
<string name="su_snack_log_off">Registro do %1$s está desativado</string>
|
||||
<string name="su_snack_revoke">%1$s Direitos foi revogados</string>
|
||||
<string name="once">Uma Vez</string>
|
||||
<string name="tenmin">10 mins</string>
|
||||
<string name="twentymin">20 mins</string>
|
||||
<string name="thirtymin">30 mins</string>
|
||||
<string name="sixtymin">60 mins</string>
|
||||
<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">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 diretos do %1$s, Confirmar?</string>
|
||||
<string name="toast">Notificação(Toast)</string>
|
||||
<string name="none">Nenhum</string>
|
||||
<string name="auth_fail">Falha na autenticação</string>
|
||||
|
||||
<string name="su_revoke_msg">Revogar os direitos de %1$s?</string>
|
||||
<string name="toast">Torrada</string>
|
||||
<string name="none">Nenhuma</string>
|
||||
<string name="auth_fail">Falha de Autenticação</string>
|
||||
|
||||
<!--Superuser logs-->
|
||||
<string name="pid">PID:\u0020</string>
|
||||
<string name="target_uid">Alvo UID:\u0020</string>
|
||||
<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>
|
||||
@@ -129,6 +126,8 @@
|
||||
<string name="language">Limbă</string>
|
||||
<string name="system_default">(Implicit)</string>
|
||||
<string name="settings_update">Setări actualizare</string>
|
||||
<string name="settings_check_update_title">Verificare actualizări</string>
|
||||
<string name="settings_check_update_summary">Se verifică periodic în fundal dacă există actualizări</string>
|
||||
<string name="settings_update_channel_title">Canal de actualizare</string>
|
||||
<string name="settings_update_stable">Stabil</string>
|
||||
<string name="settings_update_beta">Beta</string>
|
||||
@@ -177,6 +176,7 @@
|
||||
<string name="requester_summary">Sesiunile de root vor moșteni spațiul de nume al solicitantului</string>
|
||||
<string name="isolate_summary">Fiecare sesiune de root va avea propriul spațiu de nume izolat</string>
|
||||
<string name="android_o_not_support">Nu se acceptă pe Android 8.0+</string>
|
||||
<string name="disable_fingerprint">Nu au fost setate amprente sau scanerul de apmrentă lipseşte</string>
|
||||
|
||||
<!--Superuser-->
|
||||
<string name="su_request_title">Solicitare Superuser</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>
|
||||
|
@@ -51,7 +51,7 @@
|
||||
<string name="not_installed">Не встановлено</string>
|
||||
<string name="updated_on">Оновлено: %1$s</string>
|
||||
<string name="sorting_order">Порядок сортування</string>
|
||||
<string name="sort_by_name">Сортувати за ім'ям</string>
|
||||
<string name="sort_by_name">Сортувати за назвою</string>
|
||||
<string name="sort_by_update">Сортувати за оновленням</string>
|
||||
|
||||
<!--Log Fragment-->
|
||||
@@ -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,15 +124,17 @@
|
||||
<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>
|
||||
<string name="settings_hide_manager_summary">Перезібрати Magisk Manager з випадковим іменем пакету</string>
|
||||
<string name="settings_restore_manager_title">Відновити Magisk Manager</string>
|
||||
<string name="settings_restore_manager_summary">Відновити Magisk Manager з оригінального пакету</string>
|
||||
<string name="language">Мова</string>
|
||||
<string name="system_default">Стандартна (системна)</string>
|
||||
<string name="settings_update">Оновити налаштування</string>
|
||||
<string name="settings_check_update_title">Перевіряти оновлення</string>
|
||||
<string name="settings_check_update_summary">Періодично перевіряти оновлення у фоновому режимі</string>
|
||||
<string name="settings_update_channel_title">Канал оновлення</string>
|
||||
<string name="settings_update_stable">Стабільний реліз</string>
|
||||
<string name="settings_update_beta">Бета реліз</string>
|
||||
@@ -182,6 +183,7 @@
|
||||
<string name="requester_summary">Сеанси Суперкористувача наслідують простір імен запитувача</string>
|
||||
<string name="isolate_summary">Кожнен сеанс Суперкористувача має власний ізольований простір імен</string>
|
||||
<string name="android_o_not_support">Не підтримує Android 8.0+</string>
|
||||
<string name="disable_fingerprint">Немає відбитків пальців або пристрій не підтримується</string>
|
||||
|
||||
<!--Superuser-->
|
||||
<string name="su_request_title">Запит прав Суперкористувача</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