1
mirror of https://github.com/topjohnwu/Magisk synced 2024-11-13 20:54:12 +01:00

New uninstallation method

This commit is contained in:
topjohnwu 2018-06-27 05:58:56 +08:00
parent c8f65fc9a1
commit e86015badc
34 changed files with 97 additions and 101 deletions

2
.gitignore vendored
View File

@ -6,7 +6,7 @@
app/release
*.hprof
.externalNativeBuild/
src/full/assets
src/full/res/raw/util_functions.sh
public.certificate.x509.pem
private.key.pk8
*.apk

View File

@ -27,7 +27,7 @@ android {
productFlavors {
full {
versionCode 121
versionCode 122
versionName "5.7.0"
}
stub {

View File

@ -3,6 +3,7 @@ package com.topjohnwu.magisk;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.ActionBar;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
@ -17,6 +18,7 @@ import com.topjohnwu.magisk.asyncs.FlashZip;
import com.topjohnwu.magisk.asyncs.InstallMagisk;
import com.topjohnwu.magisk.components.Activity;
import com.topjohnwu.magisk.utils.Const;
import com.topjohnwu.magisk.utils.RootUtils;
import com.topjohnwu.superuser.CallbackList;
import com.topjohnwu.superuser.Shell;
@ -113,6 +115,9 @@ public class FlashActivity extends Activity {
case Const.Value.FLASH_ZIP:
new FlashZip(this, uri, console, logs).exec();
break;
case Const.Value.UNINSTALL:
new UninstallMagisk(this, uri, console, logs).exec();
break;
case Const.Value.FLASH_MAGISK:
new InstallMagisk(this, console, logs, uri, InstallMagisk.DIRECT_MODE).exec();
break;
@ -130,4 +135,21 @@ public class FlashActivity extends Activity {
public void onBackPressed() {
// Prevent user accidentally press back button
}
private static class UninstallMagisk extends FlashZip {
private UninstallMagisk(Activity context, Uri uri, List<String> console, List<String> logs) {
super(context, uri, console, logs);
}
@Override
protected void onPostExecute(Integer result) {
if (result == 1) {
new Handler().postDelayed(() ->
RootUtils.uninstallPkg(getActivity().getPackageName()), 3000);
} else {
super.onPostExecute(result);
}
}
}
}

View File

@ -54,11 +54,14 @@ public class MagiskManager extends Application implements Shell.Container {
public int magiskVersionCode = -1;
public String remoteMagiskVersionString;
public int remoteMagiskVersionCode = -1;
public String magiskLink;
public String releaseNoteLink;
public String remoteManagerVersionString;
public int remoteManagerVersionCode = -1;
public String magiskLink;
public String releaseNoteLink;
public String managerLink;
public String uninstallerLink;
public boolean keepVerity = false;
public boolean keepEnc = false;

View File

@ -47,6 +47,8 @@ public class CheckUpdates extends ParallelTask<Void, Void, Void> {
mm.remoteManagerVersionString = manager.getString("version");
mm.remoteManagerVersionCode = manager.getInt("versionCode");
mm.managerLink = manager.getString("link");
JSONObject uninstaller = json.getJSONObject("uninstaller");
mm.uninstallerLink = uninstaller.getString("link");
} catch (JSONException ignored) {}
return null;
}

View File

@ -40,8 +40,7 @@ public class FlashZip extends ParallelTask<Void, Void, Integer> {
private boolean unzipAndCheck() throws Exception {
ZipUtils.unzip(mCachedFile, mCachedFile.getParentFile(), "META-INF/com/google/android", true);
String s = ShellUtils.fastCmd("head -n 1 " + new File(mCachedFile.getParentFile(), "updater-script"));
return s != null && s.contains("#MAGISK");
return ShellUtils.fastCmdResult("grep -q '#MAGISK' " + new File(mCachedFile.getParentFile(), "updater-script"));
}
@Override

View File

@ -26,7 +26,6 @@ import org.kamranzafar.jtar.TarOutputStream;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
@ -73,8 +72,8 @@ public class InstallMagisk extends ParallelTask<Void, Void, Boolean> {
@Override
protected void onPreExecute() {
if (mode == FIX_ENV_MODE) {
dialog = ProgressDialog.show(getActivity(),
"Additional Setup", "Running environment setup...");
Activity a = getActivity();
dialog = ProgressDialog.show(a, a.getString(R.string.setup_title), a.getString(R.string.setup_msg));
console = new NOPList<>();
}
}

View File

@ -1,5 +1,7 @@
package com.topjohnwu.magisk.asyncs;
import android.app.Activity;
import android.app.ProgressDialog;
import android.widget.Toast;
import com.topjohnwu.magisk.MagiskManager;
@ -8,22 +10,26 @@ import com.topjohnwu.superuser.ShellUtils;
public class RestoreImages extends ParallelTask<Void, Void, Boolean> {
private ProgressDialog dialog;
public RestoreImages(Activity activity) {
super(activity);
}
@Override
protected void onPreExecute() {
Activity a = getActivity();
dialog = ProgressDialog.show(a, a.getString(R.string.restore_img_title), a.getString(R.string.restore_img_msg));
}
@Override
protected Boolean doInBackground(Void... voids) {
String sha1;
sha1 = ShellUtils.fastCmd("cat /.backup/.sha1");
if (sha1 == null) {
sha1 = ShellUtils.fastCmd("cat /init.magisk.rc | grep STOCKSHA1");
if (sha1 == null)
return false;
sha1 = sha1.substring(sha1.indexOf('=') + 1);
}
return ShellUtils.fastCmdResult("restore_imgs " + sha1);
return ShellUtils.fastCmdResult("restore_imgs");
}
@Override
protected void onPostExecute(Boolean result) {
dialog.cancel();
if (result) {
MagiskManager.toast(R.string.restore_done, Toast.LENGTH_SHORT);
} else {

View File

@ -15,7 +15,7 @@ public class ShellInitializer extends Shell.Initializer {
@Override
public boolean onRootShellInit(Context context, @NonNull Shell shell) throws Exception {
BusyBox.BB_PATH = new File(Const.BUSYBOX_PATH);
try (InputStream magiskUtils = context.getAssets().open(Const.UTIL_FUNCTIONS);
try (InputStream magiskUtils = context.getResources().openRawResource(R.raw.util_functions);
InputStream managerUtils = context.getResources().openRawResource(R.raw.utils)
) {
shell.loadInputStream(null, null, magiskUtils);

View File

@ -7,10 +7,10 @@ import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Handler;
import android.support.v4.app.NotificationCompat;
import android.support.v4.app.TaskStackBuilder;
import android.support.v7.app.AlertDialog;
import android.text.TextUtils;
import android.widget.Toast;
import com.topjohnwu.magisk.FlashActivity;
@ -27,9 +27,6 @@ import com.topjohnwu.magisk.receivers.RebootReceiver;
import com.topjohnwu.superuser.Shell;
import com.topjohnwu.superuser.ShellUtils;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
@ -249,40 +246,23 @@ public class ShowUI {
public static void uninstallDialog(Activity activity) {
MagiskManager mm = Utils.getMagiskManager(activity);
new AlertDialogBuilder(activity)
AlertDialog.Builder b = new AlertDialogBuilder(activity)
.setTitle(R.string.uninstall_magisk_title)
.setMessage(R.string.uninstall_magisk_msg)
.setPositiveButton(R.string.complete_uninstall, (d, i) -> {
ByteArrayOutputStream uninstaller = new ByteArrayOutputStream();
try (InputStream in = mm.getAssets().open(Const.UNINSTALLER)) {
ShellUtils.pump(in, uninstaller);
} catch (IOException e) {
e.printStackTrace();
return;
}
ByteArrayOutputStream utils = new ByteArrayOutputStream();
try (InputStream in = mm.getAssets().open(Const.UTIL_FUNCTIONS)) {
ShellUtils.pump(in, utils);
} catch (IOException e) {
e.printStackTrace();
return;
}
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 >= Const.MAGISK_VER.HIDDEN_PATH ? "/data/adb/magisk" : "/data/magisk", Const.UTIL_FUNCTIONS)
);
try {
uninstaller.close();
utils.close();
} catch (IOException ignored) {}
MagiskManager.toast(R.string.uninstall_toast, Toast.LENGTH_LONG);
new Handler().postDelayed(() -> RootUtils.uninstallPkg(mm.getPackageName()), 5000);
})
.setNeutralButton(R.string.restore_img, (d, i) -> new RestoreImages().exec())
.setNegativeButton(R.string.uninstall_app, (d, i) -> RootUtils.uninstallPkg(mm.getPackageName()))
.show();
.setNeutralButton(R.string.restore_img, (d, i) -> new RestoreImages(activity).exec());
if (!TextUtils.isEmpty(mm.uninstallerLink)) {
b.setPositiveButton(R.string.complete_uninstall, (d, i) ->
Utils.dlAndReceive(activity, new DownloadReceiver() {
@Override
public void onDownloadDone(Context context, Uri uri) {
Intent intent = new Intent(context, FlashActivity.class)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
.setData(uri)
.putExtra(Const.Key.FLASH_ACTION, Const.Value.UNINSTALL);
context.startActivity(intent);
}
}, mm.uninstallerLink, "magisk-uninstaller.zip"));
}
b.show();
}
}

View File

@ -52,3 +52,25 @@ mm_patch_dtbo() {
patch_dtbo_image >/dev/null 2>&1 && echo true || echo false
fi
}
restore_imgs() {
SHA1=`cat /.backup/.sha1`
[ -z $SHA1 ] && SHA1=`grep_prop #STOCKSHA1`
[ -z $SHA1 ] && return 1
STOCKBOOT=/data/stock_boot_${SHA1}.img.gz
STOCKDTBO=/data/stock_dtbo.img.gz
[ -f $STOCKBOOT ] || return 1
find_boot_image
find_dtbo_image
magisk --unlock-blocks 2>/dev/null
if [ -b "$DTBOIMAGE" -a -f $STOCKDTBO ]; then
gzip -d < $STOCKDTBO > $DTBOIMAGE
fi
if [ -b "$BOOTIMAGE" -a -f $STOCKBOOT ]; then
gzip -d < $STOCKBOOT | cat - /dev/zero > $BOOTIMAGE 2>/dev/null
return 0
fi
return 1
}

View File

@ -107,10 +107,8 @@
<string name="boot_file_patch_msg">Изберете стоков Boot образ с формат .img или .img.tar</string>
<string name="complete_uninstall">Пълно деинсталиране</string>
<string name="restore_img">Възстановяване на образи</string>
<string name="uninstall_app">Деинсталиране на приложението</string>
<string name="restore_done">Възстановяването е успешно!</string>
<string name="restore_fail">Не е налице архив на стоковия образ!</string>
<string name="uninstall_toast">Деинсталиране на Magisk Manager до 5 секунди, моля по-късно да рестартирате</string>
<string name="proprietary_title">Изтегляне на патентования код</string>
<string name="proprietary_notice">Magisk Manager е FOSS и затова не включва частния код за SafetyNet ППИ на Google.\n\nПозволявате ли на Magisk Manager да изтегли добавката (включва GoogleApiClient) за SafetyNet проверки?</string>
<string name="su_db_corrupt">Базата данни за SU е повредена, ще създадем нов db файл</string>

View File

@ -110,10 +110,8 @@
<string name="boot_file_patch_msg">Selektiere das originale Boot image dump im Format .img oder .img.tar</string>
<string name="complete_uninstall">Komplette Deinstallation</string>
<string name="restore_img">Stelle Images wieder her</string>
<string name="uninstall_app">Deinstalliere die Anwendung</string>
<string name="restore_done">Wiederherstellung durchgeführt!</string>
<string name="restore_fail">Kein Original Backup vorhanden!</string>
<string name="uninstall_toast">Deinstalliere Magisk Manager in 5 Sekunden, bitte im Anschluss manuell neustarten</string>
<string name="proprietary_title">Lade proprietären Code herunter</string>
<string name="proprietary_notice">Magisk Manager ist FOSS und enthält keinen proprietären SafetyNet API Code von Google. Magisk Manager erlauben eine Erweiterung (enthält GoogleApiClient) für SafetyNet-Checks herunterzuladen?</string>
<string name="su_db_corrupt">Datenbank für SU ist fehlerhaft, es wird eine neue erstellt</string>

View File

@ -108,7 +108,6 @@
<string name="complete_uninstall">Πλήρης απεγκατάσταση</string>
<string name="restore_done">Η ανάκτηση έγινε!</string>
<string name="restore_fail">Δεν υπάρχει αντίγραφο ασφαλείας!</string>
<string name="uninstall_toast">Απεγκατάσταση του Magisk Manager σε 5 δευτερόλεπτα, παρακαλώ επανεκκινήστε χειροκίνητα αμέσως μετά</string>
<string name="proprietary_title">Λήψη Ιδιόκτητου Κώδικα</string>
<string name="proprietary_notice">Το Magisk Manager είναι FOSS οπότε δεν περιέχει της Google τον ιδιόκτητο κώδικα του SafetyNet API.\n\nΕπιτρέπετε στο Magisk Manager να κατεβάσει μια επέκταση (περιέχει το GoogleApiClient) για ελέγχους του SafetyNet?</string>
<string name="su_db_corrupt">Η βάση δεδομένων SU είναι κατεστραμμένη, θα αναδημιουργηθεί νέα</string>

View File

@ -107,10 +107,8 @@
<string name="boot_file_patch_msg">Seleccione el volcado de la imagen boot en formato .img o .img.tar</string>
<string name="complete_uninstall">Desinstalación completa</string>
<string name="restore_img">Restaurar imágenes</string>
<string name="uninstall_app">Desinstalar Aplicación</string>
<string name="restore_done">¡Restauración Terminada!</string>
<string name="restore_fail">¡El respaldo de la imagen boot Stock no existe!</string>
<string name="uninstall_toast">Desinstalación de Magisk Manager en 5 segundos, por favor después reinicie manualmente </string>
<string name="proprietary_title">Descargar Código Propietario</string>
<string name="proprietary_notice">Magisk Manager es un Software Libre por lo que no contiene el código API de SafetyNet (Código Propietario de Google).\n\n ¿Puede permitir que Magisk Manager descargue una extensión (contiene el GoogleApiClient) para la comprobación de SafetyNet?</string>
<string name="su_db_corrupt">La base de datos SU está dañada, se creará nueva base de datos</string>

View File

@ -108,10 +108,8 @@
<string name="boot_file_patch_msg">Vali originaalne käivituspildi väljastus .img või .img.tar vormingus</string>
<string name="complete_uninstall">Täielik eemaldus</string>
<string name="restore_img">Taasta pildid</string>
<string name="uninstall_app">Desinstalli rakendus</string>
<string name="restore_done">Taastus valmis!</string>
<string name="restore_fail">Originaalne varundus puudub!</string>
<string name="uninstall_toast">Eemaldan Magisk Manager\'i 5 sekundi pärast, palun tee peale seda käsitsi taaskäivitus</string>
<string name="proprietary_title">Laadi alla suletud koodi</string>
<string name="proprietary_notice">Magisk Manager on vaba ja avatud lähtekoodiga, mis ei sisalda Google\'i suletud SafetyNet\'i API koodi.\n
\n

View File

@ -106,10 +106,8 @@
<string name="boot_file_patch_msg">Sélectionnez l\'image par défaut de démarrage stockée au format .img ou .img.tar</string>
<string name="complete_uninstall">Désinstallation terminée</string>
<string name="restore_img">Restauration des images</string>
<string name="uninstall_app">Désinstallation de l\'application</string>
<string name="restore_done">Restauration terminée!</string>
<string name="restore_fail">Le sauvegarde par défaut n\'existe pas!</string>
<string name="uninstall_toast">Désinstallation du Gestionnaire Magisk dans 5 secondes, merci de redémarrer manuellement après celà</string>
<string name="proprietary_title">Télécharger Code Propriétaire</string>
<string name="proprietary_notice">Magisk Manager est Libre, il ne contient pas le code API SafetyNet propriétaire de Google. \ N \ nAutorisez vous le Gestionnaire Magisk à télécharger une extension (contenant GoogleApiClient) pour les contrôles SafetyNet? </string>
<string name = "su_db_corrupt"> La base de données SU est corrompue, une nouvelle base de donnée va être re-créé</string>

View File

@ -98,7 +98,6 @@
<string name="complete_uninstall">Potpuna deinstalacija</string>
<string name="restore_done">Obnova je dovršena!</string>
<string name="restore_fail">Stock backup does not exist!</string>
<string name="uninstall_toast">Deinstaliranje Magisk Manager aplikacije unutar 5 sekundi, molimo ponovno pokrenite uređaj nakon toga</string>
<string name="proprietary_title">Preuzmite vlasnički kod</string>
<string name="proprietary_notice">Magisk Manager je FOSS aplikacija te ne sadrži Googleov SafetyNet API kod.\n\nDopuštate li Magisk Manager aplikaciji da preuzme proširenje (sadrži GoogleApiClient) za SafetyNet provjere?</string>

View File

@ -106,11 +106,9 @@
<string name="no_boot_file_patch_support">Versi target Magisk tidak mendukung penambalan file boot image</string>
<string name="boot_file_patch_msg">Pilih stock boot image dump dalam format .img atau .img.tar</string>
<string name="restore_img">Pulihkan Image</string>
<string name="uninstall_app">Copot Apl</string>
<string name="complete_uninstall">Copot Total</string>
<string name="restore_done">Pemulihan selesai!</string>
<string name="restore_fail">Cadangan stock tidak ada!</string>
<string name="uninstall_toast">Mencopot Magisk Manager dalam 5 detik, silahkan reboot secara manual setelahnya</string>
<string name="proprietary_title">Unduh Kode Proprieter</string>
<string name="proprietary_notice">Magisk Manager adalah aplikasi FOSS, yang tidak menyertakan kode API proprieter Google SafetyNet.\n\nApakah Anda mengizinkan Magisk Manager untuk mengunduh sebuah ekstensi (berisi GoogleApiClient) untuk pemeriksaan SafetyNet?</string>
<string name="su_db_corrupt">Database SU rusak, akan membuat db baru</string>

View File

@ -107,11 +107,9 @@
<string name="boot_file_patch_msg">Seleziona l\'immagine originale di boot in formato .img o img.tar</string>
<string name="complete_uninstall">Disinstallazione completa</string>
<string name="restore_img">Ripristina Immagini</string>
<string name="uninstall_app">Disinstalla App</string>
<string name="restore_done">Ripristino completato!</string>
<string name="restore_done">Ripristino completato!</string>
<string name="restore_fail">Non esiste un\'immagine originale di boot!</string>
<string name="uninstall_toast">Disinstallazione di Magisk Manager in 5 secondi, riavvia manualmente per completare</string>
<string name="proprietary_title">Scarica codice proprietario</string>
<string name="proprietary_title">Scarica codice proprietario</string>
<string name="proprietary_notice">Magisk Manager è FOSS, quindi non contiene codice proprietario delle API Google SafetyNet.\n\nVuoi permettere il download di un\'estensione (che contiene GoogleApiClient) per controllare lo stato di SafetyNet?</string>
<string name="su_db_corrupt">Il database SU è corrotto, un nuovo DB verrà ricreato</string>
<string name="cannot_check_sn_title">Impossibile controllare SafetyNet</string>

View File

@ -107,10 +107,8 @@
<string name="boot_file_patch_msg">StockのBootイメージ (.img または .img.tar形式) を選択してください</string>
<string name="complete_uninstall">完全にアンインストール</string>
<string name="restore_img">イメージのリストア</string>
<string name="uninstall_app">アプリのアンインストール</string>
<string name="restore_done">リストア完了!</string>
<string name="restore_fail">Stockのバックアップがありません</string>
<string name="uninstall_toast">5秒以内にMagisk Managerをアンインストールします。手動で再起動してください</string>
<string name="proprietary_title">プロプライエタリコードのダウンロード</string>
<string name="proprietary_notice">Magisk ManagerはFOSSのため、GoogleのプロプライエタリなSafetyNet APIコードを含んでいません。\n\nMagisk ManagerがSafetyNetチェックのための拡張機能 (GoogleApiClientを含む) をダウンロードすることを許可しますか?</string>
<string name="su_db_corrupt">SUデータベースが壊れています。DBを再生成します</string>

View File

@ -108,10 +108,8 @@
<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">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">Supervartotojo duomenų bazė yra sugadinta, perkursime naują duomenų bazę</string>

View File

@ -107,10 +107,8 @@
<string name="boot_file_patch_msg">Kies originele boot image-dump in .img- of .img.tar-formaat</string>
<string name="complete_uninstall">Compleet deïnstalleren</string>
<string name="restore_img">Images herstellen</string>
<string name="uninstall_app">App deïnstalleren</string>
<string name="restore_done">Herstel voltooid!</string>
<string name="restore_fail">Originele back-up bestaat niet!</string>
<string name="uninstall_toast">Magisk Manager wordt over 5 seconden verwijderd, hierna handmatig herstarten aub</string>
<string name="proprietary_title">Google\'s code downloaden</string>
<string name="proprietary_notice">Magisk Manager is FOSS, dus bevat geen SafetyNet API code van Google.\n\nSta je Magisk Manager toe om een extensie te downloaden (bevat GoogleApiClient) voor SafetyNet controles?</string>
<string name="su_db_corrupt">SU database is corrupt, nieuwe db maken…</string>

View File

@ -106,10 +106,8 @@
<string name="boot_file_patch_msg">Wybierz stock boot image w formacie .img lub .img.tar</string>
<string name="complete_uninstall">Odinstalowywanie Zakończone</string>
<string name="restore_img">Przywróć Obraz</string>
<string name="uninstall_app">Odinstaluj Aplikację</string>
<string name="restore_done">Przywracanie zakończone!</string>
<string name="restore_fail">Stock backup nie istnieje!</string>
<string name="uninstall_toast">Odinstalowanie Magisk Manager w ciągu 5 sekund, proszę następnie ręcznie ponownie uruchomić urządzenie</string>
<string name="proprietary_title">Pobierz Kod</string>
<string name="proprietary_notice">Magisk Manager to FOSS, więc nie zawiera zastrzeżonego kodu API SafetyNet. \n\nCzy zezwolić Magisk Managerowi na pobranie rozszerzenia (zawierającego GoogleApiClient) do sprawdzenia SafetyNet?</string>
<string name="su_db_corrupt">Baza danych SU jest uszkodzona, odtworzy nową bazę danych</string>

View File

@ -107,10 +107,8 @@
<string name="boot_file_patch_msg">Selecionar depósito de imagem de inicialização de fábrica no formato .img ou .img.tar</string>
<string name="complete_uninstall">Completar Desinstalação</string>
<string name="restore_img">Restaurar Imagens</string>
<string name="uninstall_app">Desinstalar App</string>
<string name="restore_done">Restauração concluída!</string>
<string name="restore_fail">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>

View File

@ -102,7 +102,6 @@
<string name="complete_uninstall">Dezinstalare totală</string>
<string name="restore_done">Restabilire finalizată!</string>
<string name="restore_fail">Backup stoc nu există!</string>
<string name="uninstall_toast">Dezinstalare Magisk Manager în 5 secunde, ulterior reporniți manual</string>
<string name="proprietary_title">Descărcare cod proprietar</string>
<string name="proprietary_notice">Magisk Manager este FOSS așa că nu conține codul API SafetyNet de la Google.\n\nPermiteți ca Magisk Manager să descarce o extensie (conține GoogleApiClient) pentru verificările SafetyNet?</string>
<string name="su_db_corrupt">Baza de date SU este defectă, va fi creată o bază nouă</string>

View File

@ -107,10 +107,8 @@
<string name="boot_file_patch_msg">Выберите файл ядра (boot), *.img либо *.img.tar формата</string>
<string name="complete_uninstall">Полное удаление</string>
<string name="restore_img">Восстановить разделы</string>
<string name="uninstall_app">Удалить приложение</string>
<string name="restore_done">Восстановление завершено!</string>
<string name="restore_fail">Резервная копия отсутствует!</string>
<string name="uninstall_toast">Удаление Magisk Manager в течении 5 секунд. Перезагрузите устройство.</string>
<string name="proprietary_title">Загрузка SafetyNet</string>
<string name="proprietary_notice">Magisk Manager — свободно распространяемый продукт, он не содержит собственный код SafetyNet API от Google.\n\nРазрешить Magisk Manager загрузить расширение (содержит GoogleApiClient) для проверки SafetyNet?</string>
<string name="su_db_corrupt">База данных SU повреждена, будет создана новая</string>

View File

@ -101,7 +101,6 @@
<string name="complete_uninstall">Комплетна Унинсталација</string>
<string name="restore_done">Повратак успешан!</string>
<string name="restore_fail">Фабрички бекап не постоји!</string>
<string name="uninstall_toast">Уклањање Магиск Менаџера за 5 секунди, молим вас да ручно рестартујете телефон</string>
<string name="proprietary_title">Преузми Власнички Код</string>
<string name="proprietary_notice">Магиск Менаџер је \'FOSS\' што значи да не садржи Гуглов власнички код од СигурнаМрежа АПИ.\n\nДа ли дозвољавате да Магиск Менаџер преузме додатак (садржи GoogleApiClient) за СигурнаМрежа провере?</string>
<string name="su_db_corrupt">СК база података оштећена, креирам нову</string>

View File

@ -106,10 +106,8 @@
<string name="boot_file_patch_msg">.img veya .img.tar formatında stok önyükleme imajını seçin</string>
<string name="complete_uninstall">Tamamen Kaldır</string>
<string name="restore_img">Önyükleme İmajını Geri Yükle</string>
<string name="uninstall_app">Uygulamayı Kaldır</string>
<string name="restore_done">Yenileme tamamlandı!</string>
<string name="restore_fail">Stok önyükleme yedeği yok!</string>
<string name="uninstall_toast">Magisk Manager\'ı 5 saniye içinde kaldırdıktan sonra lütfen daha sonra elle yeniden başlatın</string>
<string name="proprietary_title">Tescil Kodunu İndirin</string>
<string name="proprietary_notice">Magisk Yöneticisi, FOSS olduğundan Google\'ın tescilli olduğu SafetyNet API kodunu içermez.\n\nMagisk Manager\'ın SafetyNet kontrolü için bir uzantıyı (GoogleApiClient içeriyor) indirmesine izin veriyor musunuz?</string>
<string name="su_db_corrupt">SU veritabanı bozuk, yeni db oluşturacak</string>

View File

@ -106,10 +106,8 @@
<string name="boot_file_patch_msg">Виберіть оригінальний дамп boot образу в форматі .img чи .img.tar</string>
<string name="complete_uninstall">Видалення виконано</string>
<string name="restore_img">Відновити образ</string>
<string name="uninstall_app">Видалити додаток</string>
<string name="restore_done">Відновлення завершено!</string>
<string name="restore_fail">Немає резервної копії оригінального boot образу</string>
<string name="uninstall_toast">Видалення Magisk Manager протягом 5 секунд, потім, будь ласка, вручну перезавантажте пристрій</string>
<string name="proprietary_title">Завантажити пропрієтарний код</string>
<string name="proprietary_notice">Magisk Manager — це безкоштовний додаток з відкритим вихідним кодом, тому він не містить пропрієтарний код API SafetyNet від компанії Google.\n\nДозволити Magisk Manager завантажити розширення (яке містить GoogleApiClient) для перевірки SafetyNet?</string>
<string name="su_db_corrupt">База даних SU пошкоджена, буде створено нову БД</string>

View File

@ -107,10 +107,8 @@
<string name="boot_file_patch_msg">选择原厂 Boot 镜像备份;支持 .img 以及 .img.tar 格式</string>
<string name="complete_uninstall">完全卸载</string>
<string name="restore_img">还原原厂镜像</string>
<string name="uninstall_app">卸载应用</string>
<string name="restore_done">还原完成!</string>
<string name="restore_fail">原厂 Boot 镜像备份不存在!</string>
<string name="uninstall_toast">将在 5 秒内卸载 Magisk Manager接下来请手动重新启动</string>
<string name="proprietary_title">下载专有代码</string>
<string name="proprietary_notice">Magisk Manager 是一个 100% 开源的应用,因此不会包含 Google 专有的 SafetyNet API 代码。\n\n允许 Magisk Manager 下载一个扩展(包含 GoogleApiClient用于 SafetyNet 检查吗?</string>
<string name="su_db_corrupt">SU 数据库已损坏,将重新创建数据库</string>

View File

@ -182,7 +182,6 @@
<string name="restore_fail">原廠 boot 映像備份不存在!</string>
<string name="boot_file_patch_msg">選擇原廠 boot 映像備份;支援 .img 以及 .img.tar 格式</string>
<string name="install_second_slot">安裝到第二分區 (安裝完OTA後)</string>
<string name="uninstall_toast">將在 5 秒內解除安裝 Magisk Manager接下來請手動重新啟動</string>
<string name="safetyNet_api_error">SafetyNet API 錯誤</string>
<string name="proprietary_title">下載非開源程式</string>
<string name="proprietary_notice">Magisk Manager 是一個 100% 開源的程式,因此不會包含 Google 私有所有權的 SafetyNet API 程式碼。\n\n你允許 Magisk Manager 下載一個擴充包 (包含 GoogleApiClient) 以執行 SafetyNet 檢查嗎?</string>
@ -198,7 +197,6 @@
<string name="reboot_bootloader">重啟到 Bootloader</string>
<string name="reboot_download">重啟到 Download</string>
<string name="android_o_not_support">不支援 Android 8.0+</string>
<string name="uninstall_app">解除安裝應用程式</string>
<string name="restore_img">還原原廠映像檔</string>
<string name="updated_on">更新於:%1$s</string>
<string name="sorting_order">排序方式</string>

View File

@ -106,10 +106,10 @@
<string name="boot_file_patch_msg">Select stock boot image dump in .img or .img.tar format</string>
<string name="complete_uninstall">Complete Uninstall</string>
<string name="restore_img">Restore Images</string>
<string name="uninstall_app">Uninstall App</string>
<string name="restore_img_title">Restoring Images</string>
<string name="restore_img_msg">Restoring…</string>
<string name="restore_done">Restoration done!</string>
<string name="restore_fail">Stock backup does not exist!</string>
<string name="uninstall_toast">Uninstalling Magisk Manager in 5 seconds, please manually reboot afterwards</string>
<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>
@ -119,6 +119,8 @@
<string name="setup_fail">Setup failed</string>
<string name="env_fix_title">Requires Additional Setup</string>
<string name="env_fix_msg">Your device needs additional setup for Magisk to work properly. It will download the Magisk setup zip, do you want to proceed now?</string>
<string name="setup_title">Additional Setup</string>
<string name="setup_msg">Running environment setup…</string>
<!--Settings Activity -->
<string name="settings_general_category">General</string>

View File

@ -17,8 +17,6 @@ public class Const {
public static final String MAGISKHIDE_PROP = "persist.magisk.hide";
// APK content
public static final String UNINSTALLER = "magisk_uninstaller.sh";
public static final String UTIL_FUNCTIONS= "util_functions.sh";
public static final String ANDROID_MANIFEST = "AndroidManifest.xml";
public static final String SU_KEYSTORE_KEY = "su_key";
@ -159,6 +157,7 @@ public class Const {
public static final String PATCH_BOOT = "patch";
public static final String FLASH_MAGISK = "magisk";
public static final String FLASH_SECOND_SLOT = "slot";
public static final String UNINSTALL = "uninstall";
public static final int[] timeoutList = {0, -1, 10, 20, 30, 60};
public static final int ORDER_NAME = 0;
public static final int ORDER_DATE = 1;