10 Commits

Author SHA1 Message Date
zarazaex69 4a2d62b671 feat(dns): improve VPN DNS configuration and filtering 2026-04-10 16:33:32 +03:00
zarazaex69 4acca4e554 chore: remove unused list file 2026-04-10 16:19:23 +03:00
zarazaex69 b875613fb3 chore(mmkv): update MMKV database files and checksums 2026-04-10 12:55:40 +03:00
zarazaex69 d9d21061fa chore(mmkv): update SETTING database files 2026-04-10 12:52:23 +03:00
zarazaex69 fc7804fc1e chore(mmkv): update SETTING database files 2026-04-10 12:46:03 +03:00
zarazaex69 4e9de615a4 chore(mmkv): update asset database files and remove unused ASSET store 2026-04-10 12:43:38 +03:00
zarazaex69 7617ce898c chore: remove KEY subscription setup script 2026-04-10 12:41:09 +03:00
zarazaex69 8d284fd68a feat(subscription): add KEY subscription s 2026-04-10 11:49:49 +03:00
zarazaex69 0f28310801 refactor(config): deduplicate profiles during batch save operation 2026-04-10 11:27:30 +03:00
zarazaex69 a46123aeab chore(build): update APK binary with latest changes 2026-04-10 11:24:55 +03:00
20 changed files with 47 additions and 24 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -125,7 +125,7 @@ object AppConfig {
const val DNS_PROXY = "https://1.1.1.1/dns-query"
const val DNS_DIRECT = "223.5.5.5"
const val DNS_VPN = "https://1.1.1.1/dns-query"
const val DNS_VPN = "1.1.1.1"
const val GEOSITE_PRIVATE = "geosite:private"
const val GEOSITE_CN = "geosite:cn"
const val GEOIP_PRIVATE = "geoip:private"
@@ -273,26 +273,35 @@ object AngConfigManager {
private fun batchSaveConfigs(configs: List<ProfileItem>, subid: String): Map<String, ProfileItem> {
val keyToProfile = mutableMapOf<String, ProfileItem>()
// Read serverList once
val serverList = MmkvManager.decodeServerList(subid)
var needSetSelected = MmkvManager.getSelectServer().isNullOrBlank()
configs.forEach { config ->
val key = Utils.getUuid()
// Save profile directly without updating serverList
MmkvManager.encodeProfileDirect(key, JsonUtil.toJson(config))
val existingProfiles = serverList.mapNotNull { guid ->
MmkvManager.decodeServerConfig(guid)?.let { guid to it }
}.toMap()
if (!serverList.contains(key)) {
serverList.add(0, key)
if (needSetSelected) {
MmkvManager.setSelectServer(key)
needSetSelected = false
configs.forEach { config ->
val existingKey = existingProfiles.entries.firstOrNull { (_, existing) ->
existing == config
}?.key
if (existingKey != null) {
keyToProfile[existingKey] = config
} else {
val key = Utils.getUuid()
MmkvManager.encodeProfileDirect(key, JsonUtil.toJson(config))
if (!serverList.contains(key)) {
serverList.add(0, key)
if (needSetSelected) {
MmkvManager.setSelectServer(key)
needSetSelected = false
}
}
keyToProfile[key] = config
}
keyToProfile[key] = config
}
// Write serverList once
MmkvManager.encodeServerList(serverList, subid)
return keyToProfile
}
@@ -346,7 +346,7 @@ object SettingsManager {
*/
fun getVpnDnsServers(): List<String> {
val vpnDns = MmkvManager.decodeSettingsString(AppConfig.PREF_VPN_DNS) ?: AppConfig.DNS_VPN
return vpnDns.split(",").filter { Utils.isPureIpAddress(it) }
return vpnDns.split(",").filter { it.isNotBlank() }
}
/**
@@ -594,6 +594,7 @@ object V2rayConfigManager {
val remoteDns = SettingsManager.getRemoteDnsServers()
val domesticDns = SettingsManager.getDomesticDnsServers()
val vpnDns = if (SettingsManager.isVpnMode()) SettingsManager.getVpnDnsServers() else emptyList()
val proxyDomain = getUserRule2Domain(AppConfig.TAG_PROXY)
val directDomain = getUserRule2Domain(AppConfig.TAG_DIRECT)
val isCnRoutingMode = directDomain.contains(AppConfig.GEOSITE_CN)
@@ -620,8 +621,14 @@ object V2rayConfigManager {
)
}
remoteDns.forEach {
servers.add(it)
if (vpnDns.isNotEmpty()) {
vpnDns.forEach {
servers.add(it)
}
} else {
remoteDns.forEach {
servers.add(it)
}
}
val blkDomain = getUserRule2Domain(AppConfig.TAG_BLOCKED)
@@ -228,13 +228,13 @@ class V2RayVpnService : VpnService(), ServiceControl {
}
}
// Configure DNS servers
//if (MmkvManager.decodeSettingsBool(AppConfig.PREF_LOCAL_DNS_ENABLED) == true) {
// builder.addDnsServer(PRIVATE_VLAN4_ROUTER)
//} else {
SettingsManager.getVpnDnsServers().forEach {
if (Utils.isPureIpAddress(it)) {
builder.addDnsServer(it)
if (MmkvManager.decodeSettingsBool(AppConfig.PREF_LOCAL_DNS_ENABLED) == true) {
builder.addDnsServer(vpnConfig.ipv4Router)
} else {
SettingsManager.getVpnDnsServers().forEach {
if (Utils.isPureIpAddress(it)) {
builder.addDnsServer(it)
}
}
}
BIN
View File
Binary file not shown.
+8
View File
@@ -136,9 +136,17 @@ fun main() {
)
println("Добавлена подписка БЕЛЫЕ W: $guid2")
val guid3 = manager.addSubscription(
remarks = "KEY",
url = "https://key.zarazaex.xyz/sub",
autoUpdate = true
)
println("Добавлена подписка KEY: $guid3")
println("\nОбновление подписок...")
manager.updateSubscription(guid1, "https://raw.githubusercontent.com/zieng2/wl/refs/heads/main/vless_universal.txt")
manager.updateSubscription(guid2, "https://raw.githubusercontent.com/whoahaow/rjsxrd/refs/heads/main/githubmirror/bypass/bypass-all.txt")
manager.updateSubscription(guid3, "https://key.zarazaex.xyz/sub")
println("\nПодписки успешно добавлены и обновлены в $mmkvPath")
}
-1
View File
@@ -1 +0,0 @@
ТЫ