From fd57019e73346ed010ba21039683d11bddb0858d Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Thu, 16 Apr 2026 09:56:35 +0800 Subject: [PATCH] Add conditional process routing and routing strings --- .../com/v2ray/ang/handler/SettingsManager.kt | 23 +++++++++++++++++++ .../v2ray/ang/handler/V2rayConfigManager.kt | 14 +++++++---- .../com/v2ray/ang/ui/RoutingEditActivity.kt | 4 ++++ .../app/src/main/res/values-ar/strings.xml | 9 ++++++++ .../app/src/main/res/values-bn/strings.xml | 9 ++++++++ .../app/src/main/res/values-vi/strings.xml | 9 ++++++++ .../src/main/res/values-zh-rCN/strings.xml | 9 ++++++++ .../src/main/res/values-zh-rTW/strings.xml | 9 ++++++++ V2rayNG/app/src/main/res/values/strings.xml | 20 ++++++++-------- 9 files changed, 91 insertions(+), 15 deletions(-) diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/handler/SettingsManager.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/handler/SettingsManager.kt index 948cb323..a233fbf1 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/handler/SettingsManager.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/handler/SettingsManager.kt @@ -2,6 +2,7 @@ package com.v2ray.ang.handler import android.content.Context import android.content.res.AssetManager +import android.os.Build import android.text.TextUtils import com.v2ray.ang.util.LogUtil import androidx.appcompat.app.AppCompatDelegate @@ -472,6 +473,28 @@ object SettingsManager { return mode == null || mode == VPN } + /** + * Check if process routing can be used. + */ + fun canUseProcessRouting(): Boolean { + // Android 10+ + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { + return false + } + + // Must xray tun + if (isUsingHevTun()) { + return false + } + + // Must have route only enabled + if (MmkvManager.decodeSettingsBool(AppConfig.PREF_ROUTE_ONLY_ENABLED, false) == false) { + return false + } + + return true + } + /** * Ensure default settings are present in MMKV. */ diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/handler/V2rayConfigManager.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/handler/V2rayConfigManager.kt index 2b213f32..eef992aa 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/handler/V2rayConfigManager.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/handler/V2rayConfigManager.kt @@ -498,12 +498,16 @@ object V2rayConfigManager { rule.ip = updatedIpList } - // Convert process package names to UIDs - rule.process?.let { processList -> - if (processList.isNotEmpty()) { - val uids = PackageUidResolver.packageNamesToUids(context, processList) - rule.process = uids.ifEmpty { null } + if (SettingsManager.canUseProcessRouting()) { + // Convert process package names to UIDs + rule.process?.let { processList -> + if (processList.isNotEmpty()) { + val uids = PackageUidResolver.packageNamesToUids(context, processList) + rule.process = uids.ifEmpty { null } + } } + } else { + rule.process = null } v2rayConfig.routing.rules.add(rule) diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/RoutingEditActivity.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/RoutingEditActivity.kt index 18057702..ab46b3d7 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/ui/RoutingEditActivity.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/ui/RoutingEditActivity.kt @@ -35,6 +35,10 @@ class RoutingEditActivity : BaseActivity() { } else { clearServer() } + + SettingsManager.canUseProcessRouting().let { canUse -> + binding.etProcess.isEnabled = canUse + } } private fun bindingServer(rulesetItem: RulesetItem): Boolean { diff --git a/V2rayNG/app/src/main/res/values-ar/strings.xml b/V2rayNG/app/src/main/res/values-ar/strings.xml index 917ffba5..f76db279 100644 --- a/V2rayNG/app/src/main/res/values-ar/strings.xml +++ b/V2rayNG/app/src/main/res/values-ar/strings.xml @@ -331,6 +331,15 @@ استيراد مجموعة قواعد من رمز الاستجابة السريعة Export ruleset to clipboard Locked, keep this rule when import presets + domain + ip + process (Package Name — only supported when using Xray TUN, routeOnly enabled, and Android 10+) + port + protocol + [http,tls,bittorrent] + network + [udp|tcp] + outboundTag التحقق من الاتصال يجري الاختبار… diff --git a/V2rayNG/app/src/main/res/values-bn/strings.xml b/V2rayNG/app/src/main/res/values-bn/strings.xml index bf671226..51a3c747 100644 --- a/V2rayNG/app/src/main/res/values-bn/strings.xml +++ b/V2rayNG/app/src/main/res/values-bn/strings.xml @@ -330,6 +330,15 @@ QRcode থেকে রুলসেট আমদানি করুন Export ruleset to clipboard Locked, keep this rule when import presets + domain + ip + process (Package Name — only supported when using Xray TUN, routeOnly enabled, and Android 10+) + port + protocol + [http,tls,bittorrent] + network + [udp|tcp] + outboundTag সংযোগ পরীক্ষা করুন পরীক্ষা চলছে… diff --git a/V2rayNG/app/src/main/res/values-vi/strings.xml b/V2rayNG/app/src/main/res/values-vi/strings.xml index dd9992fa..86701ce3 100644 --- a/V2rayNG/app/src/main/res/values-vi/strings.xml +++ b/V2rayNG/app/src/main/res/values-vi/strings.xml @@ -331,6 +331,15 @@ Nhập bộ quy tắc từ QRcode Export ruleset to clipboard Locked, keep this rule when import presets + domain + ip + process (Package Name — only supported when using Xray TUN, routeOnly enabled, and Android 10+) + port + protocol + [http,tls,bittorrent] + network + [udp|tcp] + outboundTag Kiểm tra kết nối Đang kiểm tra kết nối mạng... diff --git a/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml b/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml index ab3953bb..bc062b87 100644 --- a/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml +++ b/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml @@ -329,6 +329,15 @@ 从 QRcode 导入规则集 导出规则集至剪贴板 锁定中,导入预设时不删除此规则 + domain + ip + process (包名 — 仅在使用 Xray 的 TUN、开启 routeOnly 且 Android 10+ 时可用) + port + protocol + [http,tls,bittorrent] + network + [udp|tcp] + outboundTag "检查网络连接" "测试中…" diff --git a/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml b/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml index e87c6da0..0d86c26c 100644 --- a/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml +++ b/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml @@ -329,6 +329,15 @@ 從二維碼匯入規則集 匯出規則集至剪貼簿 鎖定中,匯入預設時不刪除此規則 + domain + ip + process (套件名稱 — 僅在使用 Xray 的 TUN、開啟 routeOnly 且 Android 10+ 時可用) + port + protocol + [http,tls,bittorrent] + network + [udp|tcp] + outboundTag "測試連線能力" "測試中……" diff --git a/V2rayNG/app/src/main/res/values/strings.xml b/V2rayNG/app/src/main/res/values/strings.xml index ee3772e1..81e875e4 100644 --- a/V2rayNG/app/src/main/res/values/strings.xml +++ b/V2rayNG/app/src/main/res/values/strings.xml @@ -68,7 +68,7 @@ kcp seed gRPC serviceName TLS - Fingerprint + Fingerprint Alpn allowInsecure SNI @@ -334,15 +334,15 @@ Import ruleset from QRcode Export ruleset to clipboard Locked, keep this rule when import presets - domain - ip - process (Package Name, Only supports xray tun) - port - protocol - [http,tls,bittorrent] - network - [udp|tcp] - outboundTag + domain + ip + process (Package Name — only supported when using Xray TUN, routeOnly enabled, and Android 10+) + port + protocol + [http,tls,bittorrent] + network + [udp|tcp] + outboundTag Check Connectivity Testing…