Compare commits

..

15 Commits

Author SHA1 Message Date
a2f6c3836d Cherrypick!!!
Signed-off-by: Pun Butrach <pun.butrach@gmail.com>
2025-06-10 21:03:27 +07:00
73cb27011b fix: Nearly all cases of rare GPU renderer issues, and allow building on manager again
Signed-off-by: Pun Butrach <pun.butrach@gmail.com>
2025-06-10 20:55:47 +07:00
83fc7f131a chore: Remove obsolete deleteLastPatchedApp call 2025-06-02 17:12:50 +03:00
8e4a9088ea ci: Use install instead of clean install for NPM dependencies
Co-authored-by: Pun Butrach <pun.butrach@gmail.com>
2025-06-02 16:05:59 +02:00
7ee2b1a026 chore: Sync translations (#2522)
Signed-off-by: Pun Butrach <pun.butrach@gmail.com>
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Pun Butrach <pun.butrach@gmail.com>
2025-05-31 15:36:42 +07:00
40c99ab4dc ci: Set missing translation actor/email for commit
Signed-off-by: Pun Butrach <pun.butrach@gmail.com>
2025-05-31 15:18:37 +07:00
1752fae9d9 chore: Better ignore rules
Based on https://github.com/github/gitignore/blob/main/Flutter.gitignore

Signed-off-by: Pun Butrach <pun.butrach@gmail.com>
2025-05-31 15:12:26 +07:00
d264a2a363 build: Support Flutter v3.32
Signed-off-by: Pun Butrach <pun.butrach@gmail.com>
2025-05-31 15:11:49 +07:00
a5e909cfc8 fix: Obscure Flutter Impeller renderer bugs
This is workaround to entirely disabling Flutter Impeller in favour of Skia.

Signed-off-by: Pun Butrach <pun.butrach@gmail.com>
2025-05-31 14:57:21 +07:00
bdb0317a9e fix: "Save patched app" attempts to copy APK when patching fails (#2565) 2025-05-31 14:22:55 +07:00
b0464408f1 ci: Run Crowdin Cron task on dev branch (#2543) 2025-05-12 14:51:42 +02:00
767fa77436 chore(release): 1.25.0-dev.1 [skip ci]
# [1.25.0-dev.1](https://github.com/ReVanced/revanced-manager/compare/v1.24.1-dev.5...v1.25.0-dev.1) (2025-05-05)

### Bug Fixes

* Fix installation being cancelled at installation by not prematurely deleting patched APK  ([#2490](https://github.com/ReVanced/revanced-manager/issues/2490)) ([dedcb3c](dedcb3c51a))
* Use device locale for app language (Default to English) ([#2488](https://github.com/ReVanced/revanced-manager/issues/2488)) ([3074766](3074766ff2))

### Features

* Add toggle to use pre-releases ([#2485](https://github.com/ReVanced/revanced-manager/issues/2485)) ([89b48ce](89b48cebcf))
2025-05-05 14:15:17 +00:00
89b48cebcf feat: Add toggle to use pre-releases (#2485)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2025-05-05 16:00:41 +02:00
dedcb3c51a fix: Fix installation being cancelled at installation by not prematurely deleting patched APK (#2490) 2025-05-05 15:56:28 +02:00
3074766ff2 fix: Use device locale for app language (Default to English) (#2488) 2025-05-05 15:54:42 +02:00
43 changed files with 953 additions and 759 deletions

View File

@ -39,10 +39,11 @@ jobs:
uses: subosito/flutter-action@v2
with:
channel: stable
flutter-version: 3.29.x
cache: true
- name: Cache Gradle
uses: burrunan/gradle-cache-action@v1
uses: burrunan/gradle-cache-action@v3
with:
build-root-directory: ${{ github.workspace }}/android

View File

@ -37,15 +37,16 @@ jobs:
uses: subosito/flutter-action@v2
with:
channel: stable
flutter-version: 3.29.x
cache: true
- name: Cache Gradle
uses: burrunan/gradle-cache-action@v1
uses: burrunan/gradle-cache-action@v3
with:
build-root-directory: ${{ github.workspace }}/android
- name: Install dependencies
run: npm ci
run: npm i
- name: Get dependencies
run: flutter pub get

View File

@ -22,11 +22,15 @@ jobs:
- name: Checkout
uses: actions/checkout@v4
with:
ref: dev
fetch-depth: 0
clean: true
- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
channel: stable
flutter-version: 3.29.x
cache: true
- name: Sync translations from Crowdin
@ -37,6 +41,7 @@ jobs:
upload_translations: false
download_translations: true
localization_branch_name: feat/translations
skip_ref_checkout: true
create_pull_request: true
pull_request_title: "chore: Sync translations"
pull_request_body: "Sync translations from [crowdin.com/project/revanced](https://crowdin.com/project/revanced)"
@ -70,6 +75,8 @@ jobs:
- name: Commit translations
run: |
git config --global user.name 'github-actions[bot]'
git config --global user.email 'github-actions[bot]@users.noreply.github.com'
sudo chown -R $USER:$USER .git
git commit -m "chore: Remove empty values from JSON" assets/i18n/*.i18n.json
git push origin HEAD:feat/translations

45
.gitignore vendored
View File

@ -1,14 +1,14 @@
# Miscellaneous
*.class
*.lock
*.log
*.pyc
*.swp
.DS_Store
.atom/
.buildlog/
.history
.svn/
migrate_working_dir/
# packages file containing multi-root paths
.packages.generated
# IntelliJ related
*.iml
@ -16,32 +16,41 @@ migrate_working_dir/
*.iws
.idea/
# The .vscode folder contains launch configuration and tasks you configure in
# VS Code which you may wish to be included in version control, so this line
# is commented out by default.
#.vscode/
# Flutter/Dart/Pub related
**/doc/api/
**/ios/Flutter/.last_build_id
.dart_tool/
.flutter-plugins
.flutter-plugins-dependencies
.pub-cache/
**/generated_plugin_registrant.dart
.packages
.pub-preload-cache/
.pub/
/build/
build/
flutter_*.png
linked_*.ds
unlinked.ds
unlinked_spec.ds
# Symbolication related
# Android related
**/android/**/gradle-wrapper.jar
.gradle/
**/android/captures/
**/android/gradlew
**/android/gradlew.bat
**/android/local.properties
**/android/**/GeneratedPluginRegistrant.java
**/android/key.properties
*.jks
# Coverage
coverage/
# Symbols
app.*.symbols
# Obfuscation related
app.*.map.json
# Android Studio will place build artifacts here
/android/app/debug
/android/app/profile
/android/app/release
# Generated files
android/app/.cxx
**/*.g.dart

View File

@ -39,6 +39,9 @@
<meta-data
android:name="io.flutter.embedding.android.NormalTheme"
android:resource="@style/NormalTheme" />
<meta-data
android:name="io.flutter.embedding.android.EnableImpeller"
android:value="false" />
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />

View File

@ -180,6 +180,9 @@
"disablePatchesSelectionWarningText": "أنت على وشك تعطيل تغيير تحديد التعديلات.\nستتم استعادة التحديد الافتراضي للتعديلات.\n\nهل تريد التعطيل على أي حال؟",
"autoUpdatePatchesLabel": "تحديث التعديلات تلقائيًا",
"autoUpdatePatchesHint": "تحديث التعديلات تلقائيًا إلى الإصدار الأحدث",
"usePrereleasesLabel": "استخدام الإصدارات الأولية",
"usePrereleasesHint": "استخدام إصدارات ما قبل الإصدار من ReVanced Manager و ReVanced Patches",
"usePrereleasesWarningText": "قد يتسبب استخدام الإصدارات الأولية في حدوث مشكلات غير متوقعة.\n\nهل تريد التمكين على أي حال؟",
"showUpdateDialogLabel": "عرض مربع حوار التحديث",
"showUpdateDialogHint": "عرض مربع حوار عندما يتوفر تحديث جديد",
"universalPatchesLabel": "عرض التعديلات العامة",

View File

@ -34,7 +34,25 @@
"updatePatchesSheetTitle": "ReVanced পেট্‌চবোৰ আপডে’ট কৰক",
"updateChangelogTitle": "সলনি-পঞ্জী",
"updateDialogText": "${file}-ৰ এটা নতুন আপডে’ট উপলব্ধ।\n\nবৰ্তমানে ইনষ্টল কৰা সংস্কৰণটো হৈছে ${version}।",
"downloadConsentDialogTitle": "প্ৰয়োজনীয় ফাইলবোৰ ডাউনল’ড কৰিবনে?"
"downloadConsentDialogTitle": "প্ৰয়োজনীয় ফাইলবোৰ ডাউনল’ড কৰিবনে?",
"downloadConsentDialogText": "সঠিকভাৱে কাম কৰিবলৈ ReVanced Manager-এ প্ৰয়োজনীয় ফাইলবোৰ ডাউনল'ড কৰিব লাগিব।",
"downloadConsentDialogText2": "ই আপোনাক ${url}-ৰ সৈতে সংযুক্ত কৰিব।",
"downloadingMessage": "আপডে’ট ডাউনল’ড হৈ আছে...",
"downloadedMessage": "আপডে’ট ডাউনল’ড কৰা হ’ল",
"installingMessage": "আপডে’ট ইনষ্টল হৈ আছে...",
"errorDownloadMessage": "আপডে’ট ডাউনল’ড কৰিব পৰা নগ’ল"
},
"applicationItem": {
"infoButton": "তথ্য"
},
"latestCommitCard": {
"timeagoLabel": "${time} আগত"
},
"appSelectorCard": {
"widgetTitle": "এটা এপ বাছনি কৰক",
"widgetTitleSelected": "বাছনি কৰা এপ",
"widgetSubtitle": "কোনো এপ বাছনি কৰা নাই",
"noAppsLabel": "কোনো এপ্লিকেশ্যন পোৱা নগ’ল"
},
"patchOptionsView": {
"saveOptions": "ছে’ভ কৰক",
@ -50,9 +68,28 @@
"darkThemeLabel": "গাঢ়",
"dynamicThemeLabel": "মেটেৰিয়েল ইউ",
"languageLabel": "ভাষা",
"languageUpdated": "ভাষা আপডে’ট কৰা হ’ল"
"languageUpdated": "ভাষা আপডে’ট কৰা হ’ল",
"importKeystoreLabel": "কীষ্ট’ৰ ইম্প’ৰ্ট কৰক",
"importKeystoreHint": "এপবোৰত চহী কৰিবলৈ ব্যৱহাৰ কৰা কীষ্ট’ৰ এটা ইম্প’ৰ্ট কৰক",
"importedKeystore": "কীষ্ট’ৰ ইম্প’ৰ্ট কৰা হ’ল",
"selectKeystorePassword": "কীষ্ট’ৰৰ পাছৱৰ্ড",
"selectKeystorePasswordHint": "এপবোৰত চহী কৰিবলৈ ব্যৱহাৰ কৰা কীষ্ট’ৰৰ পাছৱৰ্ড বাছনি কৰক",
"jsonSelectorErrorMessage": "বাছনি কৰা JSON ফাইলটো ব্যৱহাৰ কৰিব পৰা নগ’ল",
"keystoreSelectorErrorMessage": "বাছনি কৰা কীষ্ট’ৰ ফাইলটো ব্যৱহাৰ কৰিব পৰা নগ’ল"
},
"appInfoView": {
"widgetTitle": "এপৰ তথ্য",
"openButton": "খোলক",
"installButton": "ইনষ্টল কৰক",
"uninstallButton": "আনইনষ্টল কৰক",
"unmountButton": "আনমাউণ্ট কৰক",
"exportButton": "এক্সপ’ৰ্ট কৰক",
"deleteButton": "মচক",
"rootDialogTitle": "ত্ৰুটি",
"lastPatchedAppDescription": "এইটো শেষবাৰৰ বাবে পেট্‌চ কৰা এপটোৰ বেকআপ।",
"unmountDialogText": "আপুনি এই এপটো আনমাউণ্ট কৰিব বিচৰাটো নিশ্চিতনে?",
"uninstallDialogText": "আপুনি এই এপটো আনইনষ্টল কৰিব বিচৰাটো নিশ্চিতনে?",
"rootDialogText": "এপটো ছুপাৰইউজাৰৰ অনুমতিৰে ইনষ্টল কৰা হৈছে, কিন্তু বৰ্তমান ReVanced Manager-ৰ কোনো অনুমতি নাই।\nঅনুগ্ৰহ কৰি প্ৰথমে ছুপাৰইউজাৰৰ অনুমতি দিয়ক।",
"removeAppDialogTitle": "এপ মচিবনে?",
"removeAppDialogText": "আপুনি এই বেকআপ মচি পেলাব বিচৰাটো নিশ্চিতনে?",
"packageNameLabel": "পেকেজৰ নাম",
@ -75,14 +112,24 @@
"mount_missing_installation": "ইনষ্টলেশ্যন পোৱা নগ’ল",
"status_failure_blocked": "ইনষ্টলেশ্যন অৱৰুদ্ধ",
"install_failed_verification_failure": "ভেৰিফিকেশ্যন বিফল",
"status_failure_invalid": "ইনষ্টলেশ্যন অবৈধ",
"install_failed_version_downgrade": "ডাউনগ্ৰে’ড কৰিব নোৱাৰি",
"status_failure_conflict": "ইনষ্টলেশ্যনৰ সংঘাত",
"status_failure_storage": "ইনষ্টলেশ্যন ষ্ট’ৰেজৰ সমস্যা",
"status_failure_incompatible": "ইনষ্টলেশ্যন নিমিলে",
"status_failure_timeout": "ইনষ্টলেশ্যনৰ সময় উকলিল",
"status_unknown": "ইনষ্টলেশ্যন বিফল",
"mount_version_mismatch_description": "ইনষ্টল কৰা এপটো পেট্‌চ কৰা এপতকৈ বেলেগ সংস্কৰণ হোৱাৰ বাবে ইনষ্টলেশ্যন বিফল হ’ল।\n\nআপুনি মাউণ্ট কৰা এপটোৰ সংস্কৰণ ইনষ্টল কৰি আকৌ চেষ্টা কৰক।",
"mount_no_root_description": "ৰুট এক্সেছ নিদিয়াৰ বাবে ইনষ্টলেশ্যন বিফল হ’ল।\n\nReVanced Manager-ক ৰুট এক্সেছ দি আকৌ চেষ্টা কৰক।",
"mount_missing_installation_description": "ওপৰত মাউণ্ট কৰিব পৰাকৈ পেট্‌চ নকৰা এপটো এই ডিভাইচত ইনষ্টল হৈ নথকাৰ বাবে ইনষ্টলেশ্যন বিফল হ’ল।\n\nমাউণ্ট কৰাৰ আগত পেট্‌চ নকৰা এপটো ইনষ্টল কৰি আকৌ চেষ্টা কৰক।",
"status_failure_timeout_description": "ইনষ্টলেশ্যন শেষ হ’বলৈ বহুত সময় লাগিল।\n\nআপুনি আকৌ চেষ্টা কৰিব বিচাৰেনে?",
"status_failure_storage_description": "অপৰ্যাপ্ত ষ্ট’ৰে’জৰ বাবে ইনষ্টলেশ্যন বিফল হ’ল।\n\nঅলপ ঠাই খালী কৰি আকৌ চেষ্টা কৰক।",
"status_failure_invalid_description": "পেট্‌চ কৰা এপটো অবৈধ হোৱাৰ বাবে ইনষ্টলেশ্যন বিফল হ’ল।\n\nএপটো আনইনষ্টল কৰি আকৌ চেষ্টা কৰিবনে?",
"status_failure_incompatible_description": "এই ডিভাইচৰ সৈতে এপটো সংগতিপূৰ্ণ নহয়।\n\nএই ডিভাইচটোৱে ছাপ’ৰ্ট কৰা এটা APK ব্যৱহাৰ কৰি আকৌ চেষ্টা কৰক।",
"status_failure_conflict_description": "এপটোৰ এটা মজুত থকা ইনষ্টলেশ্যনৰ ফলত ইনষ্টলেশ্যনত বাধা আহিছিল।\n\n ইনষ্টল কৰা এপটো আনইনষ্টল কৰি পুনৰ চেষ্টা কৰিবনে?",
"status_failure_blocked_description": "ইনষ্টলেশ্যনটো ${packageName}-ৰ দ্বাৰা অৱৰোধ কৰা হৈছে।\n\nআপোনাৰ সুৰক্ষা-সম্বন্ধীয় ছেটিংছ মিলাই লৈ পুনৰ চেষ্টা কৰক।",
"install_failed_verification_failure_description": "ভেৰিফিকেশ্যন-সম্বন্ধীয় সমস্যা এটাৰ কাৰণে ইনষ্টলেশ্যন বিফল হ’ল।\n\nআপোনাৰ সুৰক্ষা-সম্বন্ধীয় ছেটিংছ মিলাই লৈ পুনৰ চেষ্টা কৰক।"
"install_failed_verification_failure_description": "ভেৰিফিকেশ্যন-সম্বন্ধীয় সমস্যা এটাৰ কাৰণে ইনষ্টলেশ্যন বিফল হ’ল।\n\nআপোনাৰ সুৰক্ষা-সম্বন্ধীয় ছেটিংছ মিলাই লৈ পুনৰ চেষ্টা কৰক।",
"install_failed_version_downgrade_description": "পেট্‌চ কৰা এপটো ইনষ্টল কৰা এপতকৈ আগৰ সংস্কৰণ হোৱাৰ বাবে ইনষ্টলেশ্যন বিফল হ’ল।\n\nএপটো আনইনষ্টল কৰি আকৌ চেষ্টা কৰিবনে?",
"status_unknown_description": "অজ্ঞাত কাৰণত ইনষ্টলেশ্যন বিফল হ’ল। অনুগ্ৰহ কৰি আকৌ চেষ্টা কৰক।"
}
}

View File

@ -180,6 +180,9 @@
"disablePatchesSelectionWarningText": "Yamaq seçimi dəyişdirilməsini qapatmaq üzrəsiniz.\nİlkin yamaq seçimi bərpa ediləcək.\n\nYenə də qapadılsın?",
"autoUpdatePatchesLabel": "Yamaqları avtomatik yenilə",
"autoUpdatePatchesHint": "Yamaqları son versiyaya avtomatik yenilə",
"usePrereleasesLabel": "İlkin buraxılışları istifadə et",
"usePrereleasesHint": "ReVanced Manager və ReVanced Patches-in buraxılışdan əvvəlki versiyaların istifadə et",
"usePrereleasesWarningText": "İlkin buraxılış versiyaların istifadə gözlənilməz problemlərə səbəb ola bilər.\n\nYenə də aktiv edilsin?",
"showUpdateDialogLabel": "Yenilənmə dialoqunu göstər",
"showUpdateDialogHint": "Təzə yenilənmə mövcud olduqda dialoq pəncərəsi göstər",
"universalPatchesLabel": "Ümumi yamaqları göstər",

View File

@ -180,6 +180,7 @@
"disablePatchesSelectionWarningText": "আপনি নির্বাচিত প্যাচ পরিবর্তনকে নিষ্ক্রিয় করতে যাচ্ছেন।\nপূর্বনির্ধারিত নির্বাচিত প্যাচসমূহ ফিরিয়ে আনা হবে।\n\nযেকোন ভাবে নিষ্ক্রিয় করতে চান?",
"autoUpdatePatchesLabel": "প্যাচসমূহ স্বয়ংক্রিয়ভাবে আপডেট করুন",
"autoUpdatePatchesHint": "প্যাচসমূহ স্বয়ংক্রিয়ভাবে সর্বশেষ সংস্করণে আপডেট হবে",
"usePrereleasesLabel": "প্রি-রিলিজ ব্যবহার করুন",
"showUpdateDialogLabel": "হালনাগাদ ডায়ালগ দেখান",
"showUpdateDialogHint": "যখন হালনাগাদ উপলব্ধ থাকবে তখন একটি ডায়ালগ দেখান",
"universalPatchesLabel": "বৈশ্বিক প্যাচসমূহ দেখান",

View File

@ -180,6 +180,9 @@
"disablePatchesSelectionWarningText": "Πρόκειται να απενεργοποιήσετε τη δυνατότητα αλλαγής των επιλογών τροποποιήσεων.\nΟι προεπιλεγμένες επιλογές τροποποιήσεων θα επαναφερθούν.\n\nΑπενεργοποίηση παρόλα αυτά;",
"autoUpdatePatchesLabel": "Αυτόματες ενημερώσεις τροποποιήσεων",
"autoUpdatePatchesHint": "Αυτόματη ενημέρωση τροποποιήσεων στην τελευταία έκδοση",
"usePrereleasesLabel": "Χρήση πρώιμων εκδόσεων",
"usePrereleasesHint": "Χρήση των πρώιμων εκδόσεων του ReVanced Manager και των τροποποιήσεων ReVanced",
"usePrereleasesWarningText": "Η χρήση των πρώιμων εκδόσεων ενδέχεται να προκαλέσει μη αναμενόμενα προβλήματα.\n\nΕνεργοποίηση ούτως ή άλλως;",
"showUpdateDialogLabel": "Εμφάνιση προτροπής για ενημερώσεις",
"showUpdateDialogHint": "Εμφάνιση ειδοποίησης όταν είναι διαθέσιμη κάποια νέα ενημέρωση",
"universalPatchesLabel": "Εμφάνιση γενικευμένων τροποποιήσεων",

View File

@ -180,6 +180,9 @@
"disablePatchesSelectionWarningText": "You are about to disable changing the selection of patches.\nThe default selection of patches will be restored.\n\nDisable anyways?",
"autoUpdatePatchesLabel": "Auto update patches",
"autoUpdatePatchesHint": "Automatically update patches to the latest version",
"usePrereleasesLabel": "Use pre-releases",
"usePrereleasesHint": "Use pre-release versions of ReVanced Manager and ReVanced Patches",
"usePrereleasesWarningText": "Using pre-release versions may cause unexpected issues.\n\nEnable anyways?",
"showUpdateDialogLabel": "Show update dialog",
"showUpdateDialogHint": "Show a dialog when a new update is available",
"universalPatchesLabel": "Show universal patches",

View File

@ -180,6 +180,8 @@
"disablePatchesSelectionWarningText": "Estás a punto de desactivar cambiar la selección de parches.\nLa selección predeterminada de parches se restaurará.\n\n¿Deshabilitar de todos modos?",
"autoUpdatePatchesLabel": "Actualizar automáticamente los parches",
"autoUpdatePatchesHint": "Actualizar automáticamente los parches a la última versión",
"usePrereleasesLabel": "Usar versiones preliminares",
"usePrereleasesHint": "Usar versiones previas de ReVanced Manager y ReVanced Parches",
"showUpdateDialogLabel": "Mostrar diálogo de actualización",
"showUpdateDialogHint": "Mostrar un diálogo cuando una nueva actualización esté disponible",
"universalPatchesLabel": "Mostrar parches universales",

View File

@ -180,6 +180,7 @@
"disablePatchesSelectionWarningText": "Te olete peaaegu keelamas paranduste valiku muutmise.\nParanduste vaikimisi valik taastatakse.\n\nKas keelate ikkagi?",
"autoUpdatePatchesLabel": "Automaatne paranduste uuendamine",
"autoUpdatePatchesHint": "Uuenda parandused automaatselt uusimasse versiooni",
"usePrereleasesLabel": "Kasuta eelväljalaskeid",
"showUpdateDialogLabel": "Näita uuenduse dialoogi",
"showUpdateDialogHint": "Näita dialoogi, kui on saadaval uus uuendus",
"universalPatchesLabel": "Näita universaalseid parandusi",

View File

@ -180,6 +180,9 @@
"disablePatchesSelectionWarningText": "Olet poistamassa paikkausvalikoiman muokkauksen käytöstä.\nOletusarvoiset paikkasvalikoimat palautetaan.\n\nEstetäänkö se silti?",
"autoUpdatePatchesLabel": "Päivitä paikkaukset automaattisesti",
"autoUpdatePatchesHint": "Päivitä paikkaukset automaattisesti uusimpiin versioihin",
"usePrereleasesLabel": "Käytä ennakkojulkaisuja",
"usePrereleasesHint": "Käytä ReVanced Managerin ja ReVanced Patchesien ennakkojulkaisuversioita",
"usePrereleasesWarningText": "Ennakkojulkaisuversioiden käyttäminen voi aiheuttaa odottamattomia ongelmia.\n\nOtetaanko se silti käyttöön?",
"showUpdateDialogLabel": "Näytä päivitysruutu",
"showUpdateDialogHint": "Näytä ilmoitus, kun uusi päivitys on saatavilla",
"universalPatchesLabel": "Näytä yleispaikkaukset",

View File

@ -180,6 +180,7 @@
"disablePatchesSelectionWarningText": "Ikaw ay malapit nang magdisable sa pagpalit ng mga pinili na patches.\nDahil dyan, ang karaniwang pagpili ng mga patch ay maibalik.\n\nI-disable pa rin?",
"autoUpdatePatchesLabel": "Auto update patches",
"autoUpdatePatchesHint": "Awtomatikong i-update ang mga patch sa pinakabagong bersyon",
"usePrereleasesLabel": "Gumamit ng mga pre-release",
"showUpdateDialogLabel": "Ipakita ang dialog ng update",
"showUpdateDialogHint": "Ipakita ang isang dialog kapag magagamit ang isang bagong update",
"universalPatchesLabel": "Ipakita ang mga pangkalahatang patch",

View File

@ -137,7 +137,7 @@
"notificationText": "Appuyez pour revenir à l'installation",
"exportApkButtonTooltip": "Exporter l'APK patché",
"exportLogButtonTooltip": "Exporter le journal",
"screenshotDetected": "Une capture décran a été détectée. Si vous essayez de partager le log, veuillez plutôt partager une copie du texte.\n\nCopier les logs dans le presse-papiers ?",
"screenshotDetected": "Une capture décran a été détectée. Si vous essayez de partager le journal, veuillez plutôt partager une copie textuelle.\n\nCopier le journal dans le presse-papiers ?",
"copiedToClipboard": "Journal copié dans le presse-papiers",
"noExit": "L'installateur s'exécute encore, impossible de quitter..."
},
@ -180,6 +180,9 @@
"disablePatchesSelectionWarningText": "Vous êtes sur le point de désactiver la modification de la sélection de patchs.\nLa sélection de patchs par défaut sera rétablie.\n\nDésactiver quand même ?",
"autoUpdatePatchesLabel": "Mise à jour auto. des patchs",
"autoUpdatePatchesHint": "Mettre à jour automatiquement les patchs vers la dernière version",
"usePrereleasesLabel": "Utiliser les préversions",
"usePrereleasesHint": "Utilisez les versions préliminaires de ReVanced Manager et ReVanced Patches",
"usePrereleasesWarningText": "L'utilisation de versions préliminaires peut entraîner des problèmes inattendus.\n\nActiver quand même ?",
"showUpdateDialogLabel": "Afficher la boîte de dialogue de mise à jour",
"showUpdateDialogHint": "Afficher une boîte de dialogue lorsqu'une nouvelle mise à jour est disponible",
"universalPatchesLabel": "Afficher les patchs universels",

View File

@ -180,6 +180,9 @@
"disablePatchesSelectionWarningText": "Tá tú ar tí roghnú paistí a athrú a dhíchumasú.\nCuirfear an rogha réamhshocraithe paistí ar ais.\n\nDíchumasú ar aon chaoi?",
"autoUpdatePatchesLabel": "Paistí nuashonruithe uathoibríoch",
"autoUpdatePatchesHint": "Nuashonraigh go huathoibríoch paistí go dtí an leagan is déanaí",
"usePrereleasesLabel": "Úsáid réamheisiúintí",
"usePrereleasesHint": "Úsáid leaganacha réamheisiúna de ReVanced Manager agus ReVanced Patches",
"usePrereleasesWarningText": "Dfhéadfadh fadhbanna gan choinne a bheith mar thoradh ar úsáid a bhaint as leaganacha réamhscaoilte.\n\nAr mhaith leat é a chumasú ar aon nós?",
"showUpdateDialogLabel": "Taispeáin dialóg nuashonrú",
"showUpdateDialogHint": "Taispeáin dialóg nuair a bhíonn nuashonrú nua ar fáil",
"universalPatchesLabel": "Taispeáin paistí uilíocha",

View File

@ -26,7 +26,7 @@
"lastPatchedAppSubtitle": "Aplikasi terakhir ditambal",
"patchedSubtitle": "Aplikasi terpasang",
"changeLaterSubtitle": "Anda dapat mengubahnya di pengaturan nanti.",
"noSavedAppFound": "App tidak ditemukan",
"noSavedAppFound": "Aplikasi tidak ditemukan",
"noInstallations": "Aplikasi tertambal tidak terpasang",
"installUpdate": "Lanjut mengunduh pembaruan?",
"updateSheetTitle": "Perbarui ReVanced Manager",
@ -180,6 +180,7 @@
"disablePatchesSelectionWarningText": "Anda akan menonaktifkan pengubahan pilihan tambalan.\nPilihan tambalan bawaan akan dikembalikan.\n\nTetap nonaktifkan?",
"autoUpdatePatchesLabel": "Otomatis perbarui tambalan",
"autoUpdatePatchesHint": "Otomatis perbarui tambalan ke versi terbaru",
"usePrereleasesLabel": "Gunakan rilis pra-rilis",
"showUpdateDialogLabel": "Tampilkan dialog pembaruan",
"showUpdateDialogHint": "Tampilkan dialog ketika pembaruan tersedia",
"universalPatchesLabel": "Tampilkan tambalan universal",

View File

@ -1,10 +1,10 @@
{
"okButton": "OK",
"cancelButton": "キャンセル",
"dismissButton": "閉じる",
"dismissButton": "取り消す",
"quitButton": "終了",
"updateButton": "更新",
"suggested": "推奨: ${version}",
"suggested": "推奨バージョン: ${version}",
"yesButton": "はい",
"noButton": "いいえ",
"warning": "警告",
@ -30,12 +30,12 @@
"noInstallations": "パッチ済みのアプリはインストールされていません",
"installUpdate": "更新を適用しますか?",
"updateSheetTitle": "ReVanced Managerを更新",
"updateDialogTitle": "新しいアップデートが利用可能",
"updateDialogTitle": "新しいアップデートが利用可能です",
"updatePatchesSheetTitle": "ReVanced Patchesを更新",
"updateChangelogTitle": "更履歴",
"updateChangelogTitle": "更履歴",
"updateDialogText": "${file} の更新が利用可能です。\n現在のバージョン: ${version} ",
"downloadConsentDialogTitle": "必要なファイルをダウンロードしますか?",
"downloadConsentDialogText": "ReVanced Managerを正常に動作させるためファイルをダウンロードする必要があります。",
"downloadConsentDialogText": "ReVanced Managerを正常に動作させるために必要なファイルをダウンロードする必要があります。",
"downloadConsentDialogText2": "${url} に接続します。",
"downloadingMessage": "更新データをダウンロードしています...",
"downloadedMessage": "アップデートのダウンロードが完了しました",
@ -74,7 +74,7 @@
},
"socialMediaCard": {
"widgetTitle": "SNS",
"widgetSubtitle": "私たちはここにいます!"
"widgetSubtitle": "私たちはここにいます"
},
"appSelectorView": {
"viewTitle": "アプリを選択",
@ -82,10 +82,10 @@
"storageButton": "APKファイルを選択",
"selectFromStorageButton": "ストレージから選択",
"errorMessage": "選択したアプリは使用できません",
"downloadToast": "ダウンロード機能は現在開発中です",
"downloadToast": "ダウンロード機能はまだ実装されていないため、利用できません",
"requireSuggestedAppVersionDialogText": "選択したアプリのバージョンは推奨バージョンではありません。予期せぬ問題が発生する可能性があります。\n推奨バージョンを選択してください。\n\n選択されたバージョン ${selected}\n推奨バージョン ${suggested}\n\n選択されたバージョンを使用する場合、設定から「推奨バージョンの使用を強制」を無効にしてください。",
"featureNotAvailable": "この機能は未実装です",
"featureNotAvailableText": "このアプリは分割APKであり、パッチの適用とインストールにはroot権限でマウントする必要があります。ただし、ストレージから単一APKを選択することでパッチの適用とインストールが可能です。"
"featureNotAvailableText": "このアプリは分割APKであり、パッチの適用とインストールにはルート権限でマウントする必要があります。ただし、ストレージから単一APKを選択することでパッチの適用とインストールが可能です。"
},
"patchesSelectorView": {
"viewTitle": "パッチを選択",
@ -111,8 +111,8 @@
"saveOptions": "保存",
"unselectPatch": "パッチの選択を解除",
"tooltip": "他の入力オプション",
"selectFilePath": "ファイルパスを選択",
"selectFolder": "フォルダを選択",
"selectFilePath": "ファイルパスを選択",
"selectFolder": "フォルダを選択",
"requiredOption": "このオプションは必須です",
"unsupportedOption": "このオプションはサポートされていません",
"requiredOptionNull": "以下のオプションを設定する必要があります:\n\n${options}"
@ -130,8 +130,8 @@
"installButton": "インストール",
"installRootType": "マウント",
"installNonRootType": "標準",
"warning": "予期しない問題を避けるため、パッチを適用したアプリの自動更新を無効にします。",
"pressBackAgain": "キャンセルするには、もう一度戻るを押してください",
"warning": "予期しない問題を避けるため、パッチを適用したアプリの自動更新を無効にすることを推奨します。",
"pressBackAgain": "キャンセルするには、もう一度戻るボタンを押してください",
"openButton": "開く",
"notificationTitle": "ReVanced Managerはパッチを適用しています",
"notificationText": "インストーラーに戻るにはタップしてください",
@ -147,14 +147,14 @@
"teamSectionTitle": "開発チーム",
"debugSectionTitle": "デバッグ",
"advancedSectionTitle": "高度な設定",
"exportSectionTitle": "インポートエクスポート",
"exportSectionTitle": "インポート/エクスポート",
"dataSectionTitle": "データソース",
"themeModeLabel": "アプリのテーマ",
"systemThemeLabel": "システム",
"systemThemeLabel": "システムの設定に従う",
"lightThemeLabel": "ライト",
"darkThemeLabel": "ダーク",
"dynamicThemeLabel": "Material You",
"dynamicThemeHint": "よりデバイスに近い体験が楽しめます",
"dynamicThemeHint": "お使いのデバイスに近い体験をお楽しみください",
"languageLabel": "言語",
"languageUpdated": "言語が更新されました",
"sourcesLabel": "代替ソース",
@ -166,7 +166,7 @@
"apiURLResetDialogText": "APIのURLをデフォルト値にリセットしてもよろしいですか",
"sourcesUpdateNote": "注意: 自動的に代替ソースからReVanced Patchesをダウンロードします。\n\nこれにより、代替ソースに接続されます。",
"apiURLLabel": "APIのURL",
"apiURLHint": "ReVinced ManagerのAPI URLを設定します",
"apiURLHint": "ReVanced ManagerのAPI URLを設定します",
"selectApiURL": "APIのURL",
"orgPatchesLabel": "Patches の組織",
"sourcesPatchesLabel": "Patches のソース",
@ -175,19 +175,20 @@
"logsLabel": "ログを共有",
"logsHint": "ReVanced Managerのログを共有します",
"enablePatchesSelectionLabel": "パッチ選択の変更を許可",
"enablePatchesSelectionHint": "パッチの選択解除を禁止しません",
"enablePatchesSelectionHint": "パッチの選択/解除を禁止しません",
"enablePatchesSelectionWarningText": "パッチの選択を変更すると、予期せぬ問題が起こる可能性があります。\n\n有効にしますか",
"disablePatchesSelectionWarningText": "パッチ選択の変更を無効にしようとしています。\nデフォルトのパッチの選択が復元されます。\n\n無効にしますか",
"autoUpdatePatchesLabel": "パッチの自動アップデート",
"autoUpdatePatchesHint": "パッチを自動的に最新バージョンに更新する",
"usePrereleasesHint": "ReVanced ManagerとReVanced Patchesのプレリリース版を使用します",
"showUpdateDialogLabel": "アップデートの通知を表示",
"showUpdateDialogHint": "新しいアップデートが利用可能な場合にダイアログを表示します",
"universalPatchesLabel": "共通パッチの表示",
"universalPatchesHint": "すべてのアプリと共通パッチを表示しますアプリ一覧の読み込みが遅くなる可能性があります",
"universalPatchesHint": "すべてのアプリと共通パッチを表示します (アプリ一覧の読み込みが遅くなる可能性があります)",
"lastPatchedAppLabel": "パッチを適用したアプリを保存",
"lastPatchedAppHint": "最後にパッチされた内容を保存して、後でインストールまたはエクスポートできます",
"versionCompatibilityCheckLabel": "バージョンの互換性の確認",
"versionCompatibilityCheckHint": "選択したアプリのバージョンと互換性のないパッチの選択を禁止する",
"versionCompatibilityCheckHint": "選択したアプリのバージョンと互換性のないパッチの選択を防止します",
"requireSuggestedAppVersionLabel": "推奨バージョンの使用を強制",
"requireSuggestedAppVersionHint": "推奨されていないバージョンのアプリを選択できないようにします",
"requireSuggestedAppVersionDialogText": "推奨バージョンではないアプリを選択すると、予期しない問題が発生する可能性があります。\n\nこのまま続行しますか",
@ -195,14 +196,14 @@
"snackbarMessage": "クリップボードにコピーしました",
"restartAppForChanges": "変更を適用するにはアプリを再起動してください",
"deleteTempDirLabel": "一時ファイルを削除",
"deleteTempDirHint": "未使用の一時ファイルを削除",
"deleteTempDirHint": "未使用の一時ファイルを削除します",
"deletedTempDir": "一時ファイルを削除しました",
"exportSettingsLabel": "設定をエクスポート",
"exportSettingsHint": "設定をJSONファイルにエクスポートします",
"exportedSettings": "設定をエクスポートしました",
"importSettingsLabel": "設定をインポート",
"importSettingsHint": "JSONファイルから設定をインポートします",
"importedSettings": "設定インポートされました",
"importedSettings": "設定インポートました",
"exportPatchesLabel": "パッチ選択をエクスポート",
"exportPatchesHint": "パッチ選択をJSONファイルにエクスポートします",
"exportedPatches": "パッチ選択をエクスポートしました",
@ -212,7 +213,7 @@
"importedPatches": "パッチ選択をインポートしました",
"resetStoredPatchesLabel": "パッチの選択をリセット",
"resetStoredPatchesHint": "保存されたパッチの選択をリセットする",
"resetStoredPatchesDialogTitle": "パッチの選択をリセット",
"resetStoredPatchesDialogTitle": "パッチの選択をリセットしますか?",
"resetStoredPatchesDialogText": "デフォルトのパッチの選択が復元されます。",
"resetStoredPatches": "パッチの選択をリセットしました",
"resetStoredOptionsLabel": "パッチオプションをリセット",
@ -241,7 +242,7 @@
"keystoreSelectorErrorMessage": "選択したキーストアファイルは使用できません"
},
"appInfoView": {
"widgetTitle": "アプリ情報",
"widgetTitle": "アプリ情報",
"openButton": "開く",
"installButton": "インストール",
"uninstallButton": "アンインストール",
@ -250,11 +251,11 @@
"deleteButton": "削除",
"rootDialogTitle": "エラー",
"lastPatchedAppDescription": "これは最後にパッチを適用したアプリのバックアップです。",
"unmountDialogText": "このアプリをアンマウントしてもよろしいですか?",
"uninstallDialogText": "本当にこのアプリをアンインストールしすか?",
"rootDialogText": "アプリはスーパーユーザー権限でインストールされましたが、現在 ReVanced Manager にはその権限がありません。 スーパーユーザー権限を付与してください。",
"unmountDialogText": "このアプリをマウント解除してもよろしいですか?",
"uninstallDialogText": "このアプリをアンインストールしてもよろしいですか?",
"rootDialogText": "アプリはルート権限でインストールされましたが、現在ReVanced Managerにはその権限がありません。 ルート権限を付与してください。",
"removeAppDialogTitle": "アプリを削除しますか?",
"removeAppDialogText": "本当にバックアップを削除してもよろしいですか?",
"removeAppDialogText": "バックアップを削除してもよろしいですか?",
"packageNameLabel": "パッケージ名",
"installTypeLabel": "インストールの種類",
"mountTypeLabel": "マウント",
@ -271,7 +272,7 @@
},
"installErrorDialog": {
"mount_version_mismatch": "バージョンが一致しません",
"mount_no_root": "ルート権限がありません",
"mount_no_root": "ルート権限が付与されていません",
"mount_missing_installation": "インストールが見つかりませんでした",
"status_failure_blocked": "インストールはブロックされました",
"install_failed_verification_failure": "検証に失敗しました",
@ -283,16 +284,16 @@
"status_failure_timeout": "インストールがタイムアウトしました",
"status_unknown": "インストールに失敗しました",
"mount_version_mismatch_description": "インストールされたアプリがパッチを当てたアプリとは異なるバージョンであるため、インストールに失敗しました。\n\nマウントしているアプリのバージョンをインストールし、再度お試しください。",
"mount_no_root_description": "ルートアクセスが許可されていないためインストールに失敗しました。\n\nReVanced Managerへのルートアクセスを許可し、もう一度お試しください。",
"mount_no_root_description": "ルート権限が付与されていないためインストールに失敗しました。\n\nReVanced Managerへのルート権限を許可し、もう一度お試しください。",
"mount_missing_installation_description": "パッチが適用されていないアプリがマウントされていないためインストールに失敗しました。\n\nマウントする前にパッチが適用されていないアプリをインストールし、もう一度お試しください。",
"status_failure_timeout_description": "インストールに時間がかかりすぎした。\n\nもう一度やり直しますか",
"status_failure_timeout_description": "インストールに時間がかかりすぎたため、完了しませんでした。\n\nもう一度やり直しますか",
"status_failure_storage_description": "ストレージが不足しているためインストールに失敗しました。\n\n空き領域を解放して再度お試し下さい。",
"status_failure_invalid_description": "パッチ適用されたアプリが無効なためインストールに失敗しました。\n\nアプリをアンインストールしてもう一度お試しください。",
"status_failure_incompatible_description": "アプリはこのデバイスと互換性がありません。\n\nこのデバイスに対応しているAPKを使用して、もう一度お試しください。",
"status_failure_conflict_description": "インストールはアプリの既存のインストールによって中止されました。\n\nインストールされアプリをアンインストールし、もう一度やり直してください。",
"status_failure_blocked_description": "インストールは ${packageName} によってブロックされました。\n\nセキュリティ設定を調整して、もう一度お試しください。",
"install_failed_verification_failure_description": "認証の問題によりインストールに失敗しました。\n\nセキュリティ設定を調整して、もう一度お試しください。",
"install_failed_version_downgrade_description": "インストールに失敗しました。パッチを当てたアプリがインストールされたアプリよりも低いバージョンであるためです。\n\nアプリをアンインストールしてもう一度お試しください。",
"status_failure_conflict_description": "既にインストールされているアプリがあるため、インストール中止されました。\n\nインストールされているアプリをアンインストールして、再試行しますか?",
"status_failure_blocked_description": "インストールは${packageName}によってブロックされました。\n\nセキュリティ設定を確認して、もう一度お試しください。",
"install_failed_verification_failure_description": "認証の問題によりインストールに失敗しました。\n\nセキュリティ設定を確認して、もう一度お試しください。",
"install_failed_version_downgrade_description": "インストールに失敗しました。パッチが適用されたアプリがインストールされたアプリよりも低いバージョンであるためです。\n\nアプリをアンインストールしてもう一度お試しください。",
"status_unknown_description": "不明な理由によりインストールに失敗しました。もう一度やり直してください。"
}
}

View File

@ -11,7 +11,7 @@
"notice": "알림",
"noShowAgain": "다시 보지 않기",
"add": "추가",
"remove": "제",
"remove": "제",
"showChangelogButton": "변경 사항 보기",
"showUpdateButton": "업데이트 보기",
"navigationView": {
@ -25,18 +25,18 @@
"updatesSubtitle": "업데이트",
"lastPatchedAppSubtitle": "마지막으로 패치된 앱",
"patchedSubtitle": "설치된 앱",
"changeLaterSubtitle": "나중에 설정에서 변경할 수 있습니다",
"changeLaterSubtitle": "나중에 설정에서 변경할 수 있습니다.",
"noSavedAppFound": "앱을 찾을 수 없습니다",
"noInstallations": "패치된 앱이 설치되어 있지 않습니다",
"installUpdate": "업데이트를 계속 설치하시겠습니까?",
"updateSheetTitle": "ReVanced Manager 업데이트",
"updateDialogTitle": "새 업데이트가 있습니다",
"updatePatchesSheetTitle": "ReVanced 패치 업데이트",
"updateDialogTitle": "새로운 업데이트가 있습니다",
"updatePatchesSheetTitle": "ReVanced Patches 업데이트",
"updateChangelogTitle": "변경 사항",
"updateDialogText": "'${file}'에 대한 새 업데이트를 할 수 있습니다\n\n현재 설치된 버전은 '${version}' 입니다",
"updateDialogText": "'${file}'에 대한 새로운 업데이트를 할 수 있습니다.\n\n현재 설치된 버전은 '${version}' 입니다.",
"downloadConsentDialogTitle": "필요한 파일을 다운로드하시겠습니까?",
"downloadConsentDialogText": "ReVanced Manager가 제대로 작동하려면 필요한 파일을 다운로드해야 합니다",
"downloadConsentDialogText2": "진행하면 '${url}' 에 연결됩니다",
"downloadConsentDialogText": "ReVanced Manager가 제대로 작동하려면 필요한 파일을 다운로드해야 합니다.",
"downloadConsentDialogText2": "진행하면 '${url}' 에 연결됩니다.",
"downloadingMessage": "업데이트 다운로드 중 ...",
"downloadedMessage": "업데이트를 다운로드 완료하였습니다",
"installingMessage": "업데이트 설치 중 ...",
@ -55,9 +55,9 @@
"widgetTitle": "Patcher",
"patchButton": "패치하기",
"incompatibleArchWarningDialogText": "이 아키텍처에 대한 패치는 아직 지원되지 않으므로 실패할 수 있습니다. 그래도 계속하시겠습니까?",
"removedPatchesWarningDialogText": "이 앱을 마지막으로 패치한 이후 제된 패치입니다:\n\n${patches}\n\n${newPatches}\n\n그래도 계속하시겠습니까?",
"removedPatchesWarningDialogText": "이 앱을 마지막으로 패치한 이후 제된 패치입니다:\n\n${patches}\n\n${newPatches}\n\n그래도 계속하시겠습니까?",
"addedPatchesDialogText": "이 앱을 마지막으로 패치한 이후 추가된 패치입니다:\n\n${addedPatches}",
"requiredOptionDialogText": "일부 패치 옵션을 설정해야 합니다"
"requiredOptionDialogText": "일부 패치 옵션을 설정해야 합니다."
},
"appSelectorCard": {
"widgetTitle": "앱 선택하기",
@ -83,15 +83,15 @@
"selectFromStorageButton": "기기 저장소에서 선택",
"errorMessage": "선택한 앱을 사용할 수 없습니다",
"downloadToast": "다운로드 기능은 아직 사용할 수 없습니다",
"requireSuggestedAppVersionDialogText": "선택한 앱 버전이 권장 앱 버전과 일치하지 않아서 예상되지 않은 문제점이 발생할 수 있습니다. 권장 앱 버전을 사용하세요\n\n선택한 앱 버전: ${selected}\n권장 앱 버전: ${suggested}\n\n계속하려면 설정에서 '권장 앱 버전 요구'를 비활성화하세요",
"requireSuggestedAppVersionDialogText": "선택한 앱 버전이 권장 앱 버전과 일치하지 않아서 예상되지 않은 문제점이 발생할 수 있습니다. 권장 앱 버전을 사용하세요.\n\n선택한 앱 버전: ${selected}\n권장 앱 버전: ${suggested}\n\n계속하려면 설정에서 '권장 앱 버전 요구'를 비활성화하세요.",
"featureNotAvailable": "기능이 구현되지 않았습니다",
"featureNotAvailableText": "이 기기에서 추출할 수 있는 앱이 분할 APK 파일이므로 Root 권한으로 마운트해야만 안정적으로 패치 및 설치할 수 있습니다. 그러나 Non-Root 사용자는 기기 저장소에서 '외부에서 다운로드한 완전한 APK 파일'을 선택하여 패치 및 설치할 수 있습니다"
"featureNotAvailableText": "이 기기에서 추출할 수 있는 앱이 분할 APK 파일이므로 Root 권한으로 마운트해야만 안정적으로 패치 및 설치할 수 있습니다. 그러나 Non-Root 사용자는 기기 저장소에서 '외부에서 다운로드한 완전한 APK 파일'을 선택하여 패치 및 설치할 수 있습니다."
},
"patchesSelectorView": {
"viewTitle": "패치 선택하기",
"searchBarHint": "패치 검색하기",
"universalPatches": "공용 패치",
"newPatches": "새 패치",
"newPatches": "새로운 패치",
"patches": "패치",
"doneButton": "선택완료",
"defaultChip": "기본값",
@ -99,9 +99,9 @@
"noneChip": "선택안함",
"noneTooltip": "모든 패치 선택 해제",
"loadPatchesSelection": "패치 선택목록 가져오기",
"noSavedPatches": "선택한 앱에 적용할 패치가 저장되지 않았습니다\n'선택완료' 버튼을 눌러서 현재 선택목록을 저장하세요",
"noSavedPatches": "선택한 앱에 적용할 패치가 저장되지 않았습니다.\n'선택완료' 버튼을 눌러서 현재 선택목록을 저장하세요.",
"noPatchesFound": "선택한 앱에 대한 패치를 찾을 수 없습니다",
"setRequiredOption": "옵션을 설정해야 하는 패치가 있습니다:\n\n${patches}\n\n진행하기 전 설정을 마쳐주세요"
"setRequiredOption": "옵션을 설정해야 하는 패치가 있습니다:\n\n${patches}\n\n진행하기 전 설정을 마쳐주세요."
},
"patchOptionsView": {
"customValue": "사용자 정의 값",
@ -118,26 +118,26 @@
"requiredOptionNull": "다음 옵션들이 설정되어 있어야 합니다:\n\n${options}"
},
"patchItem": {
"unsupportedDialogText": "이 패치는 문제점을 발생시킬 수 있습니다\n\n앱 버전: ${packageVersion}\n지원되는 버전:\n${supportedVersions}",
"unsupportedPatchVersion": "패치가 이 앱 버전을 지원하지 않습니다",
"unsupportedDialogText": "이 패치는 문제점을 발생시킬 수 있습니다.\n\n앱 버전: ${packageVersion}\n지원되는 버전:\n${supportedVersions}",
"unsupportedPatchVersion": "패치가 이 앱 버전을 지원하지 않습니다.",
"unsupportedRequiredOption": "패치에 이 앱을 지원하지 않는 필수 옵션이 포함되어 있습니다",
"patchesChangeWarningDialogText": "기본 패치 선택을 사용하는 것을 권장합니다. 설정을 변경할 경우에는 예상되지 않은 문제점의 원인이 될 수 있습니다\n\n패치 선택을 변경하기 위해서는 설정에서 \"패치 선택 변경 허용\"을 활성화해야 합니다",
"patchesChangeWarningDialogText": "기본 패치 선택을 사용하는 것을 권장합니다. 설정을 변경할 경우에는 예상되지 않은 문제점의 원인이 될 수 있습니다.\n\n패치 선택을 변경하기 위해서는 설정에서 \"패치 선택 변경 허용\"을 활성화해야 합니다.",
"patchesChangeWarningDialogButton": "기본 선택목록 사용"
},
"installerView": {
"installType": "설치 유형 선택",
"installTypeDescription": "설치를 진행할 유형을 선택해주세요",
"installTypeDescription": "설치를 진행할 유형을 선택해주세요.",
"installButton": "설치하기",
"installRootType": "마운트",
"installNonRootType": "일반",
"warning": "패치된 앱의 자동 업데이트를 비활성화하여 예상되지 않은 문제점을 방지하세요",
"warning": "패치된 앱의 자동 업데이트를 비활성화하여 예상되지 않은 문제점을 방지하세요.",
"pressBackAgain": "취소하려면 뒤로가기 버튼을 다시 누르세요",
"openButton": "열기",
"notificationTitle": "ReVanced Manager가 패치 중입니다",
"notificationText": "설치 관리자로 돌아가려면 여기를 누르세요",
"exportApkButtonTooltip": "패치된 APK 내보내기",
"exportLogButtonTooltip": "로그 내보내기",
"screenshotDetected": "스크린샷이 감지되었습니다. 로그를 공유할 목적이라면, 대신 텍스트 사본으로 공유해주세요\n\n로그를 클립보드에 복사하시겠습니까?",
"screenshotDetected": "스크린샷이 감지되었습니다. 로그를 공유할 목적이라면, 대신 텍스트 사본으로 공유해주세요.\n\n로그를 클립보드에 복사하시겠습니까?",
"copiedToClipboard": "로그를 클립보드에 복사하였습니다",
"noExit": "설치 관리자가 실행 중이므로 중단할 수 없습니다 ..."
},
@ -164,7 +164,7 @@
"sourcesResetDialogTitle": "초기화",
"sourcesResetDialogText": "정말 사용자 정의 소스를 기본값으로 초기화하시겠습니까?",
"apiURLResetDialogText": "정말 API URL을 기본값으로 초기화하시겠습니까?",
"sourcesUpdateNote": "알림: 변경하면 대체 소스에서 ReVanced Patches가 자동으로 다운로드됩니다\n\n그 이후에는 대체 소스로 연결됩니다",
"sourcesUpdateNote": "알림: 변경하면 대체 소스에서 ReVanced Patches가 자동으로 다운로드됩니다.\n\n그 이후에는 대체 소스로 연결됩니다.",
"apiURLLabel": "API URL",
"apiURLHint": "ReVanced Manager의 API URL를 설정할 수 있습니다",
"selectApiURL": "API URL",
@ -176,12 +176,15 @@
"logsHint": "수집된 ReVanced Manager 로그를 공유합니다",
"enablePatchesSelectionLabel": "패치 선택 변경 허용",
"enablePatchesSelectionHint": "패치를 선택하거나 선택 해제할 수 있습니다",
"enablePatchesSelectionWarningText": "패치 선택을 변경하는 경우에는 예상되지 않은 문제점이 발생할 수 있습니다\n\n그래도 활성화하시겠습니까?",
"disablePatchesSelectionWarningText": "패치 선택 변경을 비활성화하려 합니다\n기본 패치 선택목록으로 복원될 것입니다\n\n그래도 비활성화하시겠습니까?",
"enablePatchesSelectionWarningText": "패치 선택을 변경하는 경우에는 예상되지 않은 문제점이 발생할 수 있습니다.\n\n그래도 활성화하시겠습니까?",
"disablePatchesSelectionWarningText": "패치 선택 변경을 비활성화하려 합니다.\n기본 패치 선택목록으로 복원될 것입니다.\n\n그래도 비활성화하시겠습니까?",
"autoUpdatePatchesLabel": "패치 자동 업데이트",
"autoUpdatePatchesHint": "ReVanced Manager 앱 내에서 사용되는 패치를 최신 버전으로 자동 업데이트합니다",
"autoUpdatePatchesHint": "ReVanced Patches를 최신 버전으로 자동 업데이트합니다",
"usePrereleasesLabel": "Pre-Releases 버전 사용",
"usePrereleasesHint": "ReVanced Manager 및 ReVanced Patches의 Pre-Releases 버전을 사용합니다",
"usePrereleasesWarningText": "Pre-Releases 버전을 사용하면 예상되지 않은 문제점이 발생할 수 있습니다.\n\n그래도 활성화하시겠습니까?",
"showUpdateDialogLabel": "업데이트 팝업창 보기",
"showUpdateDialogHint": "새 업데이트가 있으면 팝업창을 표시합니다",
"showUpdateDialogHint": "새로운 업데이트가 있으면 팝업창을 표시합니다",
"universalPatchesLabel": "공용 패치 보기",
"universalPatchesHint": "기기에 설치된 모든 앱과 공용 패치를 표시합니다 (앱 목록이 느려질 수 있음)",
"lastPatchedAppLabel": "패치된 앱 저장",
@ -190,18 +193,18 @@
"versionCompatibilityCheckHint": "선택한 앱 버전과 호환되지 않는 패치를 선택할 수 없습니다",
"requireSuggestedAppVersionLabel": "권장 앱 버전 요구",
"requireSuggestedAppVersionHint": "권장되지 않은 앱 버전은 선택할 수 없습니다",
"requireSuggestedAppVersionDialogText": "권장 앱 버전이 아닌 앱을 선택하는 경우에는 예상되지 않은 문제점이 발생할 수 있습니다\n\n그래도 계속하시겠습니까?",
"requireSuggestedAppVersionDialogText": "권장 앱 버전이 아닌 앱을 선택하는 경우에는 예상되지 않은 문제점이 발생할 수 있습니다.\n\n그래도 계속하시겠습니까?",
"aboutLabel": "정보",
"snackbarMessage": "클립보드에 복사하였습니다",
"restartAppForChanges": "변경 사항을 적용하려면 앱을 다시 시작하세요",
"deleteTempDirLabel": "임시 파일 제",
"deleteTempDirHint": "사용하지 않는 임시 파일을 제합니다",
"deletedTempDir": "임시 파일을 제하였습니다",
"deleteTempDirLabel": "임시 파일 제",
"deleteTempDirHint": "사용하지 않는 임시 파일을 제합니다",
"deletedTempDir": "임시 파일을 제하였습니다",
"exportSettingsLabel": "설정 내보내기",
"exportSettingsHint": "설정을 JSON 파일로 내보낼 수 있습니다",
"exportSettingsHint": "설정을 JSON 파일로 내보니다",
"exportedSettings": "설정을 내보냈습니다",
"importSettingsLabel": "설정 가져오기",
"importSettingsHint": "설정을 JSON 파일에서 가져올 수 있습니다",
"importSettingsHint": "설정을 JSON 파일에서 가져니다",
"importedSettings": "설정을 가져왔습니다",
"exportPatchesLabel": "패치 선택목록 내보내기",
"exportPatchesHint": "패치 선택목록을 JSON 파일로 내보냅니다",
@ -218,15 +221,15 @@
"resetStoredOptionsLabel": "패치 옵션 초기화",
"resetStoredOptionsHint": "모든 패치 옵션을 초기화합니다",
"resetStoredOptionsDialogTitle": "패치 옵션을 초기화하시겠습니까?",
"resetStoredOptionsDialogText": "패치 옵션을 초기화하면 저장한 모든 옵션이 제됩니다",
"resetStoredOptionsDialogText": "패치 옵션을 초기화하면 저장한 모든 옵션이 제됩니다.",
"resetStoredOptions": "옵션을 초기화하였습니다",
"deleteLogsLabel": "로그 제하기",
"deleteLogsHint": "수집된 ReVanced Manager 로그를 제합니다",
"deletedLogs": "로그를 제하였습니다",
"deleteLogsLabel": "로그 제하기",
"deleteLogsHint": "수집된 ReVanced Manager 로그를 제합니다",
"deletedLogs": "로그를 제하였습니다",
"regenerateKeystoreLabel": "키스토어 재생성",
"regenerateKeystoreHint": "앱을 서명할 때 사용한 키스토어를 재생성합니다",
"regenerateKeystoreDialogTitle": "키스토어를 재생성하시겠습니까?",
"regenerateKeystoreDialogText": "기존 키스토어로 서명한 패치된 앱을 더 이상 업데이트할 수 없게 됩니다",
"regenerateKeystoreDialogText": "기존 키스토어로 서명한 패치된 앱을 더 이상 업데이트할 수 없게 됩니다.",
"regeneratedKeystore": "키스토어를 재생성하였습니다",
"exportKeystoreLabel": "키스토어 내보내기",
"exportKeystoreHint": "앱을 서명할 때 사용한 키스토어를 내보냅니다",
@ -244,17 +247,17 @@
"widgetTitle": "앱 정보",
"openButton": "열기",
"installButton": "설치하기",
"uninstallButton": "제하기",
"uninstallButton": "제하기",
"unmountButton": "마운트 해제",
"exportButton": "내보내기",
"deleteButton": "제하기",
"deleteButton": "제하기",
"rootDialogTitle": "오류",
"lastPatchedAppDescription": "마지막으로 패치된 앱의 백업입니다",
"lastPatchedAppDescription": "마지막으로 패치된 앱의 백업입니다.",
"unmountDialogText": "이 앱의 마운트를 해제하시겠습니까?",
"uninstallDialogText": "이 앱을 제하시겠습니까?",
"rootDialogText": "앱이 슈퍼유저 권한으로 설치되었으나 현재 ReVanced Manager에는 권한이 없습니다\n먼저 슈퍼유저 권한을 부여하세요",
"removeAppDialogTitle": "앱을 제하시겠습니까?",
"removeAppDialogText": "이 백업을 제하시겠습니까?",
"uninstallDialogText": "이 앱을 제하시겠습니까?",
"rootDialogText": "앱이 슈퍼유저 권한으로 설치되었으나 현재 ReVanced Manager에는 권한이 없습니다.\n먼저 슈퍼유저 권한을 부여하세요.",
"removeAppDialogTitle": "앱을 제하시겠습니까?",
"removeAppDialogText": "이 백업을 제하시겠습니까?",
"packageNameLabel": "패키지 이름",
"installTypeLabel": "설치 유형",
"mountTypeLabel": "마운트",
@ -282,17 +285,17 @@
"status_failure_incompatible": "설치 미호환",
"status_failure_timeout": "설치 시간 초과",
"status_unknown": "설치 실패",
"mount_version_mismatch_description": "패치된 앱과 설치된 앱의 버전이 달라서 설치에 실패하였습니다\n\n마운트하고 있는 앱의 버전으로 설치한 후에 다시 시도하세요",
"mount_no_root_description": "Root 권한이 주어지지 않아서 설치에 실패하였습니다\n\nReVanced Manager에 Root 권한을 부여한 후에 다시 시도하세요",
"mount_missing_installation_description": "패치되지 않은 앱이 이 기기에 설치되지 않아서 마운트를 진행할 수 없어서 설치에 실패하였습니다\n\n마운트하기 전 패치되지 않은 앱을 설치한 후에 다시 시도하세요",
"status_failure_timeout_description": "설치하는 데 시간이 너무 오래 걸립니다\n\n다시 시도하시겠습니까?",
"status_failure_storage_description": "저장소 공간이 충분하지 않아서 설치에 실패하였습니다\n\n저장소 공간을 확보한 후에 다시 시도하세요",
"status_failure_invalid_description": "패치된 앱이 유효하지 않아서 설치에 실패하였습니다\n\n앱을 제한 후에 다시 시도하시겠습니까?",
"status_failure_incompatible_description": "이 앱은 이 기기와 호환되지 않습니다\n\n이 기기에서 지원되는 APK를 사용하여 다시 시도하세요",
"status_failure_conflict_description": "기존에 설치된 앱이 설치를 방해하였습니다\n\n설치된 앱을 제한 후에 다시 시도하시겠습니까?",
"status_failure_blocked_description": "설치가 '${packageName}'에 의해 차단되었습니다\n\n보안 설정을 조정한 후에 다시 시도하세요",
"install_failed_verification_failure_description": "인증 문제로 인해 설치에 실패하였습니다\n\n보안 설정을 조정한 후에 다시 시도하세요",
"install_failed_version_downgrade_description": "패치된 앱의 버전이 설치된 앱의 버전보다 낮아서 설치에 실패하였습니다\n\n앱을 제한 후에 다시 시도하시겠습니까?",
"status_unknown_description": "알 수 없는 이유로 설치에 실패하였습니다. 다시 시도하세요"
"mount_version_mismatch_description": "패치된 앱과 설치된 앱의 버전이 달라서 설치에 실패하였습니다.\n\n마운트하고 있는 앱의 버전으로 설치한 후에 다시 시도하세요.",
"mount_no_root_description": "Root 권한이 주어지지 않아서 설치에 실패하였습니다.\n\nReVanced Manager에 Root 권한을 부여한 후에 다시 시도하세요.",
"mount_missing_installation_description": "패치되지 않은 앱이 이 기기에 설치되지 않아서 마운트를 진행할 수 없어서 설치에 실패하였습니다.\n\n마운트하기 전 패치되지 않은 앱을 설치한 후에 다시 시도하세요.",
"status_failure_timeout_description": "설치하는 데 시간이 너무 오래 걸립니다.\n\n다시 시도하시겠습니까?",
"status_failure_storage_description": "저장소 공간이 충분하지 않아서 설치에 실패하였습니다.\n\n저장소 공간을 확보한 후에 다시 시도하세요.",
"status_failure_invalid_description": "패치된 앱이 유효하지 않아서 설치에 실패하였습니다.\n\n앱을 제한 후에 다시 시도하시겠습니까?",
"status_failure_incompatible_description": "이 앱은 이 기기와 호환되지 않습니다.\n\n이 기기에서 지원되는 APK를 사용하여 다시 시도하세요.",
"status_failure_conflict_description": "기존에 설치된 앱이 설치를 방해하였습니다.\n\n설치된 앱을 제한 후에 다시 시도하시겠습니까?",
"status_failure_blocked_description": "설치가 '${packageName}'에 의해 차단되었습니다.\n\n보안 설정을 조정한 후에 다시 시도하세요.",
"install_failed_verification_failure_description": "인증 문제로 인해 설치에 실패하였습니다.\n\n보안 설정을 조정한 후에 다시 시도하세요.",
"install_failed_version_downgrade_description": "패치된 앱의 버전이 설치된 앱의 버전보다 낮아서 설치에 실패하였습니다.\n\n앱을 제한 후에 다시 시도하시겠습니까?",
"status_unknown_description": "알 수 없는 이유로 설치에 실패하였습니다. 다시 시도하세요."
}
}

View File

@ -180,6 +180,7 @@
"disablePatchesSelectionWarningText": "Jūs gatavojaties atspējot labojumu izvēles maiņu.\nTiksies atjaunota labojumu noklusējuma izvēle.\n\nTomēr atspējot?",
"autoUpdatePatchesLabel": "Automātiski atjaunināt ielāpus",
"autoUpdatePatchesHint": "Automātiski atjaunināt ielāpus uz jaunāko versiju",
"usePrereleasesLabel": "Lietot pirmizlaidumus",
"showUpdateDialogLabel": "Rādīt atjauninājuma dialoglodziņu",
"showUpdateDialogHint": "Rādīt dialoglodziņu, kad ir pieejams jauns atjauninājums",
"universalPatchesLabel": "Rādīt universālos ielāpus",

View File

@ -1,18 +1,41 @@
{
"okButton": "OK",
"cancelButton": "Batal",
"dismissButton": "Melepaskan",
"quitButton": "Henti",
"updateButton": "Kemas kini",
"suggested": "Versi dicadangkan: ${version}",
"yesButton": "Ya",
"noButton": "Tidak",
"warning": "Amaran",
"notice": "Notis",
"noShowAgain": "Jangan tunjukkan lagi",
"add": "Tambah",
"remove": "Buang",
"showChangelogButton": "Tunjuk log perubahan",
"showUpdateButton": "Tunjuk kemas kini",
"navigationView": {
"dashboardTab": "Papan Pemuka",
"patcherTab": "Pemodifikasi",
"settingsTab": "Tetapan"
},
"homeView": {
"refreshSuccess": "Muat semula berjaya",
"widgetTitle": "Papan Pemuka",
"updatesSubtitle": "Kemas Kini",
"lastPatchedAppSubtitle": "Aplikasi tampalan terakhir",
"patchedSubtitle": "Apl yang telah di pasang",
"changeLaterSubtitle": "Anda boleh menukar tetapan pada waktu lain",
"noSavedAppFound": "Tiada aplikasi di jumpai",
"noInstallations": "Tiada aplikasi tampalan telah di pasang",
"installUpdate": "Teruskan untuk pasang kemaskini? ",
"updateSheetTitle": "Kemaskini ReVanced Manager",
"updateDialogTitle": "Kemas kini baharu tersedia",
"updatePatchesSheetTitle": "Kemaskini ReVanced Patches",
"updateChangelogTitle": "Log perubahan",
"updateDialogText": "Kemas kini baharu tersedia untuk ${file}\n\nVersi yang terpasang adalah ${version}",
"downloadConsentDialogTitle": "Muat turun fail yang diperlukan?",
"downloadConsentDialogText": "ReVanced Manager perlu memuat turun fail penting untuk berfungsi dengan baik.",
"downloadingMessage": "Memuat turun pengemaskinian...",
"downloadedMessage": "Kemaskini dimuat turun",
"installingMessage": "Memasang pengemaskinian...",

View File

@ -7,7 +7,7 @@
"suggested": "Sugerowana wersja: ${version}",
"yesButton": "Tak",
"noButton": "Nie",
"warning": "Ostrzeżenie",
"warning": "Uwaga",
"notice": "Komunikat",
"noShowAgain": "Nie pokazuj ponownie",
"add": "Dodaj",
@ -23,7 +23,7 @@
"refreshSuccess": "Odświeżono pomyślnie",
"widgetTitle": "Panel główny",
"updatesSubtitle": "Aktualizacje",
"lastPatchedAppSubtitle": "Ostatnio poprawiona aplikacja",
"lastPatchedAppSubtitle": "Ostatnio załatana aplikacja",
"patchedSubtitle": "Zainstalowane aplikacje",
"changeLaterSubtitle": "Możesz to zmienić w ustawieniach w późniejszym czasie.",
"noSavedAppFound": "Nie znaleziono aplikacji",
@ -52,7 +52,7 @@
"timeagoLabel": "${time} temu"
},
"patcherView": {
"widgetTitle": "Łataj",
"widgetTitle": "Łatanie",
"patchButton": "Załataj",
"incompatibleArchWarningDialogText": "Łatanie na tej architekturze nie jest jeszcze obsługiwane i może się nie powieść. Czy chcesz kontynuować mimo to?",
"removedPatchesWarningDialogText": "Łatki usunięte od czasu Twojego ostatniego łatania aplikacji:\n\n${patches}\n\n${newPatches}Kontynuować?",
@ -79,7 +79,7 @@
"appSelectorView": {
"viewTitle": "Wybierz aplikację",
"searchBarHint": "Wyszukaj aplikację",
"storageButton": "Pamięć",
"storageButton": "Wybierz z pamięci",
"selectFromStorageButton": "Wybierz z pamięci",
"errorMessage": "Nie można użyć wybranej aplikacji",
"downloadToast": "Funkcja pobierania jest jeszcze niedostępna",
@ -107,7 +107,7 @@
"customValue": "Niestandardowa wartość",
"setToNull": "Ustaw na zerowy",
"nullValue": "Ta opcja jest obecnie pusta",
"viewTitle": "Opcje łatek",
"viewTitle": "Opcje łatki",
"saveOptions": "Zapisz",
"unselectPatch": "Odznacz łatkę",
"tooltip": "Więcej opcji wejściowych",
@ -154,9 +154,9 @@
"lightThemeLabel": "Jasny",
"darkThemeLabel": "Ciemny",
"dynamicThemeLabel": "Material You",
"dynamicThemeHint": "Ciesz się wrażeniami bliższymi twojemu urządzeniu",
"dynamicThemeHint": "Ciesz się wyglądem dopasowanym do twojego urządzenia",
"languageLabel": "Język",
"languageUpdated": "Zaktualizowano język",
"languageUpdated": "Zmieniono język",
"sourcesLabel": "Alternatywne źródło",
"sourcesLabelHint": "Skonfiguruj alternatywne źródła dla łatek ReVanced",
"useAlternativeSources": "Używaj alternatywnych źródeł",

View File

@ -180,6 +180,7 @@
"disablePatchesSelectionWarningText": "Você irá desabilitar a mudança da pré-seleção dos patches.\nA seleção padrão dos patches será restaurada.\n\nDesabilitar mesmo assim?",
"autoUpdatePatchesLabel": "Atualizar patches automaticamente",
"autoUpdatePatchesHint": "Atualize automaticamente os patches para a versão mais recente",
"usePrereleasesLabel": "Usar versões preliminares",
"showUpdateDialogLabel": "Mostrar alerta de atualização",
"showUpdateDialogHint": "Mostra um aviso quando uma nova atualização estiver disponível",
"universalPatchesLabel": "Mostrar patches universais",

View File

@ -180,6 +180,9 @@
"disablePatchesSelectionWarningText": "Вы собираетесь выключить измененную выборку патчей.\nБудет восстановлен стандартный выбор патчей.\n\nВсе равно выключить?",
"autoUpdatePatchesLabel": "Автообновление патчей",
"autoUpdatePatchesHint": "Автоматически обновлять патчи до последней версии",
"usePrereleasesLabel": "Использовать предварительные версии",
"usePrereleasesHint": "Использовать предварительные версии ReVanced Manager и ReVanced Patches",
"usePrereleasesWarningText": "Использование предварительных версий может привести к непредвиденным проблемам.\n\nВключить в любом случае?",
"showUpdateDialogLabel": "Показать диалог обновления",
"showUpdateDialogHint": "Показывать диалоговое окно, когда доступно новое обновление",
"universalPatchesLabel": "Показать универсальные патчи",

View File

@ -8,7 +8,7 @@
"yesButton": "Da",
"noButton": "Ne",
"warning": "Opozorilo",
"notice": "Notice",
"notice": "Obvestilo",
"noShowAgain": "Ne prikazuj več",
"add": "Dodaj",
"remove": "Odstrani",

View File

@ -180,6 +180,9 @@
"disablePatchesSelectionWarningText": "Upravo ćete da onemogućite promenu izbora pečeva.\nPodrazumevani izbor pečeva će biti vraćen.\n\nIpak onemogućiti?",
"autoUpdatePatchesLabel": "Automatski ažuriraj pečeve",
"autoUpdatePatchesHint": "Instalira najnoviju verziju pečeva automatski",
"usePrereleasesLabel": "Koristi predizdanja",
"usePrereleasesHint": "Korišćenje verzije predizdanja ReVanced Managera i ReVanced pečeva",
"usePrereleasesWarningText": "Korišćenje verzija predizdanja može izazvati neočekivane probleme.\n\nIpak omogućiti?",
"showUpdateDialogLabel": "Prikaži dijalog o ažuriranju",
"showUpdateDialogHint": "Prikazivanje dijaloga kada je novo ažuriranje dostupno",
"universalPatchesLabel": "Prikaži univerzalne pečeve",

View File

@ -180,6 +180,9 @@
"disablePatchesSelectionWarningText": "Управо ћете да онемогућите промену избора печева.\nПодразумевани избор печева ће бити враћен.\n\nИпак онемогућити?",
"autoUpdatePatchesLabel": "Аутоматски ажурирај печеве",
"autoUpdatePatchesHint": "Инсталира најновију верзију печева аутоматски",
"usePrereleasesLabel": "Користи предиздања",
"usePrereleasesHint": "Коришћење верзија предиздања ReVanced Manager-а и ReVanced печева",
"usePrereleasesWarningText": "Коришћење верзија предиздања може изазвати неочекиване проблеме.\n\nИпак омогућити?",
"showUpdateDialogLabel": "Прикажи дијалог о ажурирању",
"showUpdateDialogHint": "Приказивање дијалога када је ново ажурирање доступно",
"universalPatchesLabel": "Прикажи универзалне печеве",

View File

@ -180,6 +180,7 @@
"disablePatchesSelectionWarningText": "คุณกำลังจะปิดใช้งานการเปลี่ยนการเลือกการแก้ไข\nการเลือกการแก้ไขเริ่มต้นจะถูกคืนค่า\n\nปิดใช้งานอยู่ดี?",
"autoUpdatePatchesLabel": "อัปเดตการแก้ไขโดยอัตโนมัติ",
"autoUpdatePatchesHint": "อัปเดตการแก้ไขเป็นเวอร์ชันล่าสุดโดยอัตโนมัติ",
"usePrereleasesLabel": "ใช้รุ่นก่อนเผยแพร่",
"showUpdateDialogLabel": "แสดงกล่องโต้ตอบการอัปเดต",
"showUpdateDialogHint": "แสดงกล่องโต้ตอบเมื่อมีการอัปเดตใหม่",
"universalPatchesLabel": "แสดงการแก้ไขแบบสากล",

View File

@ -180,6 +180,9 @@
"disablePatchesSelectionWarningText": "Yama seçimini değiştirmeyi devre dışı bırakmak üzeresiniz.\nVarsayılan yama seçimi geri yüklenecektir.\n\nYine de devre dışı bırakılsın mı?",
"autoUpdatePatchesLabel": "Yamaları otomatik güncelle",
"autoUpdatePatchesHint": "Yamaları otomatik olarak en son sürüme güncelle",
"usePrereleasesLabel": "Ön sürümleri kullan",
"usePrereleasesHint": "ReVanced Manager ve ReVanced Yamaları'nın ön sürüm versiyonlarını kullan",
"usePrereleasesWarningText": "Ön sürüm versiyonlarını kullanmak beklenmedik sorunlara neden olabilir.\n\nYine de etkinleştirmek istiyor musunuz?",
"showUpdateDialogLabel": "Güncelleme penceresini göster",
"showUpdateDialogHint": "Yeni bir güncelleme mevcut olduğunda bir pencere göster",
"universalPatchesLabel": "Ortak yamaları göster",

View File

@ -180,6 +180,9 @@
"disablePatchesSelectionWarningText": "Ви збираєтеся вимкнути зміну вибору патчів.\nБуде відновлено стандартний вибір патчів.\n\nВсе одно вимкнути?",
"autoUpdatePatchesLabel": "Автоматичне оновлення патчів",
"autoUpdatePatchesHint": "Автоматично оновлювати патчі до останньої версії",
"usePrereleasesLabel": "Використовувати передрелізи",
"usePrereleasesHint": "Використовувати передрелізні версії ReVanced Manager та ReVanced Patches",
"usePrereleasesWarningText": "Використання передрелізних версій може спричинити несподівані проблеми.\n\nВсе одно увімкнути?",
"showUpdateDialogLabel": "Показувати вікно оновлення",
"showUpdateDialogHint": "Показувати діалогове вікно, коли доступне нове оновлення",
"universalPatchesLabel": "Показувати універсальні патчі",

View File

@ -1,7 +1,7 @@
{
"okButton": "Đồng ý",
"cancelButton": "Hủy",
"dismissButton": "Từ bỏ",
"dismissButton": "Đóng",
"quitButton": "Thoát",
"updateButton": "Cập nhật",
"suggested": "Được đề xuất: ${version}",
@ -9,7 +9,7 @@
"noButton": "Không",
"warning": "Cảnh báo",
"notice": "Lưu ý",
"noShowAgain": "Không hiển thị lại điều này",
"noShowAgain": "Không hiển thị lại nội dung này",
"add": "Thêm",
"remove": "Loại bỏ",
"showChangelogButton": "Hiển thị nhật ký thay đổi",
@ -25,7 +25,7 @@
"updatesSubtitle": "Các bản cập nhật",
"lastPatchedAppSubtitle": "Ứng dụng đã vá lần cuối",
"patchedSubtitle": "Các ứng dụng đã cài đặt",
"changeLaterSubtitle": "Bạn có thể thay đổi cài đặt này sau.",
"changeLaterSubtitle": "Bạn có thể thay đổi cài đặt này sau đó.",
"noSavedAppFound": "Không tìm thấy ứng dụng",
"noInstallations": "Không có ứng dụng đã vá nào được cài đặt",
"installUpdate": "Tiếp tục cài đặt bản cập nhật?",
@ -33,7 +33,7 @@
"updateDialogTitle": "Có bản cập nhật mới",
"updatePatchesSheetTitle": "Cập nhật Các bản vá ReVanced",
"updateChangelogTitle": "Nhật ký thay đổi",
"updateDialogText": "Có một bản cập nhật cho ${file}.\n\nPhiên bản đã cài hin tại là ${version}.",
"updateDialogText": "${file} đã có bản cập nhật mới.\n\nBạn đang dùng phiên bản ${version}.",
"downloadConsentDialogTitle": "Tải các tập tin cần thiết?",
"downloadConsentDialogText": "ReVanced Manager cần tải các tập tin cần thiết để hoạt động đúng cách.",
"downloadConsentDialogText2": "Điều này sẽ kết nối bạn đến ${url}.",
@ -54,7 +54,7 @@
"patcherView": {
"widgetTitle": "Trình vá",
"patchButton": "Vá",
"incompatibleArchWarningDialogText": "Việc vá ứng dụng trên kiến trúc này hiện chưa được hỗ trợ và có thể thất bại. Bạn vẫn muốn tiếp tục?",
"incompatibleArchWarningDialogText": "Việc vá trên kiến trúc này hiện chưa được hỗ trợ và có thể không thành công. Vẫn tiếp tục dù sao?",
"removedPatchesWarningDialogText": "Các bản vá đã loại bỏ từ lần cuối cùng bạn vá ứng dụng này:\n\n${patches}\n\n${newPatches}Vẫn tiếp tục?",
"addedPatchesDialogText": "Các bản vá đã thêm vào từ lần cuối cùng bạn vá ứng dụng này:\n\n${addedPatches}",
"requiredOptionDialogText": "Một số tùy chọn bản vá cần được thiết đặt."
@ -83,9 +83,9 @@
"selectFromStorageButton": "Chọn từ bộ nhớ",
"errorMessage": "Không thể dùng ứng dụng đã chọn",
"downloadToast": "Tính năng tải về chưa khả dụng",
"requireSuggestedAppVersionDialogText": "Phiên bản của ứng dụng bạn đã chọn không trùng khớp vói phiên bản được đề xuất có thể dẫn đến các phát sinh không mong muốn. Xin chọn ứng dụng khớp với phiên bản được đề xuất.\n\nPhiên bản đã chọn: ${selected}\nPhiên bản được đề xuất: ${suggested}\n\nĐể tiếp tục, tắt \"Yêu cầu phiên bản ứng dụng được đề xuất\" trong cài đặt.",
"requireSuggestedAppVersionDialogText": "Phiên bản của ứng dụng bạn đã chọn không khớp vi phiên bản được đề xuất có thể dẫn đến các sự cố không mong muốn. Vui lòng sử dụng phiên bản đề xuất.\n\nPhiên bản đã chọn: ${selected}\nPhiên bản được đề xuất: ${suggested}\n\nĐể tiếp tục, hãy tắt \"Yêu cầu phiên bản ứng dụng được đề xuất\" trong cài đặt.",
"featureNotAvailable": "Tính năng chưa triển khai",
"featureNotAvailableText": "Ứng dụng này là một APK tách rời và chỉ có thể được vá và cài một cách tin cậy bằng cách gắn kết với quyền root. Tuy nhiên, bạn có thể vá và cài APK đầy đủ bằng cách chọn chúng từ lưu trữ."
"featureNotAvailableText": "Ứng dụng này là một APK tách rời và chỉ có thể được vá và cài đặt một cách tin cậy bằng cách gắn kết với quyền root. Tuy nhiên, bạn có thể vá và cài đặt APK đầy đủ bằng cách chọn chúng từ kho lưu trữ."
},
"patchesSelectorView": {
"viewTitle": "Chọn bản vá",
@ -99,7 +99,7 @@
"noneChip": "Không có",
"noneTooltip": "Bỏ chọn tất cả bản vá",
"loadPatchesSelection": "Nạp các bản vá được chọn",
"noSavedPatches": "Không có bản vá cho ứng dụng được chọn\nNhấn Hoàn tất để lưu lựa chọn hiện tại.",
"noSavedPatches": "Không có bản vá nào được lưu cho ứng dụng đã chọn.\nNhấn Hoàn tất để lưu lựa chọn hiện tại.",
"noPatchesFound": "Không tìm thấy bản vá cho ứng dụng đã chọn",
"setRequiredOption": "Một số bản vá yêu cầu thiết đặt tùy chọn:\n\n${patches}\n\nXin thiết đặt chúng trước khi tiếp tục."
},
@ -121,12 +121,12 @@
"unsupportedDialogText": "Chọn bản vá này có thể gây lỗi khi vá.\n\nPhiên bản ứng dụng: ${packageVersion}\nPhiên bản được hỗ trợ: ${supportedVersions}",
"unsupportedPatchVersion": "Bản vá không được hỗ trợ cho phiên bản ứng dụng này.",
"unsupportedRequiredOption": "Bản vá này chứa một tùy chọn bắt buộc không được hỗ trợ bởi ứng dụng này",
"patchesChangeWarningDialogText": "Bạn nên sử dụng lựa chọn bản vá mặc định và các tùy chọn. Thay đổi chúng có thể dẫn đến các vấn đề không mong muốn.\n\nBạn cần bật \"Cho phép thay đổi lựa chọn đường dẫn\" trong cài đặt trước khi thay đổi bất kỳ lựa chọn đường dẫn nào.",
"patchesChangeWarningDialogText": "Nên sử dụng các tùy chọn và lựa chọn bản vá mặc định. Thay đổi chúng có thể dẫn đến các sự cố không mong muốn.\n\nBạn cần bật \"Cho phép thay đổi lựa chọn bản vá\" trong cài đặt trước khi thay đổi bất kỳ lựa chọn bản vá nào.",
"patchesChangeWarningDialogButton": "Dùng lựa chọn mặc định"
},
"installerView": {
"installType": "Chọn kiểu cài đặt",
"installTypeDescription": "Chọn kiểu cài đặt để thực hiện với nó.",
"installTypeDescription": "Chọn kiểu cài đặt để tiếp tục.",
"installButton": "Cài đặt",
"installRootType": "Gắn kết",
"installNonRootType": "Thông thường",
@ -137,8 +137,8 @@
"notificationText": "Nhấn để trở lại trình cài đặt",
"exportApkButtonTooltip": "Xuất APK đã vá",
"exportLogButtonTooltip": "Xuất nhật ký",
"screenshotDetected": "Một ảnh chụp màn hình đã được phát hiện. Nếu bạn đang cố chia sẻ nhật ký, xin thay bằng chia sẻ văn bản sao chép.\n\nSao chép nhật ký vào bảng tạm?",
"copiedToClipboard": "Đã sao chép nhật ký vào bảng tạm",
"screenshotDetected": "Đã phát hiện ảnh chụp màn hình. Nếu bạn đang cố chia sẻ nhật ký, vui lòng thay thế bằng chia sẻ văn bản sao chép.\n\nSao chép nhật ký vào bảng nhớ tạm?",
"copiedToClipboard": "Đã sao chép nhật ký vào bảng nhớ tạm",
"noExit": "Trình cài đặt vẫn đang chạy, không thể thoát..."
},
"settingsView": {
@ -152,15 +152,15 @@
"themeModeLabel": "Chủ đề ứng dụng",
"systemThemeLabel": "Hệ thống",
"lightThemeLabel": "Sáng",
"darkThemeLabel": "Chế độ tối",
"darkThemeLabel": "Tối",
"dynamicThemeLabel": "Cá nhân",
"dynamicThemeHint": "Tận hưởng trải nghiệm gần hơn với thiết bị của bạn",
"languageLabel": "Ngôn ngữ",
"languageUpdated": "Ngôn ngữ đã cập nhập",
"languageUpdated": "Ngôn ngữ đã được cập nhập",
"sourcesLabel": "Nguồn thay thế",
"sourcesLabelHint": "Cấu hình nguồn thay thế cho Bản vá ReVanced",
"sourcesLabelHint": "Cấu hình nguồn thay thế cho ReVanced Patches",
"useAlternativeSources": "Dùng nguồn thay thế",
"useAlternativeSourcesHint": "Dùng nguồn thay thế cho Bản vá ReVanced thay cho API",
"useAlternativeSourcesHint": "Dùng nguồn thay thế cho ReVanced Patches thay vì dùng API",
"sourcesResetDialogTitle": "Đặt lại",
"sourcesResetDialogText": "Bạn có chắc chắn muốn đặt lại nguồn của mình về giá trị mặc định không?",
"apiURLResetDialogText": "Bạn có chắc bạn muốn đặt lại API URL của bạn về giá trị mặc định của nó không?",
@ -175,11 +175,13 @@
"logsLabel": "Chia sẻ nhật ký",
"logsHint": "Chia sẻ nhật ký ReVanced Manager",
"enablePatchesSelectionLabel": "Cho phép thay đổi lựa chọn bản vá",
"enablePatchesSelectionHint": "Không ngăn chặn việc chọn hoặc bỏ chọn các bản vá",
"enablePatchesSelectionWarningText": "Thay đổi lựa chọn mặc định của các bản vá có thể gây vấn đề không ngờ tới.\n\nVẫn bật?",
"enablePatchesSelectionHint": "Không ngăn chặn chọn hoặc bỏ chọn các bản vá",
"enablePatchesSelectionWarningText": "Thay đổi lựa chọn mặc định của các bản vá có thể gây ra các sự cố không mong muốn.\n\nVẫn tiếp tục bật?",
"disablePatchesSelectionWarningText": "Bạn chuẩn bị tắt thay đổi lựa chọn các bản vá.\nLựa chọn mặc định các bản vá sẽ được khôi phục.\n\nVẫn tắt?",
"autoUpdatePatchesLabel": "Tự động cập nhật các bản vá",
"autoUpdatePatchesHint": "Tự động cập nhật các bản vá lên phiên bản mới nhất",
"usePrereleasesLabel": "Sử dụng bản phát hành trước",
"usePrereleasesWarningText": "Sử dụng các phiên bản phát hành trước có thể gây ra các sự cố không mong muốn.\n\nVẫn tiếp tục bật?",
"showUpdateDialogLabel": "Hiện hộp thoại cập nhật",
"showUpdateDialogHint": "Hiện một hộp thoại khi có một bản cập nhật",
"universalPatchesLabel": "Các bản vá phổ quát",
@ -290,8 +292,8 @@
"status_failure_invalid_description": "Việc cài đặt đã thất bại do ứng dụng đã vá không hợp lệ.\n\nGỡ cài đặt ứng dụng và thử lại?",
"status_failure_incompatible_description": "Ứng dụng không tương thích với thiết bị này.\n\nDùng một APK được hỗ trợ bởi thiết bị và thử lại.",
"status_failure_conflict_description": "Việc cài đặt đã bị ngăn chặn bởi bản cài đã có của ứng dụng.\n\nGỡ cài đặt ứng dụng đã cài và thử lại?",
"status_failure_blocked_description": "Việc cài đặt đã đã bị chặn bởi ${packageName}.\n\nĐiều chỉnh thiết lập bảo mật của bạn và thử lại.",
"install_failed_verification_failure_description": "Việc cài đặt đã thất bại do phát sinh xác minh.\n\nĐiều chỉnh thiết lập bảo mật của bạn và thử lại.",
"status_failure_blocked_description": "Quá trình cài đặt đã bị chặn bởi ${packageName}.\n\nĐiều chỉnh cài đặt bảo mật của bạn và thử lại.",
"install_failed_verification_failure_description": "Quá trình cài đặt không thành công do gặp lỗi xác minh.\n\nĐiều chỉnh cài đặt bảo mật của bạn và thử lại.",
"install_failed_version_downgrade_description": "Việc cài đặt đã thất bại do ứng dụng đã vá có phiên bản nhỏ hơn ứng dụng đã cài đặt.\n\nGỡ cài đặt ứng dụng và thử lại?",
"status_unknown_description": "Việc cài đặt đã thất bại do một lý do chưa rõ. Xin thử lại."
}

View File

@ -27,7 +27,7 @@
"patchedSubtitle": "已安裝應用程式",
"changeLaterSubtitle": "你稍後可以在設定中變更此選項。",
"noSavedAppFound": "找不到應用程式",
"noInstallations": "未安裝已修補應用程式",
"noInstallations": "未安裝已修補應用程式",
"installUpdate": "是否要繼續更新?",
"updateSheetTitle": "更新 ReVanced Manager",
"updateDialogTitle": "有可用的更新",
@ -99,7 +99,7 @@
"noneChip": "無",
"noneTooltip": "取消選取修補檔",
"loadPatchesSelection": "載入修補檔選項",
"noSavedPatches": "所選的應用程式沒有已儲存的修補選項。\n按下「完成」以儲存目前的選擇。",
"noSavedPatches": "所選的應用程式沒有已儲存的修補選項。\n按下「完成」以儲存目前的修補選項。",
"noPatchesFound": "找不到適合所選應用程式的修補檔",
"setRequiredOption": "某些修補檔選項需要進行設定:\n\n${patches}\n\n請在繼續之前進行設定。"
},

View File

@ -33,13 +33,16 @@ class GithubAPI {
});
}
Future<Map<String, dynamic>?> getLatestRelease(
String repoName,
) async {
Future<Map<String, dynamic>?> getLatestRelease(String repoName) async {
final String target =
_managerAPI.usePrereleases() ? '?per_page=1' : '/latest';
try {
final response = await _dioGetSynchronously(
'/repos/$repoName/releases/latest',
'/repos/$repoName/releases$target',
);
if (_managerAPI.usePrereleases()) {
return response.data.first;
}
return response.data;
} on Exception catch (e) {
if (kDebugMode) {
@ -50,7 +53,8 @@ class GithubAPI {
}
Future<String?> getChangelogs(bool isPatches) async {
final String repoName = isPatches
final String repoName =
isPatches
? _managerAPI.getPatchesRepo()
: _managerAPI.defaultManagerRepo;
try {
@ -58,7 +62,8 @@ class GithubAPI {
'/repos/$repoName/releases?per_page=50',
);
final buffer = StringBuffer();
final String version = isPatches
final String version =
isPatches
? _managerAPI.getLastUsedPatchesVersion()
: await _managerAPI.getCurrentManagerVersion();
int releases = 0;
@ -70,7 +75,7 @@ class GithubAPI {
}
break;
}
if (release['prerelease']) {
if (!_managerAPI.usePrereleases() && release['prerelease']) {
continue;
}
buffer.writeln(release['body']);
@ -96,25 +101,21 @@ class GithubAPI {
) async {
try {
if (url.isNotEmpty) {
return await _downloadManager.getSingleFile(
url,
);
return await _downloadManager.getSingleFile(url);
}
final response = await _dioGetSynchronously(
'/repos/$repoName/releases/tags/$version',
);
final Map<String, dynamic>? release = response.data;
if (release != null) {
final Map<String, dynamic>? asset =
(release['assets'] as List<dynamic>).firstWhereOrNull(
final Map<String, dynamic>? asset = (release['assets'] as List<dynamic>)
.firstWhereOrNull(
(asset) => (asset['name'] as String).endsWith(extension),
);
if (asset != null) {
final String downloadUrl = asset['browser_download_url'];
_managerAPI.setPatchesDownloadURL(downloadUrl);
return await _downloadManager.getSingleFile(
downloadUrl,
);
return await _downloadManager.getSingleFile(downloadUrl);
}
}
} on Exception catch (e) {

View File

@ -36,7 +36,6 @@ class ManagerAPI {
Patch? selectedPatch;
BuildContext? ctx;
bool isRooted = false;
bool releaseBuild = false;
bool suggestedAppVersionSelected = true;
bool isDynamicThemeAvailable = false;
bool isScopedStorageAvailable = false;
@ -63,11 +62,9 @@ class ManagerAPI {
isScopedStorageAvailable = sdkVersion >= 30; // ANDROID_11_SDK_VERSION = 30
storedPatchesFile =
(await getApplicationDocumentsDirectory()).path + storedPatchesFile;
if (kReleaseMode) {
releaseBuild = !(await getCurrentManagerVersion()).contains('-dev');
}
final hasMigratedToNewMigrationSystem = _prefs.getBool('migratedToNewApiPrefSystem') ?? false;
final hasMigratedToNewMigrationSystem =
_prefs.getBool('migratedToNewApiPrefSystem') ?? false;
if (!hasMigratedToNewMigrationSystem) {
final apiUrl = getApiUrl().toLowerCase();
@ -168,6 +165,18 @@ class ManagerAPI {
return _prefs.getBool('patchesAutoUpdate') ?? false;
}
bool usePrereleases() {
return _prefs.getBool('usePrereleases') ?? false;
}
void setPrereleases(bool value) {
_prefs.setBool('usePrereleases', value);
if (isPatchesAutoUpdate()) {
setCurrentPatchesVersion('0.0.0');
_toast.showBottom(t.settingsView.restartAppForChanges);
}
}
bool isPatchesChangeEnabled() {
return _prefs.getBool('patchesChangeEnabled') ?? false;
}
@ -207,14 +216,16 @@ class ManagerAPI {
List<Patch> getSavedPatches(String packageName) {
final List<String> patchesJson =
_prefs.getStringList('savedPatches-$packageName') ?? [];
final List<Patch> patches = patchesJson.map((String patchJson) {
final List<Patch> patches =
patchesJson.map((String patchJson) {
return Patch.fromJson(jsonDecode(patchJson));
}).toList();
return patches;
}
Future<void> savePatches(List<Patch> patches, String packageName) async {
final List<String> patchesJson = patches.map((Patch patch) {
final List<String> patchesJson =
patches.map((Patch patch) {
return jsonEncode(patch.toJson());
}).toList();
await _prefs.setStringList('savedPatches-$packageName', patchesJson);
@ -223,14 +234,16 @@ class ManagerAPI {
List<Patch> getUsedPatches(String packageName) {
final List<String> patchesJson =
_prefs.getStringList('usedPatches-$packageName') ?? [];
final List<Patch> patches = patchesJson.map((String patchJson) {
final List<Patch> patches =
patchesJson.map((String patchJson) {
return Patch.fromJson(jsonDecode(patchJson));
}).toList();
return patches;
}
Future<void> setUsedPatches(List<Patch> patches, String packageName) async {
final List<String> patchesJson = patches.map((Patch patch) {
final List<String> patchesJson =
patches.map((Patch patch) {
return jsonEncode(patch.toJson());
}).toList();
await _prefs.setStringList('usedPatches-$packageName', patchesJson);
@ -246,8 +259,9 @@ class ManagerAPI {
}
Option? getPatchOption(String packageName, String patchName, String key) {
final String? optionJson =
_prefs.getString('patchOption-$packageName-$patchName-$key');
final String? optionJson = _prefs.getString(
'patchOption-$packageName-$patchName-$key',
);
if (optionJson != null) {
final Option option = Option.fromJson(jsonDecode(optionJson));
return option;
@ -325,13 +339,7 @@ class ManagerAPI {
}
String getLocale() {
final String? savedLocale = _prefs.getString('locale');
if (savedLocale != null && savedLocale.isNotEmpty) {
return savedLocale;
} else {
final Locale deviceLocale = PlatformDispatcher.instance.locale;
return deviceLocale.languageCode.isNotEmpty ? deviceLocale.languageCode : 'en';
}
return _prefs.getString('locale') ?? Platform.localeName;
}
Future<void> setLocale(String value) async {
@ -346,9 +354,7 @@ class ManagerAPI {
}
Future<void> deleteKeystore() async {
final File keystore = File(
keystoreFile,
);
final File keystore = File(keystoreFile);
if (await keystore.exists()) {
await keystore.delete();
}
@ -370,17 +376,13 @@ class ManagerAPI {
Future<void> setLastPatchedApp(
PatchedApplication app,
File outFile,
File outFile
) async {
deleteLastPatchedApp();
final Directory appCache = await getApplicationSupportDirectory();
app.patchedFilePath =
outFile.copySync('${appCache.path}/lastPatchedApp.apk').path;
app.fileSize = outFile.lengthSync();
await _prefs.setString(
'lastPatchedApp',
json.encode(app.toJson()),
);
await _prefs.setString('lastPatchedApp', json.encode(app.toJson()));
}
List<PatchedApplication> getPatchedApps() {
@ -388,9 +390,7 @@ class ManagerAPI {
return apps.map((a) => PatchedApplication.fromJson(jsonDecode(a))).toList();
}
Future<void> setPatchedApps(
List<PatchedApplication> patchedApps,
) async {
Future<void> setPatchedApps(List<PatchedApplication> patchedApps) async {
if (patchedApps.length > 1) {
patchedApps.sort((a, b) => a.name.compareTo(b.name));
}
@ -403,10 +403,8 @@ class ManagerAPI {
Future<void> savePatchedApp(PatchedApplication app) async {
final List<PatchedApplication> patchedApps = getPatchedApps();
patchedApps.removeWhere((a) => a.packageName == app.packageName);
final ApplicationWithIcon? installed = await DeviceApps.getApp(
app.packageName,
true,
) as ApplicationWithIcon?;
final ApplicationWithIcon? installed =
await DeviceApps.getApp(app.packageName, true) as ApplicationWithIcon?;
if (installed != null) {
app.name = installed.appName;
app.version = installed.versionName!;
@ -446,12 +444,11 @@ class ManagerAPI {
try {
final String patchesJson = await PatcherAPI.patcherChannel.invokeMethod(
'getPatches',
{
'patchBundleFilePath': patchBundleFile.path,
},
{'patchBundleFilePath': patchBundleFile.path},
);
final List<dynamic> patchesJsonList = jsonDecode(patchesJson);
patches = patchesJsonList
patches =
patchesJsonList
.map((patchJson) => Patch.fromJson(patchJson))
.toList();
return patches;
@ -498,8 +495,9 @@ class ManagerAPI {
} else {
final release = await _githubAPI.getLatestRelease(getPatchesRepo());
if (release != null) {
final DateTime timestamp =
DateTime.parse(release['created_at'] as String);
final DateTime timestamp = DateTime.parse(
release['created_at'] as String,
);
return format(timestamp, locale: 'en_short');
} else {
return null;
@ -508,22 +506,16 @@ class ManagerAPI {
}
Future<String?> getLatestManagerReleaseTime() async {
return await _revancedAPI.getLatestReleaseTime(
'manager',
);
return await _revancedAPI.getLatestReleaseTime('manager');
}
Future<String?> getLatestManagerVersion() async {
return await _revancedAPI.getLatestReleaseVersion(
'manager',
);
return await _revancedAPI.getLatestReleaseVersion('manager');
}
Future<String?> getLatestPatchesVersion() async {
if (!isUsingAlternativeSources()) {
return await _revancedAPI.getLatestReleaseVersion(
'patches',
);
return await _revancedAPI.getLatestReleaseVersion('patches');
} else {
final release = await _githubAPI.getLatestRelease(getPatchesRepo());
if (release != null) {
@ -537,8 +529,9 @@ class ManagerAPI {
String getLastUsedPatchesVersion() {
final String lastPatchesVersions =
_prefs.getString('lastUsedPatchesVersion') ?? '{}';
final Map<String, dynamic> lastPatchesVersionMap =
jsonDecode(lastPatchesVersions);
final Map<String, dynamic> lastPatchesVersionMap = jsonDecode(
lastPatchesVersions,
);
final String repo = getPatchesRepo();
return lastPatchesVersionMap[repo] ?? '0.0.0';
}
@ -546,8 +539,9 @@ class ManagerAPI {
void setLastUsedPatchesVersion({String? version}) {
final String lastPatchesVersions =
_prefs.getString('lastUsedPatchesVersion') ?? '{}';
final Map<String, dynamic> lastPatchesVersionMap =
jsonDecode(lastPatchesVersions);
final Map<String, dynamic> lastPatchesVersionMap = jsonDecode(
lastPatchesVersions,
);
final repo = getPatchesRepo();
final String lastPatchesVersion =
version ?? lastPatchesVersionMap[repo] ?? '0.0.0';
@ -604,10 +598,8 @@ class ManagerAPI {
if (hasRootPermissions) {
final List<String> installedApps = await _rootAPI.getInstalledApps();
for (final String packageName in installedApps) {
final ApplicationWithIcon? application = await DeviceApps.getApp(
packageName,
true,
) as ApplicationWithIcon?;
final ApplicationWithIcon? application =
await DeviceApps.getApp(packageName, true) as ApplicationWithIcon?;
if (application != null) {
mountedApps.add(
PatchedApplication(
@ -628,12 +620,14 @@ class ManagerAPI {
}
Future<void> showPatchesChangeWarningDialog(BuildContext context) {
final ValueNotifier<bool> noShow =
ValueNotifier(!showPatchesChangeWarning());
final ValueNotifier<bool> noShow = ValueNotifier(
!showPatchesChangeWarning(),
);
return showDialog(
barrierDismissible: false,
context: context,
builder: (context) => PopScope(
builder:
(context) => PopScope(
canPop: false,
child: AlertDialog(
title: Text(t.warning),
@ -655,9 +649,7 @@ class ManagerAPI {
HapticCheckboxListTile(
value: value,
contentPadding: EdgeInsets.zero,
title: Text(
t.noShowAgain,
),
title: Text(t.noShowAgain),
onChanged: (selected) {
noShow.value = selected!;
},
@ -684,29 +676,21 @@ class ManagerAPI {
final List<PatchedApplication> patchedApps = getPatchedApps();
// Remove apps that are not installed anymore.
final List<PatchedApplication> toRemove =
await getAppsToRemove(patchedApps);
final List<PatchedApplication> toRemove = await getAppsToRemove(
patchedApps,
);
patchedApps.removeWhere((a) => toRemove.contains(a));
// Determine all apps that are installed by mounting.
final List<PatchedApplication> mountedApps = await getMountedApps();
mountedApps.removeWhere(
(app) => patchedApps
.any((patchedApp) => patchedApp.packageName == app.packageName),
(app) => patchedApps.any(
(patchedApp) => patchedApp.packageName == app.packageName,
),
);
patchedApps.addAll(mountedApps);
await setPatchedApps(patchedApps);
// Delete the saved app if the file is not found.
final PatchedApplication? lastPatchedApp = getLastPatchedApp();
if (lastPatchedApp != null) {
final File file = File(lastPatchedApp.patchedFilePath);
if (!file.existsSync()) {
deleteLastPatchedApp();
_prefs.remove('lastPatchedApp');
}
}
}
Future<bool> isAppUninstalled(PatchedApplication app) async {
@ -732,10 +716,7 @@ class ManagerAPI {
return app != null && app.isSplit;
}
Future<void> setSelectedPatches(
String app,
List<String> patches,
) async {
Future<void> setSelectedPatches(String app, List<String> patches) async {
final File selectedPatchesFile = File(storedPatchesFile);
final Map<String, dynamic> patchesMap = await readSelectedPatchesFile();
if (patches.isEmpty) {
@ -818,11 +799,11 @@ class ManagerAPI {
}
void resetAllOptions() {
_prefs.getKeys().where((key) => key.startsWith('patchOption-')).forEach(
(key) {
_prefs.getKeys().where((key) => key.startsWith('patchOption-')).forEach((
key,
) {
_prefs.remove(key);
},
);
});
}
Future<void> resetLastSelectedPatches() async {

View File

@ -14,6 +14,7 @@ import 'package:timeago/timeago.dart';
class RevancedAPI {
late final Dio _dio;
late final DownloadManager _downloadManager = locator<DownloadManager>();
late final ManagerAPI _managerAPI = locator<ManagerAPI>();
final Lock getToolsLock = Lock();
@ -43,15 +44,15 @@ class RevancedAPI {
return contributors;
}
Future<Map<String, dynamic>?> _getLatestRelease(
String toolName,
) {
Future<Map<String, dynamic>?> _getLatestRelease(String toolName) {
if (!locator<ManagerAPI>().getDownloadConsent()) {
return Future(() => null);
}
return getToolsLock.synchronized(() async {
try {
final response = await _dio.get('/$toolName');
final response = await _dio.get(
'/$toolName?prerelease=${_managerAPI.usePrereleases()}',
);
return response.data;
} on Exception catch (e) {
if (kDebugMode) {
@ -62,13 +63,9 @@ class RevancedAPI {
});
}
Future<String?> getLatestReleaseVersion(
String toolName,
) async {
Future<String?> getLatestReleaseVersion(String toolName) async {
try {
final Map<String, dynamic>? release = await _getLatestRelease(
toolName,
);
final Map<String, dynamic>? release = await _getLatestRelease(toolName);
if (release != null) {
return release['version'];
}
@ -81,13 +78,9 @@ class RevancedAPI {
return null;
}
Future<File?> getLatestReleaseFile(
String toolName,
) async {
Future<File?> getLatestReleaseFile(String toolName) async {
try {
final Map<String, dynamic>? release = await _getLatestRelease(
toolName,
);
final Map<String, dynamic>? release = await _getLatestRelease(toolName);
if (release != null) {
final String url = release['download_url'];
return await _downloadManager.getSingleFile(url);
@ -136,16 +129,13 @@ class RevancedAPI {
return outputFile;
}
Future<String?> getLatestReleaseTime(
String toolName,
) async {
Future<String?> getLatestReleaseTime(String toolName) async {
try {
final Map<String, dynamic>? release = await _getLatestRelease(
toolName,
);
final Map<String, dynamic>? release = await _getLatestRelease(toolName);
if (release != null) {
final DateTime timestamp =
DateTime.parse(release['created_at'] as String);
final DateTime timestamp = DateTime.parse(
release['created_at'] as String,
);
return format(timestamp, locale: 'en_short');
}
} on Exception catch (e) {

View File

@ -82,10 +82,13 @@ class HomeViewModel extends BaseViewModel {
);
flutterLocalNotificationsPlugin
.resolvePlatformSpecificImplementation<
AndroidFlutterLocalNotificationsPlugin>()
AndroidFlutterLocalNotificationsPlugin
>()
?.requestNotificationsPermission();
final bool isConnected = !(await Connectivity().checkConnectivity())
.contains(ConnectivityResult.none);
final bool isConnected =
!(await Connectivity().checkConnectivity()).contains(
ConnectivityResult.none,
);
if (!isConnected) {
_toast.showBottom(t.homeView.noConnection);
}
@ -106,8 +109,10 @@ class HomeViewModel extends BaseViewModel {
void navigateToAppInfo(PatchedApplication app, bool isLastPatchedApp) {
_navigationService.navigateTo(
Routes.appInfoView,
arguments:
AppInfoViewArguments(app: app, isLastPatchedApp: isLastPatchedApp),
arguments: AppInfoViewArguments(
app: app,
isLastPatchedApp: isLastPatchedApp,
),
);
}
@ -118,8 +123,8 @@ class HomeViewModel extends BaseViewModel {
Future<void> navigateToPatcher(PatchedApplication app) async {
locator<PatcherViewModel>().selectedApp = app;
locator<PatcherViewModel>().selectedPatches =
await _patcherAPI.getAppliedPatches(app.appliedPatches);
locator<PatcherViewModel>().selectedPatches = await _patcherAPI
.getAppliedPatches(app.appliedPatches);
locator<PatcherViewModel>().notifyListeners();
locator<NavigationViewModel>().setIndex(1);
}
@ -135,9 +140,6 @@ class HomeViewModel extends BaseViewModel {
}
Future<bool> hasManagerUpdates() async {
if (!_managerAPI.releaseBuild) {
return false;
}
latestManagerVersion =
await _managerAPI.getLatestManagerVersion() ?? _currentManagerVersion;
@ -151,10 +153,12 @@ class HomeViewModel extends BaseViewModel {
latestPatchesVersion = await _managerAPI.getLatestPatchesVersion();
if (latestPatchesVersion != null) {
try {
final int latestVersionInt =
int.parse(latestPatchesVersion!.replaceAll(RegExp('[^0-9]'), ''));
final int currentVersionInt =
int.parse(_currentPatchesVersion.replaceAll(RegExp('[^0-9]'), ''));
final int latestVersionInt = int.parse(
latestPatchesVersion!.replaceAll(RegExp('[^0-9]'), ''),
);
final int currentVersionInt = int.parse(
_currentPatchesVersion.replaceAll(RegExp('[^0-9]'), ''),
);
return latestVersionInt > currentVersionInt;
} on Exception catch (e) {
if (kDebugMode) {
@ -187,7 +191,8 @@ class HomeViewModel extends BaseViewModel {
await showDialog(
context: context,
barrierDismissible: false,
builder: (context) => PopScope(
builder:
(context) => PopScope(
canPop: false,
child: AlertDialog(
title: Text(t.homeView.downloadConsentDialogTitle),
@ -246,11 +251,13 @@ class HomeViewModel extends BaseViewModel {
}
void showUpdateDialog(BuildContext context, bool isPatches) {
final ValueNotifier<bool> noShow =
ValueNotifier(!_managerAPI.showUpdateDialog());
final ValueNotifier<bool> noShow = ValueNotifier(
!_managerAPI.showUpdateDialog(),
);
showDialog(
context: context,
builder: (innerContext) => AlertDialog(
builder:
(innerContext) => AlertDialog(
title: Text(t.homeView.updateDialogTitle),
content: ValueListenableBuilder(
valueListenable: noShow,
@ -261,8 +268,10 @@ class HomeViewModel extends BaseViewModel {
children: [
Text(
t.homeView.updateDialogText(
file: isPatches ? 'ReVanced Patches' : 'ReVanced Manager',
version: isPatches
file:
isPatches ? 'ReVanced Patches' : 'ReVanced Manager',
version:
isPatches
? _currentPatchesVersion
: _currentManagerVersion,
),
@ -326,7 +335,8 @@ class HomeViewModel extends BaseViewModel {
_toast.showBottom(t.homeView.downloadingMessage);
showDialog(
context: context,
builder: (context) => ValueListenableBuilder(
builder:
(context) => ValueListenableBuilder(
valueListenable: downloaded,
builder: (context, value, child) {
return AlertDialog(
@ -468,7 +478,8 @@ class HomeViewModel extends BaseViewModel {
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.vertical(top: Radius.circular(24.0)),
),
builder: (context) => UpdateConfirmationSheet(
builder:
(context) => UpdateConfirmationSheet(
isPatches: isPatches,
changelog: changelog,
),

View File

@ -125,7 +125,7 @@ class InstallerViewModel extends BaseViewModel {
});
await WakelockPlus.enable();
await handlePlatformChannelMethods();
await runPatcher(context);
await runPatcher();
}
Future<dynamic> handlePlatformChannelMethods() async {
@ -164,6 +164,16 @@ class InstallerViewModel extends BaseViewModel {
_managerAPI.setLastUsedPatchesVersion(
version: _managerAPI.patchesVersion,
);
_app.appliedPatches = _patches.map((p) => p.name).toList();
if (_managerAPI.isLastPatchedAppEnabled()) {
await _managerAPI.setLastPatchedApp(_app, _patcherAPI.outFile!);
} else {
_app.patchedFilePath = _patcherAPI.outFile!.path;
}
final homeViewModel = locator<HomeViewModel>();
_managerAPI
.reAssessPatchedApps()
.then((_) => homeViewModel.getPatchedApps());
} else if (value == -100.0) {
isPatching = false;
hasErrors = true;
@ -187,7 +197,7 @@ class InstallerViewModel extends BaseViewModel {
notifyListeners();
}
Future<void> runPatcher(BuildContext context) async {
Future<void> runPatcher() async {
try {
await _patcherAPI.runPatcher(
_app.packageName,
@ -195,16 +205,6 @@ class InstallerViewModel extends BaseViewModel {
_patches,
_app.isFromStorage,
);
_app.appliedPatches = _patches.map((p) => p.name).toList();
if (_managerAPI.isLastPatchedAppEnabled()) {
await _managerAPI.setLastPatchedApp(_app, _patcherAPI.outFile!);
} else {
_app.patchedFilePath = _patcherAPI.outFile!.path;
}
final homeViewModel = locator<HomeViewModel>();
_managerAPI
.reAssessPatchedApps()
.then((_) => homeViewModel.getPatchedApps());
} on Exception catch (e) {
update(
-100.0,
@ -506,7 +506,7 @@ class InstallerViewModel extends BaseViewModel {
_app.isRooted = installAsRoot;
if (headerLogs != 'Installing...') {
update(
.85,
-1.0,
'Installing...',
_app.isRooted ? 'Mounting patched app' : 'Installing patched app',
);
@ -534,7 +534,7 @@ class InstallerViewModel extends BaseViewModel {
update(1.0, 'Installed', 'Installed');
} else if (response == 3) {
update(
.85,
-1.0,
'Installation canceled',
'Installation canceled',
);
@ -542,7 +542,7 @@ class InstallerViewModel extends BaseViewModel {
installResult(context, installAsRoot);
} else {
update(
.85,
-1.0,
'Installation failed',
'Installation failed',
);

View File

@ -40,6 +40,10 @@ class SettingsViewModel extends BaseViewModel {
notifyListeners();
}
bool usePrereleases() {
return _managerAPI.usePrereleases();
}
bool showUpdateDialog() {
return _managerAPI.showUpdateDialog();
}
@ -64,6 +68,45 @@ class SettingsViewModel extends BaseViewModel {
return _managerAPI.isUsingAlternativeSources();
}
Future<void> showUsePrereleasesDialog(
BuildContext context,
bool value,
) async {
if (value) {
return showDialog(
context: context,
builder:
(context) => AlertDialog(
title: Text(t.warning),
content: Text(
t.settingsView.usePrereleasesWarningText,
style: const TextStyle(
fontSize: 16,
fontWeight: FontWeight.w500,
),
),
actions: [
TextButton(
onPressed: () {
_managerAPI.setPrereleases(true);
Navigator.of(context).pop();
},
child: Text(t.yesButton),
),
FilledButton(
onPressed: () {
Navigator.of(context).pop();
},
child: Text(t.noButton),
),
],
),
);
} else {
_managerAPI.setPrereleases(false);
}
}
Future<void> showPatchesChangeEnableDialog(
bool value,
BuildContext context,
@ -71,7 +114,8 @@ class SettingsViewModel extends BaseViewModel {
if (value) {
return showDialog(
context: context,
builder: (context) => AlertDialog(
builder:
(context) => AlertDialog(
title: Text(t.warning),
content: Text(
t.settingsView.enablePatchesSelectionWarningText,
@ -101,7 +145,8 @@ class SettingsViewModel extends BaseViewModel {
} else {
return showDialog(
context: context,
builder: (context) => AlertDialog(
builder:
(context) => AlertDialog(
title: Text(t.warning),
content: Text(
t.settingsView.disablePatchesSelectionWarningText,
@ -173,7 +218,8 @@ class SettingsViewModel extends BaseViewModel {
if (!value) {
return showDialog(
context: context,
builder: (context) => AlertDialog(
builder:
(context) => AlertDialog(
title: Text(t.warning),
content: Text(
t.settingsView.requireSuggestedAppVersionDialogText,
@ -249,9 +295,7 @@ class SettingsViewModel extends BaseViewModel {
Future<void> importSettings() async {
try {
final String? result = await FlutterFileDialog.pickFile(
params: const OpenFileDialogParams(
fileExtensionsFilter: ['json'],
),
params: const OpenFileDialogParams(fileExtensionsFilter: ['json']),
);
if (result != null) {
final File inFile = File(result);
@ -298,9 +342,7 @@ class SettingsViewModel extends BaseViewModel {
if (isPatchesChangeEnabled()) {
try {
final String? result = await FlutterFileDialog.pickFile(
params: const OpenFileDialogParams(
fileExtensionsFilter: ['json'],
),
params: const OpenFileDialogParams(fileExtensionsFilter: ['json']),
);
if (result != null) {
final File inFile = File(result);
@ -393,8 +435,9 @@ class SettingsViewModel extends BaseViewModel {
.replaceAll(':', '')
.replaceAll('T', '')
.replaceAll('.', '');
final File logcat =
File('${logDir.path}/revanced-manager_logcat_$dateTime.log');
final File logcat = File(
'${logDir.path}/revanced-manager_logcat_$dateTime.log',
);
final String logs = await Logcat.execute();
logcat.writeAsStringSync(logs);
await Share.shareXFiles([XFile(logcat.path)]);

View File

@ -5,6 +5,7 @@ import 'package:revanced_manager/gen/strings.g.dart';
import 'package:revanced_manager/ui/views/settings/settingsFragment/settings_manage_api_url.dart';
import 'package:revanced_manager/ui/widgets/settingsView/settings_section.dart';
import 'package:revanced_manager/ui/widgets/settingsView/settings_use_alternative_sources.dart';
import 'package:revanced_manager/ui/widgets/settingsView/settings_use_prereleases.dart';
class SDataSection extends StatelessWidget {
const SDataSection({super.key});
@ -15,6 +16,7 @@ class SDataSection extends StatelessWidget {
title: t.settingsView.dataSectionTitle,
children: const <Widget>[
SManageApiUrlUI(),
SUsePrereleases(),
SUseAlternativeSources(),
],
);

View File

@ -0,0 +1,32 @@
import 'package:flutter/material.dart';
import 'package:revanced_manager/gen/strings.g.dart';
import 'package:revanced_manager/ui/views/settings/settings_viewmodel.dart';
import 'package:revanced_manager/ui/widgets/shared/haptics/haptic_switch_list_tile.dart';
class SUsePrereleases extends StatefulWidget {
const SUsePrereleases({super.key});
@override
State<SUsePrereleases> createState() => _SUsePrereleasesState();
}
final _settingsViewModel = SettingsViewModel();
class _SUsePrereleasesState extends State<SUsePrereleases> {
@override
Widget build(BuildContext context) {
return HapticSwitchListTile(
contentPadding: const EdgeInsets.symmetric(horizontal: 20.0),
title: Text(
t.settingsView.usePrereleasesLabel,
style: const TextStyle(fontSize: 20, fontWeight: FontWeight.w500),
),
subtitle: Text(t.settingsView.usePrereleasesHint),
value: _settingsViewModel.usePrereleases(),
onChanged: (value) async {
await _settingsViewModel.showUsePrereleasesDialog(context, value);
setState(() {});
},
);
}
}

View File

@ -34,10 +34,10 @@ packages:
dependency: transitive
description:
name: args
sha256: bf9f5caeea8d8fe6721a9c358dd8a5c1947b27f1cfaa18b39c301273594919e6
sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04
url: "https://pub.dev"
source: hosted
version: "2.6.0"
version: "2.7.0"
async:
dependency: transitive
description:
@ -74,10 +74,10 @@ packages:
dependency: transitive
description:
name: build_daemon
sha256: "294a2edaf4814a378725bfe6358210196f5ea37af89ecd81bfa32960113d4948"
sha256: "8e928697a82be082206edb0b9c99c5a4ad6bc31c9e9b8b2f291ae65cd4a25daa"
url: "https://pub.dev"
source: hosted
version: "4.0.3"
version: "4.0.4"
build_resolvers:
dependency: transitive
description:
@ -114,10 +114,10 @@ packages:
dependency: transitive
description:
name: built_value
sha256: "28a712df2576b63c6c005c465989a348604960c0958d28be5303ba9baa841ac2"
sha256: "082001b5c3dc495d4a42f1d5789990505df20d8547d42507c29050af6933ee27"
url: "https://pub.dev"
source: hosted
version: "8.9.3"
version: "8.10.1"
characters:
dependency: transitive
description:
@ -162,10 +162,10 @@ packages:
dependency: "direct main"
description:
name: connectivity_plus
sha256: "04bf81bb0b77de31557b58d052b24b3eee33f09a6e7a8c68a3e247c7df19ec27"
sha256: "051849e2bd7c7b3bc5844ea0d096609ddc3a859890ec3a9ac4a65a2620cc1f99"
url: "https://pub.dev"
source: hosted
version: "6.1.3"
version: "6.1.4"
connectivity_plus_platform_interface:
dependency: transitive
description:
@ -210,18 +210,18 @@ packages:
dependency: transitive
description:
name: dart_style
sha256: "7856d364b589d1f08986e140938578ed36ed948581fbc3bc9aef1805039ac5ab"
sha256: "7306ab8a2359a48d22310ad823521d723acfed60ee1f7e37388e8986853b6820"
url: "https://pub.dev"
source: hosted
version: "2.3.7"
version: "2.3.8"
dbus:
dependency: transitive
description:
name: dbus
sha256: "365c771ac3b0e58845f39ec6deebc76e3276aa9922b0cc60840712094d9047ac"
sha256: "79e0c23480ff85dc68de79e2cd6334add97e48f7f4865d17686dd6ea81a47e8c"
url: "https://pub.dev"
source: hosted
version: "0.7.10"
version: "0.7.11"
device_apps:
dependency: "direct main"
description:
@ -235,10 +235,10 @@ packages:
dependency: "direct main"
description:
name: device_info_plus
sha256: "306b78788d1bb569edb7c55d622953c2414ca12445b41c9117963e03afc5c513"
sha256: "0c6396126421b590089447154c5f98a5de423b70cfb15b1578fd018843ee6f53"
url: "https://pub.dev"
source: hosted
version: "11.3.3"
version: "11.4.0"
device_info_plus_platform_interface:
dependency: transitive
description:
@ -251,10 +251,10 @@ packages:
dependency: "direct main"
description:
name: dio
sha256: "5598aa796bbf4699afd5c67c0f5f6e2ed542afc956884b9cd58c306966efc260"
sha256: "253a18bbd4851fecba42f7343a1df3a9a4c1d31a2c1b37e221086b4fa8c8dbc9"
url: "https://pub.dev"
source: hosted
version: "5.7.0"
version: "5.8.0+1"
dio_cache_interceptor:
dependency: "direct main"
description:
@ -267,10 +267,10 @@ packages:
dependency: transitive
description:
name: dio_web_adapter
sha256: "33259a9276d6cea88774a0000cfae0d861003497755969c92faa223108620dc8"
sha256: "7586e476d70caecaf1686d21eee7247ea43ef5c345eab9e0cc3583ff13378d78"
url: "https://pub.dev"
source: hosted
version: "2.0.0"
version: "2.1.1"
dynamic_color:
dependency: "direct main"
description:
@ -299,10 +299,10 @@ packages:
dependency: transitive
description:
name: fake_async
sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc"
url: "https://pub.dev"
source: hosted
version: "1.3.3"
version: "1.3.2"
ffi:
dependency: transitive
description:
@ -323,10 +323,10 @@ packages:
dependency: "direct main"
description:
name: file_picker
sha256: "7423298f08f6fc8cce05792bae329f9a93653fc9c08712831b1a55540127995d"
sha256: "77f8e81d22d2a07d0dee2c62e1dda71dc1da73bf43bb2d45af09727406167964"
url: "https://pub.dev"
source: hosted
version: "9.0.2"
version: "10.1.9"
fixnum:
dependency: transitive
description:
@ -405,18 +405,18 @@ packages:
dependency: "direct main"
description:
name: flutter_markdown
sha256: e7bbc718adc9476aa14cfddc1ef048d2e21e4e8f18311aaac723266db9f9e7b5
sha256: "08fb8315236099ff8e90cb87bb2b935e0a724a3af1623000a9cec930468e0f27"
url: "https://pub.dev"
source: hosted
version: "0.7.6+2"
version: "0.7.7+1"
flutter_plugin_android_lifecycle:
dependency: transitive
description:
name: flutter_plugin_android_lifecycle
sha256: "615a505aef59b151b46bbeef55b36ce2b6ed299d160c51d84281946f0aa0ce0e"
sha256: f948e346c12f8d5480d2825e03de228d0eb8c3a737e4cdaa122267b89c022b5e
url: "https://pub.dev"
source: hosted
version: "2.0.24"
version: "2.0.28"
flutter_test:
dependency: transitive
description: flutter
@ -463,10 +463,10 @@ packages:
dependency: transitive
description:
name: get
sha256: e4e7335ede17452b391ed3b2ede016545706c01a02292a6c97619705e7d2a85e
sha256: c79eeb4339f1f3deffd9ec912f8a923834bec55f7b49c9e882b8fef2c139d425
url: "https://pub.dev"
source: hosted
version: "4.6.6"
version: "4.7.2"
get_it:
dependency: transitive
description:
@ -479,10 +479,10 @@ packages:
dependency: transitive
description:
name: glob
sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63"
sha256: c3f1ee72c96f8f78935e18aa8cecced9ab132419e8625dc187e1c2408efc20de
url: "https://pub.dev"
source: hosted
version: "2.1.2"
version: "2.1.3"
google_fonts:
dependency: "direct main"
description:
@ -503,10 +503,10 @@ packages:
dependency: transitive
description:
name: http
sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010
sha256: "2c11f3f94c687ee9bad77c171151672986360b2b001d109814ee7140b2cf261b"
url: "https://pub.dev"
source: hosted
version: "1.2.2"
version: "1.4.0"
http_multi_server:
dependency: transitive
description:
@ -519,10 +519,10 @@ packages:
dependency: transitive
description:
name: http_parser
sha256: "76d306a1c3afb33fe82e2bbacad62a61f409b5634c915fceb0d799de1a913360"
sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571"
url: "https://pub.dev"
source: hosted
version: "4.1.1"
version: "4.1.2"
injectable:
dependency: "direct main"
description:
@ -543,10 +543,10 @@ packages:
dependency: "direct main"
description:
name: intl
sha256: "3df61194eb431efc39c4ceba583b95633a403f46c9fd341e550ce0bfa50e9aa5"
sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf
url: "https://pub.dev"
source: hosted
version: "0.20.2"
version: "0.19.0"
io:
dependency: transitive
description:
@ -559,18 +559,10 @@ packages:
dependency: transitive
description:
name: js
sha256: c1b2e9b5ea78c45e1a0788d29606ba27dc5f71f019f32ca5140f61ef071838cf
sha256: "53385261521cc4a0c4658fd0ad07a7d14591cf8fc33abbceae306ddb974888dc"
url: "https://pub.dev"
source: hosted
version: "0.7.1"
json2yaml:
dependency: transitive
description:
name: json2yaml
sha256: da94630fbc56079426fdd167ae58373286f603371075b69bf46d848d63ba3e51
url: "https://pub.dev"
source: hosted
version: "3.0.1"
version: "0.7.2"
json_annotation:
dependency: "direct main"
description:
@ -599,10 +591,10 @@ packages:
dependency: transitive
description:
name: leak_tracker
sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0"
sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec
url: "https://pub.dev"
source: hosted
version: "10.0.9"
version: "10.0.8"
leak_tracker_flutter_testing:
dependency: transitive
description:
@ -623,10 +615,10 @@ packages:
dependency: transitive
description:
name: lints
sha256: "4a16b3f03741e1252fda5de3ce712666d010ba2122f8e912c94f9f7b90e1a4c3"
sha256: c35bb79562d980e9a453fc715854e1ed39e24e7d0297a880ef54e17f9874a9d7
url: "https://pub.dev"
source: hosted
version: "5.1.0"
version: "5.1.1"
logcat:
dependency: "direct main"
description:
@ -664,10 +656,10 @@ packages:
dependency: transitive
description:
name: markdown
sha256: ef2a1298144e3f985cc736b22e0ccdaf188b5b3970648f2d9dc13efd1d9df051
sha256: "935e23e1ff3bc02d390bad4d4be001208ee92cc217cb5b5a6c19bc14aaa318c1"
url: "https://pub.dev"
source: hosted
version: "7.2.2"
version: "7.3.0"
matcher:
dependency: transitive
description:
@ -720,10 +712,10 @@ packages:
dependency: transitive
description:
name: package_config
sha256: "92d4488434b520a62570293fbd33bb556c7d49230791c1b4bbd973baf6d2dc67"
sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc
url: "https://pub.dev"
source: hosted
version: "2.1.1"
version: "2.2.0"
package_info_plus:
dependency: "direct main"
description:
@ -760,10 +752,10 @@ packages:
dependency: transitive
description:
name: path_provider_android
sha256: "4adf4fd5423ec60a29506c76581bc05854c55e3a0b72d35bb28d661c9686edf2"
sha256: d0d310befe2c8ab9e7f393288ccbb11b60c019c6b5afc21973eeee4dda2b35e9
url: "https://pub.dev"
source: hosted
version: "2.2.15"
version: "2.2.17"
path_provider_foundation:
dependency: transitive
description:
@ -800,26 +792,26 @@ packages:
dependency: "direct main"
description:
name: permission_handler
sha256: "59adad729136f01ea9e35a48f5d1395e25cba6cea552249ddbe9cf950f5d7849"
sha256: "2d070d8684b68efb580a5997eb62f675e8a885ef0be6e754fb9ef489c177470f"
url: "https://pub.dev"
source: hosted
version: "11.4.0"
version: "12.0.0+1"
permission_handler_android:
dependency: transitive
description:
name: permission_handler_android
sha256: d3971dcdd76182a0c198c096b5db2f0884b0d4196723d21a866fc4cdea057ebc
sha256: "1e3bc410ca1bf84662104b100eb126e066cb55791b7451307f9708d4007350e6"
url: "https://pub.dev"
source: hosted
version: "12.1.0"
version: "13.0.1"
permission_handler_apple:
dependency: transitive
description:
name: permission_handler_apple
sha256: f84a188e79a35c687c132a0a0556c254747a08561e99ab933f12f6ca71ef3c98
sha256: f000131e755c54cf4d84a5d8bd6e4149e262cc31c5a8b1d698de1ac85fa41023
url: "https://pub.dev"
source: hosted
version: "9.4.6"
version: "9.4.7"
permission_handler_html:
dependency: transitive
description:
@ -848,10 +840,10 @@ packages:
dependency: transitive
description:
name: petitparser
sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27
sha256: "07c8f0b1913bcde1ff0d26e57ace2f3012ccbf2b204e070290dad3bb22797646"
url: "https://pub.dev"
source: hosted
version: "6.0.2"
version: "6.1.0"
platform:
dependency: transitive
description:
@ -880,26 +872,26 @@ packages:
dependency: transitive
description:
name: provider
sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c
sha256: "4abbd070a04e9ddc287673bf5a030c7ca8b685ff70218720abab8b092f53dd84"
url: "https://pub.dev"
source: hosted
version: "6.1.2"
version: "6.1.5"
pub_semver:
dependency: transitive
description:
name: pub_semver
sha256: "7b3cfbf654f3edd0c6298ecd5be782ce997ddf0e00531b9464b55245185bbbbd"
sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585"
url: "https://pub.dev"
source: hosted
version: "2.1.5"
version: "2.2.0"
pubspec_parse:
dependency: transitive
description:
name: pubspec_parse
sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8
sha256: "0560ba233314abbed0a48a2956f7f022cce7c3e1e73df540277da7544cad4082"
url: "https://pub.dev"
source: hosted
version: "1.3.0"
version: "1.5.0"
recase:
dependency: transitive
description:
@ -954,18 +946,18 @@ packages:
dependency: "direct main"
description:
name: shared_preferences
sha256: "846849e3e9b68f3ef4b60c60cf4b3e02e9321bc7f4d8c4692cf87ffa82fc8a3a"
sha256: "6e8bf70b7fef813df4e9a36f658ac46d107db4b4cfe1048b477d4e453a8159f5"
url: "https://pub.dev"
source: hosted
version: "2.5.2"
version: "2.5.3"
shared_preferences_android:
dependency: transitive
description:
name: shared_preferences_android
sha256: "02a7d8a9ef346c9af715811b01fbd8e27845ad2c41148eefd31321471b41863d"
sha256: "20cbd561f743a342c76c151d6ddb93a9ce6005751e7aa458baad3858bfbfb6ac"
url: "https://pub.dev"
source: hosted
version: "2.4.0"
version: "2.4.10"
shared_preferences_foundation:
dependency: transitive
description:
@ -994,10 +986,10 @@ packages:
dependency: transitive
description:
name: shared_preferences_web
sha256: d2ca4132d3946fec2184261726b355836a82c33d7d5b67af32692aff18a4684e
sha256: c49bd060261c9a3f0ff445892695d6212ff603ef3115edbb448509d407600019
url: "https://pub.dev"
source: hosted
version: "2.4.2"
version: "2.4.3"
shared_preferences_windows:
dependency: transitive
description:
@ -1018,10 +1010,10 @@ packages:
dependency: transitive
description:
name: shelf_web_socket
sha256: cc36c297b52866d203dbf9332263c94becc2fe0ceaa9681d07b6ef9807023b67
sha256: "3632775c8e90d6c9712f883e633716432a27758216dfb61bd86a8321c0580925"
url: "https://pub.dev"
source: hosted
version: "2.0.1"
version: "3.0.0"
skeletons:
dependency: "direct main"
description:
@ -1040,18 +1032,18 @@ packages:
dependency: "direct main"
description:
name: slang
sha256: "354283dfe5d6b5bb72d17a52c2acba0ad08c98f8de317a00aa2c801814093982"
sha256: "6668a08355b370d5cb5446fc869c4492ed23c6433934fe88228876460fedac22"
url: "https://pub.dev"
source: hosted
version: "4.5.0"
version: "4.7.2"
slang_flutter:
dependency: "direct main"
description:
name: slang_flutter
sha256: "6891526b13641dd2667ce60a9a65ef2c1611f838105396e5e8ad39edc4ecb191"
sha256: fff13b6fc8b0378ee23856c4f9fd7f8e2777b430090681f4d19ab14c47de9bc6
url: "https://pub.dev"
source: hosted
version: "4.5.0"
version: "4.7.0"
source_gen:
dependency: transitive
description:
@ -1088,34 +1080,34 @@ packages:
dependency: transitive
description:
name: sqflite
sha256: "2d7299468485dca85efeeadf5d38986909c5eb0cd71fd3db2c2f000e6c9454bb"
sha256: e2297b1da52f127bc7a3da11439985d9b536f75070f3325e62ada69a5c585d03
url: "https://pub.dev"
source: hosted
version: "2.4.1"
version: "2.4.2"
sqflite_android:
dependency: transitive
description:
name: sqflite_android
sha256: "78f489aab276260cdd26676d2169446c7ecd3484bbd5fead4ca14f3ed4dd9ee3"
sha256: "2b3070c5fa881839f8b402ee4a39c1b4d561704d4ebbbcfb808a119bc2a1701b"
url: "https://pub.dev"
source: hosted
version: "2.4.0"
version: "2.4.1"
sqflite_common:
dependency: transitive
description:
name: sqflite_common
sha256: "761b9740ecbd4d3e66b8916d784e581861fd3c3553eda85e167bc49fdb68f709"
sha256: "84731e8bfd8303a3389903e01fb2141b6e59b5973cacbb0929021df08dddbe8b"
url: "https://pub.dev"
source: hosted
version: "2.5.4+6"
version: "2.5.5"
sqflite_darwin:
dependency: transitive
description:
name: sqflite_darwin
sha256: "96a698e2bc82bd770a4d6aab00b42396a7c63d9e33513a56945cbccb594c2474"
sha256: "279832e5cde3fe99e8571879498c9211f3ca6391b0d818df4e17d9fff5c6ccb3"
url: "https://pub.dev"
source: hosted
version: "2.4.1"
version: "2.4.2"
sqflite_platform_interface:
dependency: transitive
description:
@ -1225,10 +1217,10 @@ packages:
dependency: "direct main"
description:
name: timezone
sha256: ffc9d5f4d1193534ef051f9254063fa53d588609418c84299956c3db9383587d
sha256: dd14a3b83cfd7cb19e7888f1cbc20f258b8d71b54c06f79ac585f14093a287d1
url: "https://pub.dev"
source: hosted
version: "0.10.0"
version: "0.10.1"
timing:
dependency: transitive
description:
@ -1265,18 +1257,18 @@ packages:
dependency: transitive
description:
name: url_launcher_android
sha256: "6fc2f56536ee873eeb867ad176ae15f304ccccc357848b351f6f0d8d4a40d193"
sha256: "8582d7f6fe14d2652b4c45c9b6c14c0b678c2af2d083a11b604caeba51930d79"
url: "https://pub.dev"
source: hosted
version: "6.3.14"
version: "6.3.16"
url_launcher_ios:
dependency: transitive
description:
name: url_launcher_ios
sha256: "16a513b6c12bb419304e72ea0ae2ab4fed569920d1c7cb850263fe3acc824626"
sha256: "7f2022359d4c099eea7df3fdf739f7d3d3b9faf3166fb1dd390775176e0b76cb"
url: "https://pub.dev"
source: hosted
version: "6.3.2"
version: "6.3.3"
url_launcher_linux:
dependency: transitive
description:
@ -1305,18 +1297,18 @@ packages:
dependency: transitive
description:
name: url_launcher_web
sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e"
sha256: "4bd2b7b4dc4d4d0b94e5babfffbca8eac1a126c7f3d6ecbc1a11013faa3abba2"
url: "https://pub.dev"
source: hosted
version: "2.3.3"
version: "2.4.1"
url_launcher_windows:
dependency: transitive
description:
name: url_launcher_windows
sha256: "44cf3aabcedde30f2dba119a9dea3b0f2672fbe6fa96e85536251d678216b3c4"
sha256: "3284b6d2ac454cf34f114e1d3319866fdd1e19cdc329999057e44ffe936cfa77"
url: "https://pub.dev"
source: hosted
version: "3.1.3"
version: "3.1.4"
uuid:
dependency: transitive
description:
@ -1337,26 +1329,26 @@ packages:
dependency: transitive
description:
name: vm_service
sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02
sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14"
url: "https://pub.dev"
source: hosted
version: "15.0.0"
version: "14.3.1"
wakelock_plus:
dependency: "direct main"
description:
name: wakelock_plus
sha256: "36c88af0b930121941345306d259ec4cc4ecca3b151c02e3a9e71aede83c615e"
sha256: a474e314c3e8fb5adef1f9ae2d247e57467ad557fa7483a2b895bc1b421c5678
url: "https://pub.dev"
source: hosted
version: "1.2.10"
version: "1.3.2"
wakelock_plus_platform_interface:
dependency: transitive
description:
name: wakelock_plus_platform_interface
sha256: "70e780bc99796e1db82fe764b1e7dcb89a86f1e5b3afb1db354de50f2e41eb7a"
sha256: e10444072e50dbc4999d7316fd303f7ea53d31c824aa5eb05d7ccbdd98985207
url: "https://pub.dev"
source: hosted
version: "1.2.2"
version: "1.2.3"
watcher:
dependency: transitive
description:
@ -1369,34 +1361,34 @@ packages:
dependency: transitive
description:
name: web
sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb
sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a"
url: "https://pub.dev"
source: hosted
version: "1.1.0"
version: "1.1.1"
web_socket:
dependency: transitive
description:
name: web_socket
sha256: "3c12d96c0c9a4eec095246debcea7b86c0324f22df69893d538fcc6f1b8cce83"
sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c"
url: "https://pub.dev"
source: hosted
version: "0.1.6"
version: "1.0.1"
web_socket_channel:
dependency: transitive
description:
name: web_socket_channel
sha256: "9f187088ed104edd8662ca07af4b124465893caf063ba29758f97af57e61da8f"
sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8
url: "https://pub.dev"
source: hosted
version: "3.0.1"
version: "3.0.3"
win32:
dependency: transitive
description:
name: win32
sha256: b89e6e24d1454e149ab20fbb225af58660f0c0bf4475544650700d8e2da54aef
sha256: "329edf97fdd893e0f1e3b9e88d6a0e627128cc17cc316a8d67fda8f1451178ba"
url: "https://pub.dev"
source: hosted
version: "5.11.0"
version: "5.13.0"
win32_registry:
dependency: transitive
description:
@ -1425,10 +1417,10 @@ packages:
dependency: transitive
description:
name: yaml
sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5"
sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce
url: "https://pub.dev"
source: hosted
version: "3.1.2"
version: "3.1.3"
sdks:
dart: ">=3.7.0 <4.0.0"
flutter: ">=3.29.0"
flutter: ">=3.29.3"

View File

@ -4,11 +4,11 @@ homepage: https://revanced.app
publish_to: 'none'
version: 1.24.1-dev.5+101800060
version: 1.25.0-dev.1+101800061
environment:
sdk: '>=3.7.0'
flutter: '>=3.29.0'
flutter: '>=3.29.3 <=3.32.0' # Do NOT use 3.32.0, sees https://github.com/flutter/flutter/issues/169215
dependencies:
animations: ^2.0.11
@ -24,7 +24,7 @@ dependencies:
dynamic_color: ^1.7.0
dynamic_themes: ^1.1.0
expandable: ^5.0.1
file_picker: ^9.0.2
file_picker: ^10.1.9
flutter:
sdk: flutter
flutter_background: ^1.3.0+1
@ -47,7 +47,7 @@ dependencies:
ref: 4a6d5e0e22292c8eb160cfb9365b9ea29735fd43 # Branch: master
package_info_plus: ^8.3.0
path_provider: ^2.1.5
permission_handler: ^11.4.0
permission_handler: ^12.0.0
root:
git:
url: https://github.com/validcube/root