mirror of
https://github.com/ReVanced/revanced-manager.git
synced 2025-05-21 08:26:47 +08:00
Compare commits
38 Commits
Author | SHA1 | Date | |
---|---|---|---|
a0339e3c19 | |||
9cfa274d81 | |||
8c79f5e371 | |||
0d716513d7 | |||
08f6724060 | |||
29daf51e64 | |||
b3b2b01c0f | |||
c3212d0308 | |||
aaa114ba13 | |||
8ca6418630 | |||
95632b7f55 | |||
64744b2abf | |||
096b315701 | |||
c27ca08d3a | |||
0011222371 | |||
29db947e25 | |||
fd43ac7581 | |||
e49c19b3cd | |||
06f0e59967 | |||
c5fc5ee93b | |||
159c85bd1f | |||
2460acf0f4 | |||
6495687841 | |||
d229ccb36c | |||
4d6a57ddcf | |||
d161d55aaf | |||
768ad0c9bc | |||
29323d4e20 | |||
630b22e193 | |||
79116f9e67 | |||
eb58475259 | |||
a879ac30fb | |||
c5b0621323 | |||
0462815014 | |||
e64318c947 | |||
b784482788 | |||
2834e8b348 | |||
b23dfd4289 |
11
.github/workflows/analyze.yml
vendored
11
.github/workflows/analyze.yml
vendored
@ -1,14 +1,25 @@
|
||||
name: Analyze Code
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "dev" ]
|
||||
paths:
|
||||
- "**.dart"
|
||||
- ".github/workflows/analyze.yml"
|
||||
pull_request:
|
||||
branches: [ "main", "dev" ]
|
||||
types:
|
||||
- opened
|
||||
- reopened
|
||||
- synchronize
|
||||
- ready_for_review
|
||||
paths:
|
||||
- "**.dart"
|
||||
- ".github/workflows/analyze.yml"
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: "Static analysis & format check"
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
@ -1,7 +1,7 @@
|
||||
name: PR Build
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
build:
|
@ -71,7 +71,7 @@ dependencies {
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
|
||||
|
||||
// ReVanced
|
||||
implementation "app.revanced:revanced-patcher:11.0.4"
|
||||
implementation "app.revanced:revanced-patcher:12.1.0"
|
||||
|
||||
// Signing & aligning
|
||||
implementation("org.bouncycastle:bcpkix-jdk15on:1.70")
|
||||
|
@ -2,23 +2,29 @@
|
||||
package="app.revanced.manager.flutter">
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
|
||||
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
|
||||
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
|
||||
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
|
||||
android:maxSdkVersion="32" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
|
||||
android:maxSdkVersion="32" />
|
||||
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
|
||||
|
||||
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
|
||||
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
|
||||
<uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES" />
|
||||
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
||||
|
||||
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
|
||||
<application
|
||||
android:label="ReVanced Manager"
|
||||
android:name="${applicationName}"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:largeHeap="true"
|
||||
android:requestLegacyExternalStorage="true"
|
||||
android:extractNativeLibs="true"
|
||||
android:enableOnBackInvokedCallback="true">
|
||||
<activity
|
||||
|
@ -1,3 +1,6 @@
|
||||
org.gradle.jvmargs=-Xmx1536M
|
||||
org.gradle.jvmargs=-Xmx1536M -XX:+UseParallelGC
|
||||
org.gradle.parallel=true
|
||||
org.gradle.daemon=true
|
||||
org.gradle.caching=true
|
||||
android.useAndroidX=true
|
||||
android.enableJetifier=true
|
||||
|
@ -147,9 +147,9 @@
|
||||
"sentryLabel": "تسجيل الحراسة",
|
||||
"sentryHint": "إرسال سجلات مجهولة لمساعدتنا في تحسين ReVanced Manager",
|
||||
"restartAppForChanges": "إعادة تشغيل التطبيق لتطبيق التغييرات",
|
||||
"deleteKeystoreLabel": "حذف ملف تخزين المفاتيح",
|
||||
"deleteKeystoreHint": "حذف ملف تخزين المفاتيح المستخدم للتوقيع على التطبيق",
|
||||
"deletedKeystore": "تم حذف مِلَفّ تخزين المفاتيح",
|
||||
"regenerateKeystoreLabel": "حذف ملف تخزين المفاتيح",
|
||||
"regenerateKeystoreHint": "حذف ملف تخزين المفاتيح المستخدم للتوقيع على التطبيق",
|
||||
"regeneratedKeystore": "تم حذف مِلَفّ تخزين المفاتيح",
|
||||
"deleteTempDirLabel": "حذف الملفات المؤقتة",
|
||||
"deleteTempDirHint": "حذف الملفات المؤقتة غير المستخدمة",
|
||||
"deletedTempDir": "تم حذف الملفات المؤقتة",
|
||||
|
@ -143,9 +143,9 @@
|
||||
"sentryLabel": "Keşikçi jurnalı",
|
||||
"sentryHint": "ReVanced Manager-i inkişaf etdirməyimizə kömək etməsi üçün anonim jurnallar göndərin",
|
||||
"restartAppForChanges": "Dəyişiklikləri tətbiq etmək üçün tətbiqi yenidən başlat",
|
||||
"deleteKeystoreLabel": "Keystore-u sil",
|
||||
"deleteKeystoreHint": "Tətbiqi imzalamaq üçün istifadə edilən keystoru-u sil",
|
||||
"deletedKeystore": "Keystore silindi",
|
||||
"regenerateKeystoreLabel": "Keystore-u sil",
|
||||
"regenerateKeystoreHint": "Tətbiqi imzalamaq üçün istifadə edilən keystoru-u sil",
|
||||
"regeneratedKeystore": "Keystore silindi",
|
||||
"deleteTempDirLabel": "Müvəqqəti faylları sil",
|
||||
"deleteTempDirHint": "İstifadə edilməyən müvəqqəti faylları sil",
|
||||
"deletedTempDir": "Müvəqqəti fayllar silindi",
|
||||
|
@ -147,9 +147,9 @@
|
||||
"sentryLabel": "Sentry логване",
|
||||
"sentryHint": "Пращайте анонимни логове за да ни помогнете да подобрим ReVanced Manager",
|
||||
"restartAppForChanges": "Рестартирайте приложението, за да се приложат промените",
|
||||
"deleteKeystoreLabel": "Изтриване на keystore",
|
||||
"deleteKeystoreHint": "Изтриване на keystore използван за подписване на приложението",
|
||||
"deletedKeystore": "Keystore изтрит",
|
||||
"regenerateKeystoreLabel": "Изтриване на keystore",
|
||||
"regenerateKeystoreHint": "Изтриване на keystore използван за подписване на приложението",
|
||||
"regeneratedKeystore": "Keystore изтрит",
|
||||
"deleteTempDirLabel": "Изтриване на временни файлове",
|
||||
"deleteTempDirHint": "Изтриване на неизползвани временни файлове",
|
||||
"deletedTempDir": "Временните файлове са изтрити",
|
||||
|
@ -143,9 +143,9 @@
|
||||
"sentryLabel": "সেন্ট্রি লগিং",
|
||||
"sentryHint": "ReVanced Manager উন্নত করতে আমাদের সাহায্য করতে বেনামী লগ পাঠান",
|
||||
"restartAppForChanges": "পরিবর্তনগুলি প্রয়োগ করতে অ্যাপটি পুনরায় চালু করুন",
|
||||
"deleteKeystoreLabel": "কীস্টোর মুছুন",
|
||||
"deleteKeystoreHint": "প্যাচড অ্যাপ সাইন করতে ব্যবহৃত কীস্টোরটি মুছুন",
|
||||
"deletedKeystore": "কীস্টোর মুছে ফেলা হয়েছে",
|
||||
"regenerateKeystoreLabel": "কীস্টোর মুছুন",
|
||||
"regenerateKeystoreHint": "প্যাচড অ্যাপ সাইন করতে ব্যবহৃত কীস্টোরটি মুছুন",
|
||||
"regeneratedKeystore": "কীস্টোর মুছে ফেলা হয়েছে",
|
||||
"deleteTempDirLabel": "অস্থায়ী ফাইল মুছুন",
|
||||
"deleteTempDirHint": "অব্যবহৃত অস্থায়ী ফাইল মুছুন",
|
||||
"deletedTempDir": "অস্থায়ী ফাইল মুছে ফেলা হয়েছে",
|
||||
|
@ -143,9 +143,9 @@
|
||||
"sentryLabel": "Log Sentry",
|
||||
"sentryHint": "Odeslat anonymní protokoly, které nám pomohou zlepšit ReVanced Manager",
|
||||
"restartAppForChanges": "Pro aplikování změn restartuj aplikaci",
|
||||
"deleteKeystoreLabel": "Vymazat úložiště klíčů",
|
||||
"deleteKeystoreHint": "Smazat úložiště klíčů používané k podpisu aplikace",
|
||||
"deletedKeystore": "Úložiště klíčů bylo smazáno",
|
||||
"regenerateKeystoreLabel": "Vymazat úložiště klíčů",
|
||||
"regenerateKeystoreHint": "Smazat úložiště klíčů používané k podpisu aplikace",
|
||||
"regeneratedKeystore": "Úložiště klíčů bylo smazáno",
|
||||
"deleteTempDirLabel": "Odstranit dočasné soubory",
|
||||
"deleteTempDirHint": "Odstranit nepoužité dočasné soubory",
|
||||
"deletedTempDir": "Dočasné soubory byly smazány",
|
||||
|
@ -147,9 +147,9 @@
|
||||
"sentryLabel": "Sentry logning",
|
||||
"sentryHint": "Send anonyme logfiler for at hjælpe os med at forbedre ReVanced Manager",
|
||||
"restartAppForChanges": "Genstart appen for at anvende ændringer",
|
||||
"deleteKeystoreLabel": "Slet keystore",
|
||||
"deleteKeystoreHint": "Slet keystore der bruges til at signere appen",
|
||||
"deletedKeystore": "Keystore slettet",
|
||||
"regenerateKeystoreLabel": "Slet keystore",
|
||||
"regenerateKeystoreHint": "Slet keystore der bruges til at signere appen",
|
||||
"regeneratedKeystore": "Keystore slettet",
|
||||
"deleteTempDirLabel": "Slet midlertidige filer",
|
||||
"deleteTempDirHint": "Slet ubrugte midlertidige filer",
|
||||
"deletedTempDir": "Midlertidige filer slettet",
|
||||
|
@ -147,9 +147,9 @@
|
||||
"sentryLabel": "Sentry-Protokollierung",
|
||||
"sentryHint": "Sende anonyme Protokolle, um den ReVanced Manager zu verbessern",
|
||||
"restartAppForChanges": "Starte die App neu um die Änderungen zu übernehmen",
|
||||
"deleteKeystoreLabel": "Den Schlüsselspeicher löschen",
|
||||
"deleteKeystoreHint": "Löschen des Schlüsselspeichers, der zum Signieren der Anwendung verwendet wurde",
|
||||
"deletedKeystore": "Schlüsselspeicher gelöscht",
|
||||
"regenerateKeystoreLabel": "Den Schlüsselspeicher löschen",
|
||||
"regenerateKeystoreHint": "Löschen des Schlüsselspeichers, der zum Signieren der Anwendung verwendet wurde",
|
||||
"regeneratedKeystore": "Schlüsselspeicher gelöscht",
|
||||
"deleteTempDirLabel": "Lösche temporäre Dateien",
|
||||
"deleteTempDirHint": "Unbenutzte temporäre Dateien löschen",
|
||||
"deletedTempDir": "Temporäre Dateien gelöscht",
|
||||
|
@ -147,9 +147,9 @@
|
||||
"sentryLabel": "Αρχεία καταγραφής «Sentry»",
|
||||
"sentryHint": "Στείλτε ανώνυμα αρχεία καταγραφής για να μας βοηθήσετε να βελτιώσουμε το ReVanced Manager",
|
||||
"restartAppForChanges": "Επανεκκινήστε την εφαρμογή για να εφαρμόσετε αλλαγές",
|
||||
"deleteKeystoreLabel": "Διαγραφή κλειδιών",
|
||||
"deleteKeystoreHint": "Διαγράψτε το κλειδί που χρησιμοποιείται για την υπογραφή της εφαρμογής",
|
||||
"deletedKeystore": "Το κλειδί διαγράφηκε",
|
||||
"regenerateKeystoreLabel": "Διαγραφή κλειδιών",
|
||||
"regenerateKeystoreHint": "Διαγράψτε το κλειδί που χρησιμοποιείται για την υπογραφή της εφαρμογής",
|
||||
"regeneratedKeystore": "Το κλειδί διαγράφηκε",
|
||||
"deleteTempDirLabel": "Διαγραφή προσωρινών αρχείων",
|
||||
"deleteTempDirHint": "Διαγραφή των αχρησιμοποίητων προσωρινών αρχείων",
|
||||
"deletedTempDir": "Τα προσωρινά αρχεία διαγράφηκαν",
|
||||
|
@ -211,17 +211,21 @@
|
||||
|
||||
"resetStoredPatchesLabel": "Reset patches",
|
||||
"resetStoredPatchesHint": "Reset the stored patches selection",
|
||||
"resetStoredPatchesDialogText": "Are you sure you want to reset the stored patches selection?",
|
||||
|
||||
"resetStoredPatchesDialogTitle": "Reset patches selection?",
|
||||
"resetStoredPatchesDialogText": "Resetting patches selection will remove all selected patches.",
|
||||
"resetStoredPatches": "Patches selection has been reset",
|
||||
|
||||
"deleteLogsLabel": "Delete logs",
|
||||
"deleteLogsHint": "Delete collected manager logs",
|
||||
"deletedLogs": "Logs deleted",
|
||||
|
||||
"deleteKeystoreLabel": "Delete keystore",
|
||||
"deleteKeystoreHint": "Delete the keystore used to sign the app",
|
||||
"deleteKeystoreDialogText": "Are you sure you want to delete the keystore used to sign patched applications?",
|
||||
"deletedKeystore": "Keystore deleted",
|
||||
"regenerateKeystoreLabel": "Regenerate keystore",
|
||||
"regenerateKeystoreHint": "Regenerate the keystore used to sign the app",
|
||||
|
||||
"regenerateKeystoreDialogTitle": "Regenerate keystore?",
|
||||
"regenerateKeystoreDialogText": "Patched apps signed with the old keystore will no longer be able to update.",
|
||||
"regeneratedKeystore": "Keystore regenerated",
|
||||
|
||||
"exportKeystoreLabel": "Export keystore",
|
||||
"exportKeystoreHint": "Export keystore used to sign apps",
|
||||
|
@ -147,9 +147,9 @@
|
||||
"sentryLabel": "Registro Sentry",
|
||||
"sentryHint": "Enviar registros anónimos para ayudarnos a mejorar ReVanced Manager",
|
||||
"restartAppForChanges": "Reinicie la app para aplicar los cambios",
|
||||
"deleteKeystoreLabel": "Eliminar keystore",
|
||||
"deleteKeystoreHint": "Eliminar el keystore usado para firmar la app",
|
||||
"deletedKeystore": "Keystore eliminado",
|
||||
"regenerateKeystoreLabel": "Eliminar keystore",
|
||||
"regenerateKeystoreHint": "Eliminar el keystore usado para firmar la app",
|
||||
"regeneratedKeystore": "Keystore eliminado",
|
||||
"deleteTempDirLabel": "Borrar archivos temporales",
|
||||
"deleteTempDirHint": "Eliminar archivos temporales no utilizados",
|
||||
"deletedTempDir": "Archivos temporales eliminados",
|
||||
|
@ -143,9 +143,9 @@
|
||||
"sentryLabel": "Registro centinela",
|
||||
"sentryHint": "Enviar registros anónimos para ayudarnos a mejorar ReVanced Manager",
|
||||
"restartAppForChanges": "Reinicie la aplicación para aplicar los cambios",
|
||||
"deleteKeystoreLabel": "Eliminar keystore",
|
||||
"deleteKeystoreHint": "Eliminar el keystore usado para firmar la app",
|
||||
"deletedKeystore": "Keystore eliminado",
|
||||
"regenerateKeystoreLabel": "Eliminar keystore",
|
||||
"regenerateKeystoreHint": "Eliminar el keystore usado para firmar la app",
|
||||
"regeneratedKeystore": "Keystore eliminado",
|
||||
"deleteTempDirLabel": "Borrar archivos temporales",
|
||||
"deleteTempDirHint": "Eliminar archivos temporales sin utilizar",
|
||||
"deletedTempDir": "Archivos temporales eliminados",
|
||||
|
@ -143,9 +143,9 @@
|
||||
"sentryLabel": "Sentry-lokikirjaus",
|
||||
"sentryHint": "Lähetä nimettömiä tietoja auttaaksesi ReVanced Managerin kehityksessä",
|
||||
"restartAppForChanges": "Käynnistä sovellus uudestaan muutosten käyttöönottamiseksi",
|
||||
"deleteKeystoreLabel": "Poista avainsäilö",
|
||||
"deleteKeystoreHint": "Poista sovelluksen allekirjoitukseen käytetty avainsäilö",
|
||||
"deletedKeystore": "Avainsäilö poistettiin",
|
||||
"regenerateKeystoreLabel": "Poista avainsäilö",
|
||||
"regenerateKeystoreHint": "Poista sovelluksen allekirjoitukseen käytetty avainsäilö",
|
||||
"regeneratedKeystore": "Avainsäilö poistettiin",
|
||||
"deleteTempDirLabel": "Poista väliaikaistiedostot",
|
||||
"deleteTempDirHint": "Poista käyttämättömät väliaikaistiedostot",
|
||||
"deletedTempDir": "Väliaikaistiedostot poistettiin",
|
||||
|
@ -147,9 +147,9 @@
|
||||
"sentryLabel": "Journal sentinel",
|
||||
"sentryHint": "Envoyer des journaux anonymes pour nous aider à améliorer ReVanced Manager",
|
||||
"restartAppForChanges": "Redémarrez l'application pour appliquer les changements",
|
||||
"deleteKeystoreLabel": "Supprimer le magasin de clés",
|
||||
"deleteKeystoreHint": "Supprimer le magasin de clés utilisé pour signer l'application",
|
||||
"deletedKeystore": "Magasin de clés supprimé",
|
||||
"regenerateKeystoreLabel": "Supprimer le magasin de clés",
|
||||
"regenerateKeystoreHint": "Supprimer le magasin de clés utilisé pour signer l'application",
|
||||
"regeneratedKeystore": "Magasin de clés supprimé",
|
||||
"deleteTempDirLabel": "Supprimer les fichiers temporaires",
|
||||
"deleteTempDirHint": "Supprimer les fichiers temporaires inutilisés",
|
||||
"deletedTempDir": "Fichiers temporaires supprimés",
|
||||
|
@ -143,9 +143,9 @@
|
||||
"sentryLabel": "संतरी लॉगिंग",
|
||||
"sentryHint": "उन्नत प्रबंधक को बेहतर बनाने में हमारी सहायता करने के लिए अनाम लॉग भेजें",
|
||||
"restartAppForChanges": "Restart the app to apply changes",
|
||||
"deleteKeystoreLabel": "कीस्टोर मिटाएं",
|
||||
"deleteKeystoreHint": "ऐप पर हस्ताक्षर करने के लिए उपयोग की जाने वाली कीस्टोर हटाएं",
|
||||
"deletedKeystore": "कीस्टोर हटा दिया गया",
|
||||
"regenerateKeystoreLabel": "कीस्टोर मिटाएं",
|
||||
"regenerateKeystoreHint": "ऐप पर हस्ताक्षर करने के लिए उपयोग की जाने वाली कीस्टोर हटाएं",
|
||||
"regeneratedKeystore": "कीस्टोर हटा दिया गया",
|
||||
"deleteTempDirLabel": "अस्थाई फ़ाइलें मिटायें",
|
||||
"deleteTempDirHint": "अप्रयुक्त अस्थाई फ़ाइलें मिटायें",
|
||||
"deletedTempDir": "क्षणिक फ़ाईल मिटाए गए।",
|
||||
|
@ -143,9 +143,9 @@
|
||||
"sentryLabel": "Sentry naplózás",
|
||||
"sentryHint": "Névtelen használati adatok küldésével hozzájárulhatsz, hogy a ReVanced Manager még jobb legyen",
|
||||
"restartAppForChanges": "Indítsd újra az alkalmazást a változások alkalmazásához",
|
||||
"deleteKeystoreLabel": "Kulcstartó törlése",
|
||||
"deleteKeystoreHint": "Törli az alkalmazás aláírásához használt kulcstartót",
|
||||
"deletedKeystore": "Kulcstartó törölve",
|
||||
"regenerateKeystoreLabel": "Kulcstartó törlése",
|
||||
"regenerateKeystoreHint": "Törli az alkalmazás aláírásához használt kulcstartót",
|
||||
"regeneratedKeystore": "Kulcstartó törölve",
|
||||
"deleteTempDirLabel": "Ideiglenes fájlok törlése",
|
||||
"deleteTempDirHint": "Felesleges átmeneti fájlok törlése",
|
||||
"deletedTempDir": "Ideiglenes fájlok törölve",
|
||||
|
@ -147,9 +147,9 @@
|
||||
"sentryLabel": "Log sentry",
|
||||
"sentryHint": "Kirim log anonim untuk membantu kami meningkatkan ReVanced Manager",
|
||||
"restartAppForChanges": "Mulai ulang aplikasi untuk menerapkan perubahan",
|
||||
"deleteKeystoreLabel": "Hapus penyimpanan kunci",
|
||||
"deleteKeystoreHint": "Hapus penyimpanan kunci yang digunakan untuk menandatangani aplikasi",
|
||||
"deletedKeystore": "Penyimpanan kunci dihapus",
|
||||
"regenerateKeystoreLabel": "Hapus penyimpanan kunci",
|
||||
"regenerateKeystoreHint": "Hapus penyimpanan kunci yang digunakan untuk menandatangani aplikasi",
|
||||
"regeneratedKeystore": "Penyimpanan kunci dihapus",
|
||||
"deleteTempDirLabel": "Hapus berkas sementara",
|
||||
"deleteTempDirHint": "Hapus berkas sementara yang tidak dipakai",
|
||||
"deletedTempDir": "Berkas sementara dihapus",
|
||||
|
@ -147,9 +147,9 @@
|
||||
"sentryLabel": "Log di Sentry",
|
||||
"sentryHint": "Invia log anonimi per aiutarci a migliorare ReVanced Manager",
|
||||
"restartAppForChanges": "Riavvia l'app per applicare le modifiche",
|
||||
"deleteKeystoreLabel": "Elimina keystore",
|
||||
"deleteKeystoreHint": "Elimina il keystore usato per firmare l'applicazione",
|
||||
"deletedKeystore": "Keystore eliminato",
|
||||
"regenerateKeystoreLabel": "Elimina keystore",
|
||||
"regenerateKeystoreHint": "Elimina il keystore usato per firmare l'applicazione",
|
||||
"regeneratedKeystore": "Keystore eliminato",
|
||||
"deleteTempDirLabel": "Elimina file temporanei",
|
||||
"deleteTempDirHint": "Elimina i file temporanei non utilizzati",
|
||||
"deletedTempDir": "File temporanei eliminati",
|
||||
|
@ -143,9 +143,9 @@
|
||||
"sentryLabel": "Sentry 로깅",
|
||||
"sentryHint": "익명의 로그를 보내 ReVanced Manager를 개선할 수 있도록 도와주세요",
|
||||
"restartAppForChanges": "변경 사항을 적용하려면 앱을 다시 시작하세요",
|
||||
"deleteKeystoreLabel": "키스토어 제거",
|
||||
"deleteKeystoreHint": "앱을 서명하기 위해 사용되는 키스토어를 제거합니다.",
|
||||
"deletedKeystore": "키스토어 제거됨",
|
||||
"regenerateKeystoreLabel": "키스토어 제거",
|
||||
"regenerateKeystoreHint": "앱을 서명하기 위해 사용되는 키스토어를 제거합니다.",
|
||||
"regeneratedKeystore": "키스토어 제거됨",
|
||||
"deleteTempDirLabel": "임시 파일 삭제",
|
||||
"deleteTempDirHint": "사용되지 않은 임시 파일 삭제",
|
||||
"deletedTempDir": "임시 파일 삭제됨",
|
||||
|
@ -147,9 +147,9 @@
|
||||
"sentryLabel": "Klaidų rinkimo įrankio įrašai",
|
||||
"sentryHint": "Siųsti anoniminius įrašus, kad padėtumėte mums tobulinti ReVanced Manager",
|
||||
"restartAppForChanges": "Iš naujo paleiskite programą, kad modifikacijos įsigaliotų",
|
||||
"deleteKeystoreLabel": "Ištrinti keystore",
|
||||
"deleteKeystoreHint": "Ištrinti keystore kuris naudojamas pasirašyti programą",
|
||||
"deletedKeystore": "Keystore ištrintas",
|
||||
"regenerateKeystoreLabel": "Ištrinti keystore",
|
||||
"regenerateKeystoreHint": "Ištrinti keystore kuris naudojamas pasirašyti programą",
|
||||
"regeneratedKeystore": "Keystore ištrintas",
|
||||
"deleteTempDirLabel": "Ištrinti laikinus failus",
|
||||
"deleteTempDirHint": "Ištrinti nenaudojamus laikinus failus",
|
||||
"deletedTempDir": "Laikini failai ištrinti",
|
||||
|
@ -143,9 +143,9 @@
|
||||
"sentryLabel": "Rekod Sentry",
|
||||
"sentryHint": "Hantarkan log anonymous untuk bantu kami menambah baik Revanced Manager",
|
||||
"restartAppForChanges": "Mulakan semula apl untuk menggunakan tetapan",
|
||||
"deleteKeystoreLabel": "Buang keystore",
|
||||
"deleteKeystoreHint": "Buang keystore yang digunakan untuk mengesahkan apl",
|
||||
"deletedKeystore": "Keystore dibuang",
|
||||
"regenerateKeystoreLabel": "Buang keystore",
|
||||
"regenerateKeystoreHint": "Buang keystore yang digunakan untuk mengesahkan apl",
|
||||
"regeneratedKeystore": "Keystore dibuang",
|
||||
"deleteTempDirLabel": "Buang fail sementara",
|
||||
"deleteTempDirHint": "Buang fail sementara yang tidak digunakan",
|
||||
"deletedTempDir": "Fail sementara dibuang",
|
||||
|
@ -147,9 +147,9 @@
|
||||
"sentryLabel": "Zapisywanie logów",
|
||||
"sentryHint": "Wysyłaj anonimowe logi, aby pomóc nam ulepszyć ReVanced Manager",
|
||||
"restartAppForChanges": "Zrestartuj aplikację, aby zastosować zmiany",
|
||||
"deleteKeystoreLabel": "Usuń klucz",
|
||||
"deleteKeystoreHint": "Usuń klucz używany do podpisywania aplikacji",
|
||||
"deletedKeystore": "Klucz usunięty",
|
||||
"regenerateKeystoreLabel": "Usuń klucz",
|
||||
"regenerateKeystoreHint": "Usuń klucz używany do podpisywania aplikacji",
|
||||
"regeneratedKeystore": "Klucz usunięty",
|
||||
"deleteTempDirLabel": "Usuń pliki tymczasowe",
|
||||
"deleteTempDirHint": "Usuń nieużywane pliki tymczasowe",
|
||||
"deletedTempDir": "Pliki tymczasowe zostały usunięte",
|
||||
|
@ -143,9 +143,9 @@
|
||||
"sentryLabel": "Registro do sentinela de erros",
|
||||
"sentryHint": "Envie registros anônimos para nos ajudar a melhorar o ReVanced Manager",
|
||||
"restartAppForChanges": "Reinicie o app para aplicar as mudanças",
|
||||
"deleteKeystoreLabel": "Apagar registro de chaves",
|
||||
"deleteKeystoreHint": "Apagar o registro de chaves usado para assinar o app",
|
||||
"deletedKeystore": "Registro de chaves apagado",
|
||||
"regenerateKeystoreLabel": "Apagar registro de chaves",
|
||||
"regenerateKeystoreHint": "Apagar o registro de chaves usado para assinar o app",
|
||||
"regeneratedKeystore": "Registro de chaves apagado",
|
||||
"deleteTempDirLabel": "Apagar arquivos temporários",
|
||||
"deleteTempDirHint": "Apagar os arquivos temporários inutilizados",
|
||||
"deletedTempDir": "Arquivos temporários apagados",
|
||||
|
@ -147,9 +147,9 @@
|
||||
"sentryLabel": "Registo do coletor de erros",
|
||||
"sentryHint": "Enviar registos anónimos para nos ajudar a melhorar o ReVanced Manager",
|
||||
"restartAppForChanges": "Reinicia a aplicação para aplicar as alterações",
|
||||
"deleteKeystoreLabel": "Excluir keystore",
|
||||
"deleteKeystoreHint": "Excluir a keystore usada para assinar a aplicação",
|
||||
"deletedKeystore": "Keystore excluída",
|
||||
"regenerateKeystoreLabel": "Excluir keystore",
|
||||
"regenerateKeystoreHint": "Excluir a keystore usada para assinar a aplicação",
|
||||
"regeneratedKeystore": "Keystore excluída",
|
||||
"deleteTempDirLabel": "Apagar arquivos temporários",
|
||||
"deleteTempDirHint": "Apagar arquivos temporários não utilizados",
|
||||
"deletedTempDir": "Arquivos temporários apagados",
|
||||
|
@ -147,9 +147,9 @@
|
||||
"sentryLabel": "Logging de Santinelă",
|
||||
"sentryHint": "Trimite log-uri anonime pentru a ne ajuta să îmbunătățim ReVanced Manager",
|
||||
"restartAppForChanges": "Reporniți aplicația pentru a aplica modificările",
|
||||
"deleteKeystoreLabel": "Ștergeți keystore-ul",
|
||||
"deleteKeystoreHint": "Ștergeți keystore-ul utilizat pentru a însemna aplicația",
|
||||
"deletedKeystore": "Keystore șters",
|
||||
"regenerateKeystoreLabel": "Ștergeți keystore-ul",
|
||||
"regenerateKeystoreHint": "Ștergeți keystore-ul utilizat pentru a însemna aplicația",
|
||||
"regeneratedKeystore": "Keystore șters",
|
||||
"deleteTempDirLabel": "Ștergeți fișierele temporare",
|
||||
"deleteTempDirHint": "Șterge fișierele temporare neutilizate",
|
||||
"deletedTempDir": "Fișierele temporare au fost șterse",
|
||||
|
@ -147,9 +147,9 @@
|
||||
"sentryLabel": "Логирование Sentry",
|
||||
"sentryHint": "Отправлять анонимные логи для улучшения ReVanced Manager-а",
|
||||
"restartAppForChanges": "Перезапустите приложение для применения изменений",
|
||||
"deleteKeystoreLabel": "Удалить хранилище ключей",
|
||||
"deleteKeystoreHint": "Удалить хранилище ключей, использованных для подписи приложения",
|
||||
"deletedKeystore": "Хранилище ключей удалено",
|
||||
"regenerateKeystoreLabel": "Удалить хранилище ключей",
|
||||
"regenerateKeystoreHint": "Удалить хранилище ключей, использованных для подписи приложения",
|
||||
"regeneratedKeystore": "Хранилище ключей удалено",
|
||||
"deleteTempDirLabel": "Удалить временные файлы",
|
||||
"deleteTempDirHint": "Удалить неиспользуемые временные файлы",
|
||||
"deletedTempDir": "Временные файлы удалены",
|
||||
|
@ -147,9 +147,9 @@
|
||||
"sentryLabel": "Log Sentry",
|
||||
"sentryHint": "Odoslať anonymné protokoly, ktoré nám pomôžu zlepšiť ReVanced Manager",
|
||||
"restartAppForChanges": "Ak chcete použiť zmeny, reštartujte aplikáciu",
|
||||
"deleteKeystoreLabel": "Odstrániť úložisko kľúčov",
|
||||
"deleteKeystoreHint": "Odstrániť úložisko kľúčov použité na podpísanie aplikácie",
|
||||
"deletedKeystore": "Úložisko kľúčov odstránené",
|
||||
"regenerateKeystoreLabel": "Odstrániť úložisko kľúčov",
|
||||
"regenerateKeystoreHint": "Odstrániť úložisko kľúčov použité na podpísanie aplikácie",
|
||||
"regeneratedKeystore": "Úložisko kľúčov odstránené",
|
||||
"deleteTempDirLabel": "Odstrániť dočasné súbory",
|
||||
"deleteTempDirHint": "Odstrániť nepoužívané dočasné súbory",
|
||||
"deletedTempDir": "Dočasné súbory odstránené",
|
||||
|
@ -143,9 +143,9 @@
|
||||
"sentryLabel": "Sentry prikupljanje grešaka",
|
||||
"sentryHint": "Pošaljite anonimnu evidenciju da biste nam pomogli da poboljšamo ReVanced Manager",
|
||||
"restartAppForChanges": "Ponovo pokrenite aplikaciju da biste primenili promene",
|
||||
"deleteKeystoreLabel": "Izbrišite skladište ključeva",
|
||||
"deleteKeystoreHint": "Izbrišite skladište ključeva korišćeno za potpisivanje aplikacije",
|
||||
"deletedKeystore": "Skladište ključeva je izbrisano",
|
||||
"regenerateKeystoreLabel": "Izbrišite skladište ključeva",
|
||||
"regenerateKeystoreHint": "Izbrišite skladište ključeva korišćeno za potpisivanje aplikacije",
|
||||
"regeneratedKeystore": "Skladište ključeva je izbrisano",
|
||||
"deleteTempDirLabel": "Izbrišite privremene datoteke",
|
||||
"deleteTempDirHint": "Izbrišite nekorišćene privremene datoteke",
|
||||
"deletedTempDir": "Privremene datoteke su izbrisane",
|
||||
|
@ -143,9 +143,9 @@
|
||||
"sentryLabel": "Sentry прикупљање грешака",
|
||||
"sentryHint": "Пошаљите анонимну евиденцију да бисте нам помогли да побољшамо ReVanced Manager",
|
||||
"restartAppForChanges": "Поново покрените апликацију да бисте применили промене",
|
||||
"deleteKeystoreLabel": "Избришите складиште кључева",
|
||||
"deleteKeystoreHint": "Избришите складиште кључева коришћено за потписивање апликације",
|
||||
"deletedKeystore": "Складиште кључева је избрисано",
|
||||
"regenerateKeystoreLabel": "Избришите складиште кључева",
|
||||
"regenerateKeystoreHint": "Избришите складиште кључева коришћено за потписивање апликације",
|
||||
"regeneratedKeystore": "Складиште кључева је избрисано",
|
||||
"deleteTempDirLabel": "Избришите привремене датотеке",
|
||||
"deleteTempDirHint": "Избришите некоришћене привремене датотеке",
|
||||
"deletedTempDir": "Привремене датотеке су избрисане",
|
||||
|
@ -143,9 +143,9 @@
|
||||
"sentryLabel": "Sentry loggning",
|
||||
"sentryHint": "Hjälp oss förbättra ReVanced Manager genom att skicka anonyma loggar",
|
||||
"restartAppForChanges": "Starta om appen för att tillämpa ändringar",
|
||||
"deleteKeystoreLabel": "Radera keystore",
|
||||
"deleteKeystoreHint": "Radera keystore filen som används för att signera appen",
|
||||
"deletedKeystore": "Raderade keystore",
|
||||
"regenerateKeystoreLabel": "Radera keystore",
|
||||
"regenerateKeystoreHint": "Radera keystore filen som används för att signera appen",
|
||||
"regeneratedKeystore": "Raderade keystore",
|
||||
"deleteTempDirLabel": "Ta bort temporära filer",
|
||||
"deleteTempDirHint": "Radera oanvända temporära filer",
|
||||
"deletedTempDir": "Raderade temporära filer",
|
||||
|
@ -147,9 +147,9 @@
|
||||
"sentryLabel": "Sentry logging",
|
||||
"sentryHint": "Tuma kumbukumbu bila majina ili utusaidie kuboresha Revanced Manager",
|
||||
"restartAppForChanges": "Anzisha tena programu ili kutekeleza mabadiliko",
|
||||
"deleteKeystoreLabel": "Futa Duka la Ufunguo",
|
||||
"deleteKeystoreHint": "Futa Duka la Ufunguo iliyotumika kusaini programu",
|
||||
"deletedKeystore": "Duka la ufunguo imefutwa",
|
||||
"regenerateKeystoreLabel": "Futa Duka la Ufunguo",
|
||||
"regenerateKeystoreHint": "Futa Duka la Ufunguo iliyotumika kusaini programu",
|
||||
"regeneratedKeystore": "Duka la ufunguo imefutwa",
|
||||
"deleteTempDirLabel": "Futa faili za muda",
|
||||
"deleteTempDirHint": "Futa faili za muda ambazo hazijatumiwa",
|
||||
"deletedTempDir": "Faili za muda zimefutwa",
|
||||
|
@ -147,9 +147,9 @@
|
||||
"sentryLabel": "Sentry günlükleri",
|
||||
"sentryHint": "ReVanced Manager'ı geliştirmemize yardımcı olmak için anonim günlükler gönderin",
|
||||
"restartAppForChanges": "Değişiklikleri uygulamak için uygulamayı yeniden başlatın",
|
||||
"deleteKeystoreLabel": "Keystore'u sil",
|
||||
"deleteKeystoreHint": "Uygulamayı imzalamak için kullanılan keystore'u silin",
|
||||
"deletedKeystore": "Keystore silindi",
|
||||
"regenerateKeystoreLabel": "Keystore'u sil",
|
||||
"regenerateKeystoreHint": "Uygulamayı imzalamak için kullanılan keystore'u silin",
|
||||
"regeneratedKeystore": "Keystore silindi",
|
||||
"deleteTempDirLabel": "Geçici dosyaları sil",
|
||||
"deleteTempDirHint": "Kullanılmayan geçici dosyaları sil",
|
||||
"deletedTempDir": "Geçici dosyalar silindi",
|
||||
|
@ -143,9 +143,9 @@
|
||||
"sentryLabel": "سنتری لاگنگ",
|
||||
"sentryHint": "ریوینسڈ مینیجر کی بہتری میں مدد کے لیے گمنام لاگ بھیجیں",
|
||||
"restartAppForChanges": "تبدیلیاں دیکھنے کیلیئے اپلی کیشن کو دوبارہ چلائیں",
|
||||
"deleteKeystoreLabel": "ڈیلیٹ کی سٹور",
|
||||
"deleteKeystoreHint": "ایپ پر دستخط کرنے کے لیے استعمال ہونے والے کی اسٹور کو ڈیلیٹ کریں",
|
||||
"deletedKeystore": "کی اسٹور حذف ہو گیا ہے",
|
||||
"regenerateKeystoreLabel": "ڈیلیٹ کی سٹور",
|
||||
"regenerateKeystoreHint": "ایپ پر دستخط کرنے کے لیے استعمال ہونے والے کی اسٹور کو ڈیلیٹ کریں",
|
||||
"regeneratedKeystore": "کی اسٹور حذف ہو گیا ہے",
|
||||
"deleteTempDirLabel": "عارضی فائلوں کو حذف کریں",
|
||||
"deleteTempDirHint": "غیر استعمال شدہ عارضی فائلوں کو حذف کریں",
|
||||
"deletedTempDir": "عارضی فائلیں حذف کردی گئی",
|
||||
|
@ -147,9 +147,9 @@
|
||||
"sentryLabel": "Nhật ký theo dõi",
|
||||
"sentryHint": "Gửi nhật ký ẩn danh để giúp chúng tôi cải thiện ReVanced Manager",
|
||||
"restartAppForChanges": "Khởi động lại ứng dụng để áp dụng thay đổi",
|
||||
"deleteKeystoreLabel": "Xóa kho khóa",
|
||||
"deleteKeystoreHint": "Xóa kho khóa dùng để ký ứng dụng",
|
||||
"deletedKeystore": "Kho khóa đã xóa",
|
||||
"regenerateKeystoreLabel": "Xóa kho khóa",
|
||||
"regenerateKeystoreHint": "Xóa kho khóa dùng để ký ứng dụng",
|
||||
"regeneratedKeystore": "Kho khóa đã xóa",
|
||||
"deleteTempDirLabel": "Xóa tệp tạm thời",
|
||||
"deleteTempDirHint": "Xóa các tệp tạm thời không sử dụng",
|
||||
"deletedTempDir": "Đã xóa các tệp tạm thời",
|
||||
|
@ -143,9 +143,9 @@
|
||||
"sentryLabel": "哨兵日志",
|
||||
"sentryHint": "发送匿名日志以帮助我们改进ReVanced Manager",
|
||||
"restartAppForChanges": "重启应用以生效",
|
||||
"deleteKeystoreLabel": "删除密钥存储",
|
||||
"deleteKeystoreHint": "删除用于签名应用的密钥存储",
|
||||
"deletedKeystore": "密钥存储已删除",
|
||||
"regenerateKeystoreLabel": "删除密钥存储",
|
||||
"regenerateKeystoreHint": "删除用于签名应用的密钥存储",
|
||||
"regeneratedKeystore": "密钥存储已删除",
|
||||
"deleteTempDirLabel": "删除临时文件",
|
||||
"deleteTempDirHint": "删除未使用的临时文件",
|
||||
"deletedTempDir": "临时文件已删除",
|
||||
|
@ -143,9 +143,9 @@
|
||||
"sentryLabel": "Sentry 日志記錄",
|
||||
"sentryHint": "發送匿名的日志記錄以幫助我們改善 ReVanced Manager",
|
||||
"restartAppForChanges": "重啓應用以套用變更",
|
||||
"deleteKeystoreLabel": "刪除 keystore",
|
||||
"deleteKeystoreHint": "刪除登入程序已用的 keystore",
|
||||
"deletedKeystore": "已刪除 keystore",
|
||||
"regenerateKeystoreLabel": "刪除 keystore",
|
||||
"regenerateKeystoreHint": "刪除登入程序已用的 keystore",
|
||||
"regeneratedKeystore": "已刪除 keystore",
|
||||
"deleteTempDirLabel": "刪除暫時文件",
|
||||
"deleteTempDirHint": "刪除無用暫時文件",
|
||||
"deletedTempDir": "暫時文件已刪除",
|
||||
|
@ -147,9 +147,9 @@
|
||||
"sentryLabel": "輸入記錄",
|
||||
"sentryHint": "傳送匿名記錄以協助我們改進 ReVanced Manager",
|
||||
"restartAppForChanges": "重新啟動應用程式以套用變更",
|
||||
"deleteKeystoreLabel": "刪除金鑰儲存區",
|
||||
"deleteKeystoreHint": "刪除用於登入應用程式的金鑰儲存區",
|
||||
"deletedKeystore": "已刪除金鑰儲存區",
|
||||
"regenerateKeystoreLabel": "刪除金鑰儲存區",
|
||||
"regenerateKeystoreHint": "刪除用於登入應用程式的金鑰儲存區",
|
||||
"regeneratedKeystore": "已刪除金鑰儲存區",
|
||||
"deleteTempDirLabel": "刪除暫存檔案",
|
||||
"deleteTempDirHint": "刪除未使用的暫存檔案",
|
||||
"deletedTempDir": "暫存檔案目錄",
|
||||
|
@ -1 +1 @@
|
||||
Patch your favourite apps, right on your device.
|
||||
Patch your favorite apps, right on your device.
|
||||
|
@ -8,7 +8,6 @@ class Patch {
|
||||
Patch({
|
||||
required this.name,
|
||||
required this.description,
|
||||
required this.version,
|
||||
required this.excluded,
|
||||
required this.dependencies,
|
||||
required this.compatiblePackages,
|
||||
@ -17,7 +16,6 @@ class Patch {
|
||||
factory Patch.fromJson(Map<String, dynamic> json) => _$PatchFromJson(json);
|
||||
final String name;
|
||||
final String description;
|
||||
final String version;
|
||||
final bool excluded;
|
||||
final List<String> dependencies;
|
||||
final List<Package> compatiblePackages;
|
||||
|
@ -1,12 +1,12 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:app_installer/app_installer.dart';
|
||||
import 'package:collection/collection.dart';
|
||||
import 'package:cr_file_saver/file_saver.dart';
|
||||
import 'package:device_apps/device_apps.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:injectable/injectable.dart';
|
||||
import 'package:install_plugin/install_plugin.dart';
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
import 'package:revanced_manager/app/app.locator.dart';
|
||||
import 'package:revanced_manager/models/patch.dart';
|
||||
@ -144,20 +144,6 @@ class PatcherAPI {
|
||||
);
|
||||
}
|
||||
|
||||
Future<String> getOriginalFilePath(String packageName) async {
|
||||
try {
|
||||
final bool hasRootPermissions = await _rootAPI.hasRootPermissions();
|
||||
if (hasRootPermissions) {
|
||||
return await _rootAPI.getOriginalFilePath(packageName);
|
||||
}
|
||||
} on Exception catch (e) {
|
||||
if (kDebugMode) {
|
||||
print(e);
|
||||
}
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
Future<void> runPatcher(
|
||||
String packageName,
|
||||
String apkFilePath,
|
||||
@ -191,10 +177,7 @@ class PatcherAPI {
|
||||
_outFile = File('${workDir.path}/out.apk');
|
||||
final Directory cacheDir = Directory('${workDir.path}/cache');
|
||||
cacheDir.createSync();
|
||||
String originalFilePath = await getOriginalFilePath(packageName);
|
||||
if (originalFilePath.isEmpty) {
|
||||
originalFilePath = apkFilePath;
|
||||
}
|
||||
final String originalFilePath = apkFilePath;
|
||||
try {
|
||||
await patcherChannel.invokeMethod(
|
||||
'runPatcher',
|
||||
@ -232,10 +215,8 @@ class PatcherAPI {
|
||||
);
|
||||
}
|
||||
} else {
|
||||
await AppInstaller.installApk(_outFile!.path);
|
||||
return await DeviceApps.isAppInstalled(
|
||||
patchedApp.packageName,
|
||||
);
|
||||
final install = await InstallPlugin.installApk(_outFile!.path);
|
||||
return install['isSuccess'];
|
||||
}
|
||||
} on Exception catch (e) {
|
||||
if (kDebugMode) {
|
||||
|
@ -73,7 +73,7 @@ class RootAPI {
|
||||
}
|
||||
|
||||
Future<List<String>> getInstalledApps() async {
|
||||
final List<String> apps = List.empty();
|
||||
final List<String> apps = List.empty(growable: true);
|
||||
try {
|
||||
String? res = await Root.exec(
|
||||
cmd: 'ls "$_revancedDirPath"',
|
||||
@ -209,20 +209,6 @@ class RootAPI {
|
||||
return res != null && res.isNotEmpty;
|
||||
}
|
||||
|
||||
Future<String> getOriginalFilePath(String packageName) async {
|
||||
final String originalPath = '$_revancedDirPath/$packageName/original.apk';
|
||||
final String oldOrigPath = '$_revancedOldDirPath/$packageName/original.apk';
|
||||
final bool isInstalled = await isAppInstalled(packageName);
|
||||
if (isInstalled && await isMounted(packageName)) {
|
||||
if (await fileExists(originalPath)) {
|
||||
return originalPath;
|
||||
} else if (await fileExists(oldOrigPath)) {
|
||||
return oldOrigPath;
|
||||
}
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
Future<void> saveOriginalFilePath(
|
||||
String packageName,
|
||||
String originalFilePath,
|
||||
|
@ -88,7 +88,7 @@ class _AppSelectorViewState extends State<AppSelectorView> {
|
||||
),
|
||||
),
|
||||
)
|
||||
: model.apps.isEmpty
|
||||
: model.allApps.isEmpty
|
||||
? const AppSkeletonLoader()
|
||||
: Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 12.0)
|
||||
|
@ -45,9 +45,7 @@ class AppSelectorViewModel extends BaseViewModel {
|
||||
.length
|
||||
.compareTo(_patcherAPI.getFilteredPatches(a.packageName).length),
|
||||
);
|
||||
noApps = apps.isEmpty;
|
||||
getAllApps();
|
||||
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
@ -57,7 +55,7 @@ class AppSelectorViewModel extends BaseViewModel {
|
||||
.toSet()
|
||||
.where((name) => !apps.any((app) => app.packageName == name))
|
||||
.toList();
|
||||
|
||||
noApps = allApps.isEmpty;
|
||||
return allApps;
|
||||
}
|
||||
|
||||
|
@ -1,13 +1,13 @@
|
||||
// ignore_for_file: use_build_context_synchronously
|
||||
import 'dart:async';
|
||||
import 'dart:io';
|
||||
import 'package:app_installer/app_installer.dart';
|
||||
import 'package:cross_connectivity/cross_connectivity.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_i18n/flutter_i18n.dart';
|
||||
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
|
||||
import 'package:injectable/injectable.dart';
|
||||
import 'package:install_plugin/install_plugin.dart';
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
import 'package:revanced_manager/app/app.locator.dart';
|
||||
import 'package:revanced_manager/app/app.router.dart';
|
||||
@ -51,7 +51,7 @@ class HomeViewModel extends BaseViewModel {
|
||||
_toast.showBottom('homeView.installingMessage');
|
||||
final File? managerApk = await _managerAPI.downloadManager();
|
||||
if (managerApk != null) {
|
||||
await AppInstaller.installApk(managerApk.path);
|
||||
await InstallPlugin.installApk(managerApk.path);
|
||||
} else {
|
||||
_toast.showBottom('homeView.errorDownloadMessage');
|
||||
}
|
||||
@ -72,7 +72,7 @@ class HomeViewModel extends BaseViewModel {
|
||||
_toast.showBottom('homeView.installingMessage');
|
||||
final File? managerApk = await _managerAPI.downloadManager();
|
||||
if (managerApk != null) {
|
||||
await AppInstaller.installApk(managerApk.path);
|
||||
await InstallPlugin.installApk(managerApk.path);
|
||||
} else {
|
||||
_toast.showBottom('homeView.errorDownloadMessage');
|
||||
}
|
||||
@ -272,7 +272,7 @@ class HomeViewModel extends BaseViewModel {
|
||||
child: CustomMaterialButton(
|
||||
label: I18nText('updateButton'),
|
||||
onPressed: () async {
|
||||
await AppInstaller.installApk(
|
||||
await InstallPlugin.installApk(
|
||||
downloadedApk!.path,
|
||||
);
|
||||
},
|
||||
@ -318,7 +318,7 @@ class HomeViewModel extends BaseViewModel {
|
||||
// UILocalNotificationDateInterpretation.absoluteTime,
|
||||
// );
|
||||
_toast.showBottom('homeView.installingMessage');
|
||||
await AppInstaller.installApk(managerApk.path);
|
||||
await InstallPlugin.installApk(managerApk.path);
|
||||
} else {
|
||||
_toast.showBottom('homeView.errorDownloadMessage');
|
||||
}
|
||||
|
@ -13,58 +13,68 @@ class NavigationView extends StatelessWidget {
|
||||
return ViewModelBuilder<NavigationViewModel>.reactive(
|
||||
onViewModelReady: (model) => model.initialize(context),
|
||||
viewModelBuilder: () => locator<NavigationViewModel>(),
|
||||
builder: (context, model, child) => Scaffold(
|
||||
body: PageTransitionSwitcher(
|
||||
duration: const Duration(milliseconds: 400),
|
||||
transitionBuilder: (
|
||||
Widget child,
|
||||
Animation<double> animation,
|
||||
Animation<double> secondaryAnimation,
|
||||
) {
|
||||
return FadeThroughTransition(
|
||||
animation: animation,
|
||||
secondaryAnimation: secondaryAnimation,
|
||||
fillColor: Theme.of(context).colorScheme.surface,
|
||||
child: child,
|
||||
);
|
||||
},
|
||||
child: model.getViewForIndex(model.currentIndex),
|
||||
),
|
||||
bottomNavigationBar: NavigationBar(
|
||||
onDestinationSelected: model.setIndex,
|
||||
selectedIndex: model.currentIndex,
|
||||
destinations: <Widget>[
|
||||
NavigationDestination(
|
||||
icon: model.isIndexSelected(0)
|
||||
? const Icon(Icons.dashboard)
|
||||
: const Icon(Icons.dashboard_outlined),
|
||||
label: FlutterI18n.translate(
|
||||
context,
|
||||
'navigationView.dashboardTab',
|
||||
builder: (context, model, child) => WillPopScope(
|
||||
onWillPop: () async {
|
||||
if (model.currentIndex == 0) {
|
||||
return true;
|
||||
} else {
|
||||
model.setIndex(0);
|
||||
return false;
|
||||
}
|
||||
},
|
||||
child: Scaffold(
|
||||
body: PageTransitionSwitcher(
|
||||
duration: const Duration(milliseconds: 400),
|
||||
transitionBuilder: (
|
||||
Widget child,
|
||||
Animation<double> animation,
|
||||
Animation<double> secondaryAnimation,
|
||||
) {
|
||||
return FadeThroughTransition(
|
||||
animation: animation,
|
||||
secondaryAnimation: secondaryAnimation,
|
||||
fillColor: Theme.of(context).colorScheme.surface,
|
||||
child: child,
|
||||
);
|
||||
},
|
||||
child: model.getViewForIndex(model.currentIndex),
|
||||
),
|
||||
bottomNavigationBar: NavigationBar(
|
||||
onDestinationSelected: model.setIndex,
|
||||
selectedIndex: model.currentIndex,
|
||||
destinations: <Widget>[
|
||||
NavigationDestination(
|
||||
icon: model.isIndexSelected(0)
|
||||
? const Icon(Icons.dashboard)
|
||||
: const Icon(Icons.dashboard_outlined),
|
||||
label: FlutterI18n.translate(
|
||||
context,
|
||||
'navigationView.dashboardTab',
|
||||
),
|
||||
tooltip: '',
|
||||
),
|
||||
tooltip: '',
|
||||
),
|
||||
NavigationDestination(
|
||||
icon: model.isIndexSelected(1)
|
||||
? const Icon(Icons.build)
|
||||
: const Icon(Icons.build_outlined),
|
||||
label: FlutterI18n.translate(
|
||||
context,
|
||||
'navigationView.patcherTab',
|
||||
NavigationDestination(
|
||||
icon: model.isIndexSelected(1)
|
||||
? const Icon(Icons.build)
|
||||
: const Icon(Icons.build_outlined),
|
||||
label: FlutterI18n.translate(
|
||||
context,
|
||||
'navigationView.patcherTab',
|
||||
),
|
||||
tooltip: '',
|
||||
),
|
||||
tooltip: '',
|
||||
),
|
||||
NavigationDestination(
|
||||
icon: model.isIndexSelected(2)
|
||||
? const Icon(Icons.settings)
|
||||
: const Icon(Icons.settings_outlined),
|
||||
label: FlutterI18n.translate(
|
||||
context,
|
||||
'navigationView.settingsTab',
|
||||
NavigationDestination(
|
||||
icon: model.isIndexSelected(2)
|
||||
? const Icon(Icons.settings)
|
||||
: const Icon(Icons.settings_outlined),
|
||||
label: FlutterI18n.translate(
|
||||
context,
|
||||
'navigationView.settingsTab',
|
||||
),
|
||||
tooltip: '',
|
||||
),
|
||||
tooltip: '',
|
||||
),
|
||||
],
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
@ -166,7 +166,6 @@ class _PatchesSelectorViewState extends State<PatchesSelectorView> {
|
||||
(patch) => PatchItem(
|
||||
name: patch.name,
|
||||
simpleName: patch.getSimpleName(),
|
||||
version: patch.version,
|
||||
description: patch.description,
|
||||
packageVersion: model.getAppVersion(),
|
||||
supportedPackageVersions:
|
||||
|
@ -93,7 +93,9 @@ class SManageApiUrl extends BaseViewModel {
|
||||
onPressed: () {
|
||||
_managerAPI.setApiUrl('');
|
||||
_toast.showBottom('settingsView.restartAppForChanges');
|
||||
Navigator.of(context).pop();
|
||||
Navigator.of(context)
|
||||
..pop()
|
||||
..pop();
|
||||
},
|
||||
)
|
||||
],
|
||||
|
@ -48,7 +48,7 @@ class SettingsViewModel extends BaseViewModel {
|
||||
|
||||
void deleteKeystore() {
|
||||
_managerAPI.deleteKeystore();
|
||||
_toast.showBottom('settingsView.deletedKeystore');
|
||||
_toast.showBottom('settingsView.regeneratedKeystore');
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
|
@ -84,12 +84,16 @@ class _InstalledAppItemState extends State<InstalledAppItem> {
|
||||
},
|
||||
),
|
||||
const SizedBox(width: 4),
|
||||
Text(
|
||||
widget.patchesCount == 1
|
||||
? '• ${widget.patchesCount} patch'
|
||||
: '• ${widget.patchesCount} patches',
|
||||
style: TextStyle(
|
||||
color: Theme.of(context).colorScheme.secondary,
|
||||
Flexible(
|
||||
child: Text(
|
||||
widget.patchesCount == 1
|
||||
? '• ${widget.patchesCount} patch'
|
||||
: '• ${widget.patchesCount} patches',
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: TextStyle(
|
||||
color: Theme.of(context).colorScheme.secondary,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
|
@ -78,12 +78,16 @@ class _NotInstalledAppItem extends State<NotInstalledAppItem> {
|
||||
},
|
||||
),
|
||||
const SizedBox(width: 4),
|
||||
Text(
|
||||
widget.patchesCount == 1
|
||||
? '• ${widget.patchesCount} patch'
|
||||
: '• ${widget.patchesCount} patches',
|
||||
style: TextStyle(
|
||||
color: Theme.of(context).colorScheme.secondary,
|
||||
Flexible(
|
||||
child: Text(
|
||||
widget.patchesCount == 1
|
||||
? '• ${widget.patchesCount} patch'
|
||||
: '• ${widget.patchesCount} patches',
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: TextStyle(
|
||||
color: Theme.of(context).colorScheme.secondary,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
|
@ -1,61 +1,96 @@
|
||||
import 'package:device_apps/device_apps.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_i18n/flutter_i18n.dart';
|
||||
import 'package:revanced_manager/app/app.locator.dart';
|
||||
import 'package:revanced_manager/models/patched_application.dart';
|
||||
import 'package:revanced_manager/services/manager_api.dart';
|
||||
import 'package:revanced_manager/ui/views/home/home_viewmodel.dart';
|
||||
import 'package:revanced_manager/ui/widgets/shared/application_item.dart';
|
||||
import 'package:revanced_manager/ui/widgets/shared/custom_card.dart';
|
||||
|
||||
//ignore: must_be_immutable
|
||||
class InstalledAppsCard extends StatelessWidget {
|
||||
InstalledAppsCard({Key? key}) : super(key: key);
|
||||
|
||||
final List<PatchedApplication> apps =
|
||||
locator<HomeViewModel>().patchedInstalledApps;
|
||||
List<PatchedApplication> apps = locator<HomeViewModel>().patchedInstalledApps;
|
||||
final ManagerAPI _managerAPI = locator<ManagerAPI>();
|
||||
List<PatchedApplication> patchedApps = [];
|
||||
|
||||
Future _getApps() async {
|
||||
if (apps.isNotEmpty) {
|
||||
patchedApps = [...apps];
|
||||
for (final element in apps) {
|
||||
await DeviceApps.getApp(element.packageName).then((value) {
|
||||
if (element.version != value?.versionName) {
|
||||
patchedApps.remove(element);
|
||||
}
|
||||
});
|
||||
}
|
||||
if (apps.length != patchedApps.length) {
|
||||
await _managerAPI.setPatchedApps(patchedApps);
|
||||
apps.clear();
|
||||
apps = [...patchedApps];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return apps.isEmpty
|
||||
? CustomCard(
|
||||
child: Center(
|
||||
child: Column(
|
||||
children: <Widget>[
|
||||
Icon(
|
||||
size: 40,
|
||||
Icons.file_download_off,
|
||||
color: Theme.of(context).colorScheme.secondary,
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
I18nText(
|
||||
'homeView.noInstallations',
|
||||
child: Text(
|
||||
'',
|
||||
textAlign: TextAlign.center,
|
||||
style: Theme.of(context).textTheme.titleMedium!.copyWith(
|
||||
color: Theme.of(context).colorScheme.secondary,
|
||||
return FutureBuilder(
|
||||
future: _getApps(),
|
||||
builder: (context, snapshot) {
|
||||
if (snapshot.connectionState == ConnectionState.done) {
|
||||
return apps.isEmpty
|
||||
? CustomCard(
|
||||
child: Center(
|
||||
child: Column(
|
||||
children: <Widget>[
|
||||
Icon(
|
||||
size: 40,
|
||||
Icons.file_download_off,
|
||||
color: Theme.of(context).colorScheme.secondary,
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
I18nText(
|
||||
'homeView.noInstallations',
|
||||
child: Text(
|
||||
'',
|
||||
textAlign: TextAlign.center,
|
||||
style: Theme.of(context)
|
||||
.textTheme
|
||||
.titleMedium!
|
||||
.copyWith(
|
||||
color:
|
||||
Theme.of(context).colorScheme.secondary,
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
)
|
||||
: ListView(
|
||||
shrinkWrap: true,
|
||||
padding: EdgeInsets.zero,
|
||||
physics: const NeverScrollableScrollPhysics(),
|
||||
children: apps
|
||||
.map(
|
||||
(app) => ApplicationItem(
|
||||
icon: app.icon,
|
||||
name: app.name,
|
||||
patchDate: app.patchDate,
|
||||
changelog: app.changelog,
|
||||
isUpdatableApp: false,
|
||||
onPressed: () =>
|
||||
locator<HomeViewModel>().navigateToAppInfo(app),
|
||||
),
|
||||
)
|
||||
.toList(),
|
||||
);
|
||||
: ListView(
|
||||
shrinkWrap: true,
|
||||
padding: EdgeInsets.zero,
|
||||
physics: const NeverScrollableScrollPhysics(),
|
||||
children: apps
|
||||
.map(
|
||||
(app) => ApplicationItem(
|
||||
icon: app.icon,
|
||||
name: app.name,
|
||||
patchDate: app.patchDate,
|
||||
changelog: app.changelog,
|
||||
isUpdatableApp: false,
|
||||
onPressed: () =>
|
||||
locator<HomeViewModel>().navigateToAppInfo(app),
|
||||
),
|
||||
)
|
||||
.toList(),
|
||||
);
|
||||
} else {
|
||||
return const Center(child: CircularProgressIndicator());
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -59,7 +59,7 @@ class PatchSelectorCard extends StatelessWidget {
|
||||
String _getPatchesSelection() {
|
||||
String text = '';
|
||||
for (final Patch p in locator<PatcherViewModel>().selectedPatches) {
|
||||
text += '\u2022 ${p.getSimpleName()} (v${p.version})\n';
|
||||
text += '\u2022 ${p.getSimpleName()}\n';
|
||||
}
|
||||
return text.substring(0, text.length - 1);
|
||||
}
|
||||
|
@ -14,7 +14,6 @@ class PatchItem extends StatefulWidget {
|
||||
required this.name,
|
||||
required this.simpleName,
|
||||
required this.description,
|
||||
required this.version,
|
||||
required this.packageVersion,
|
||||
required this.supportedPackageVersions,
|
||||
required this.isUnsupported,
|
||||
@ -25,7 +24,6 @@ class PatchItem extends StatefulWidget {
|
||||
final String name;
|
||||
final String simpleName;
|
||||
final String description;
|
||||
final String version;
|
||||
final String packageVersion;
|
||||
final List<String> supportedPackageVersions;
|
||||
final bool isUnsupported;
|
||||
@ -90,14 +88,6 @@ class _PatchItemState extends State<PatchItem> {
|
||||
),
|
||||
],
|
||||
),
|
||||
const SizedBox(height: 1),
|
||||
Text(
|
||||
widget.version,
|
||||
style: TextStyle(
|
||||
fontSize: 14,
|
||||
color: Theme.of(context).colorScheme.secondary,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 4),
|
||||
Text(
|
||||
widget.description,
|
||||
|
@ -28,7 +28,7 @@ class SAdvancedSection extends StatelessWidget {
|
||||
ListTile(
|
||||
contentPadding: const EdgeInsets.symmetric(horizontal: 20.0),
|
||||
title: I18nText(
|
||||
'settingsView.deleteKeystoreLabel',
|
||||
'settingsView.regenerateKeystoreLabel',
|
||||
child: const Text(
|
||||
'',
|
||||
style: TextStyle(
|
||||
@ -37,7 +37,7 @@ class SAdvancedSection extends StatelessWidget {
|
||||
),
|
||||
),
|
||||
),
|
||||
subtitle: I18nText('settingsView.deleteKeystoreHint'),
|
||||
subtitle: I18nText('settingsView.regenerateKeystoreHint'),
|
||||
onTap: () => _showDeleteKeystoreDialog(context),
|
||||
),
|
||||
ListTile(
|
||||
@ -78,11 +78,9 @@ class SAdvancedSection extends StatelessWidget {
|
||||
return showDialog(
|
||||
context: context,
|
||||
builder: (context) => AlertDialog(
|
||||
title: I18nText('warning'),
|
||||
title: I18nText('settingsView.regenerateKeystoreDialogTitle'),
|
||||
backgroundColor: Theme.of(context).colorScheme.secondaryContainer,
|
||||
content: I18nText(
|
||||
'settingsView.deleteKeystoreDialogText',
|
||||
),
|
||||
content: I18nText('settingsView.regenerateKeystoreDialogText'),
|
||||
actions: <Widget>[
|
||||
CustomMaterialButton(
|
||||
isFilled: false,
|
||||
|
@ -73,10 +73,12 @@ class SExportSection extends StatelessWidget {
|
||||
),
|
||||
),
|
||||
subtitle: I18nText('settingsView.importKeystoreHint'),
|
||||
onTap: () {
|
||||
_settingsViewModel.importKeystore();
|
||||
onTap: () async{
|
||||
await _settingsViewModel.importKeystore();
|
||||
final sManageKeystorePassword = SManageKeystorePassword();
|
||||
sManageKeystorePassword.showKeystoreDialog(context);
|
||||
if(context.mounted){
|
||||
sManageKeystorePassword.showKeystoreDialog(context);
|
||||
}
|
||||
},
|
||||
),
|
||||
ListTile(
|
||||
@ -102,7 +104,7 @@ class SExportSection extends StatelessWidget {
|
||||
return showDialog(
|
||||
context: context,
|
||||
builder: (context) => AlertDialog(
|
||||
title: I18nText('warning'),
|
||||
title: I18nText('settingsView.resetStoredPatchesDialogTitle'),
|
||||
backgroundColor: Theme.of(context).colorScheme.secondaryContainer,
|
||||
content: I18nText(
|
||||
'settingsView.resetStoredPatchesDialogText',
|
||||
|
10
pubspec.yaml
10
pubspec.yaml
@ -1,17 +1,16 @@
|
||||
name: revanced_manager
|
||||
description: Patch your favourite apps, right on your device.
|
||||
description: Patch your favorite apps, right on your device.
|
||||
homepage: https://github.com/revanced/revanced-manager
|
||||
|
||||
publish_to: 'none'
|
||||
|
||||
version: 1.4.0+100400000
|
||||
version: 1.5.1+100400005
|
||||
|
||||
environment:
|
||||
sdk: '>=3.0.0 <4.0.0'
|
||||
|
||||
dependencies:
|
||||
animations: ^2.0.7
|
||||
app_installer: ^1.1.0
|
||||
collection: ^1.17.0
|
||||
cross_connectivity: ^3.0.5
|
||||
cr_file_saver:
|
||||
@ -59,8 +58,8 @@ dependencies:
|
||||
pull_to_refresh: ^2.0.0
|
||||
root:
|
||||
git:
|
||||
url: https://github.com/gokul1630/root
|
||||
ref: main
|
||||
url: https://github.com/EvadeMaster/root
|
||||
ref: 82803aa40f63cddff81c3e4d27ce8ce3e7c83f60
|
||||
share_extend: ^2.0.0
|
||||
shared_preferences: ^2.1.0
|
||||
skeletons: ^0.0.3
|
||||
@ -75,6 +74,7 @@ dependencies:
|
||||
flutter_dotenv: ^5.0.2
|
||||
flutter_markdown: ^0.6.14
|
||||
dio_cache_interceptor: ^3.4.0
|
||||
install_plugin: ^2.1.0
|
||||
|
||||
dev_dependencies:
|
||||
json_serializable: ^6.6.1
|
||||
|
Reference in New Issue
Block a user