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…