Gradle 9.8.1 fixes three high-severity advisories that affect Gradle
9.0.0 to 9.8.0 (GHSA-mvvg-497x-hmj8, GHSA-xwqc-3h47-hg64,
GHSA-j5m7-59rp-24f5). Kotlin 2.4.21 is a bug-fix release for 2.4.20;
the app's Kotlin compiler output is byte-identical to the 2.4.20 build.
* Azerbaijani localization support
Azerbaijani localization support
* Add Azerbaijani language support in arrays.xml
* Fix
---------
Co-authored-by: 2dust <31833384+2dust@users.noreply.github.com>
In root mode, DNS (port 53) is marked into the tun and reaches the
core's SOCKS inbound as a UDP relay to the original resolver address
(e.g. 192.168.1.1:53). The core's routing rule
{inboundTag=socks, port=53, outboundTag=dns-out} should intercept it
and resolve via the configured remote DNS (e.g. Cloudflare DoH).
However, when the system DNS server is a private/LAN IP and the user
has a geoip:private → direct routing rule, that rule matches the
destination IP (192.168.1.1) and sends the DNS query straight to the
LAN resolver (ISP DNS) — bypassing dns-out entirely. This causes:
- DNS poisoning for domains the ISP blocks/poisons
- CDN mis-resolution (wrong POP)
- Intermittent 'some sites work, some don't' behavior
Fix: add iptables nat OUTPUT DNAT to rewrite DNS queries destined for
private/LAN CIDRs to the configured remote DNS server (or 1.1.1.1
fallback), mirroring the existing tethered-client DNAT in
buildLanShareSetup. This prevents geoip:private from matching, so
dns-out can resolve via the proxy.
Verified on OnePlus 13R (OxygenOS 16, WildKernel v2.2.0-r4):
- Before: youtube.com → 185.45.5.35 (fake ISP IP), timeout
- After DNAT to 1.1.1.1: youtube.com → 142.251.45.14 (real), 301
- tcpdump confirms response source changes from 192.168.1.1 to
correct resolution through the proxy
Give least-ping and least-load groups their own first member as fallback so missing or failed probes cannot send a matched routing rule through the main profile. Keep least-load on its burst observatory and preserve random and round-robin fallback behavior. Cover group isolation and observatory selection with regression tests.
The test gave RootProcessRunner.run a 250 ms deadline. When sh takes
longer than that to start and finish, the runner hits the deadline,
destroys it and returns -1, and the test fails with
"expected: <0> but was: <-1>". With the sh from Git for Windows this
happened in 6 of 30 runs.
The test's real guard is the 1500 ms elapsed bound against the
background "sleep 5". A 3000 ms deadline leaves that bound alone to
decide the result, so a runner that keeps a finished command open until
its deadline now fails the test as well; with 250 ms it passed.
* Azerbaijani localization
Azerbaijani language support added
* Delete V2rayNG/app/src/main/res/values-az
* Azerbaijani localization support
Azerbaijani translations are now available
* Fix
* Add Azerbaijani language selection
* Update Azerbaijani strings in strings.xml
* Fix string formatting in Azerbaijani resource file
* feat(wireguard): add features from the new core version
- The `local` value is no longer allowed for `remoteDNS`. If this value is passed in the profile, the core will panic while calling `netip.MustParseAddr`.
- Add the `targetStrategy` field to `OutboundBean`.
- The `domainStrategy` field has been removed from `OutSettingsBean`. Any value passed for `domainStrategy` is now ignored.
* update locales
- ru,en - handwritten.
- other - AI-generated.
* Keep fractional numbers when saving JSON array subscriptions
toJsonPretty wrote every Double through toInt(), so 0.4 became 0 and
values above Int.MAX_VALUE were clamped. Write whole numbers as Long
and leave other values as Double.
Fixes#6291
* Add a JsonUtil test for numbers in config arrays
* Update JsonUtil.kt
---------
Co-authored-by: 2dust <31833384+2dust@users.noreply.github.com>
2026-10-06 14:41:29 +08:00
26 changed files with 730 additions and 60 deletions
<stringname="menu_item_import_config_policy_group">[Siyasət qrupu] əlavə et</string>
<stringname="menu_item_import_config_proxy_chain">[Proksi zənciri] əlavə et</string>
<stringname="menu_item_import_config_manually_vmess">[VMess] əlavə et</string>
<stringname="menu_item_import_config_manually_vless">[VLESS] əlavə et</string>
<stringname="menu_item_import_config_manually_ss">[Shadowsocks] əlavə et</string>
<stringname="menu_item_import_config_manually_socks">[SOCKS] əlavə et</string>
<stringname="menu_item_import_config_manually_http">[HTTP] əlavə et</string>
<stringname="menu_item_import_config_manually_trojan">[Trojan] əlavə et</string>
<stringname="menu_item_import_config_manually_wireguard">[WireGuard] əlavə et</string>
<stringname="menu_item_import_config_manually_hysteria2">[Hysteria2] əlavə et</string>
<stringname="confirm_delete_visible_profiles">Hazırda göstərilən bütün profilləri silmək istədiyinizə əminsiniz?</string>
<stringname="confirm_delete_duplicate_profiles">Hazırda göstərilən bütün təkrar profilləri silmək istədiyinizə əminsiniz?</string>
<stringname="confirm_delete_invalid_profiles">Zəhmət olmasa əvvəlcə profilləri sınaqdan keçirin. Hazırda göstərilən bütün yararsız profilləri silmək istədiyinizə əminsiniz?</string>
<stringname="server_lab_browser_dialer_tip">Yalnız xhttp (packet-up) və ws çıxışlarını dəstəkləyir; TLS ilə bağlı tənzimləmələr nəzərə alınmaya və ya ziddiyyət təşkil edə bilər</string>
<stringname="toast_allow_insecure_deprecated">Cari düyün şifrələnməmiş bağlantı istifadə edir. Ünsiyyətiniz avtoritar hökumətlər tərəfindən idarə olunan şəbəkə vasitəçiləri tərəfindən birbaşa izlənilə bilər.\nTəhlükəsizlik səbəbiylə, bu tür düyünlərə Xray core 26.2.6+ versiyası ilə qoşulmaq mümkün deyil.\nƏgər bu özünüzün yaratdığı düyündürsə, xahiş olunur TLS kimi təhlükəsizlik şifrələməsini aktivləşdirin və ya pinnedCA256 sertifikatını bərkidib istifadə edin.\nƏgər bu xidmət təminatçısının düyünüdürsə, texniki yenilənməni tamamlamaq üçün xidmət təminatçısı ilə əlaqə saxlayın. Xidmət təminatçısı əməkdaşlıq etməkdən imtina edərsə, istifadəçi təhlükəsizliyinə daha çox önəm verən başqa bir provayderə keçməyiniz tövsiyə olunur.\nƏtraflı məlumat üçün https://github.com/2dust/v2rayN/discussions/9460 ünvanına daxil olun</string>
<stringname="pinned_ca256_action_fetch">Sertifikatın barmaq izini əldə et</string>
<stringname="toast_fetch_cert_sha256_success">Sertifikatın barmaq izi uğurla əldə edildi</string>
<stringname="toast_fetch_cert_sha256_failed">Sertifikatın barmaq izini əldə etmək mümkün olmadı</string>
<!-- UserAssetActivity -->
<stringname="toast_asset_copy_failed">Fayl kopyalanması uğursuz oldu, zəhmət olmasa Fayl Menecerindən istifadə edin</string>
<stringname="menu_item_add_asset">Resurs əlavə et</string>
<stringname="menu_item_add_file">Fayllar əlavə et</string>
<stringname="menu_item_add_url">URL əlavə et</string>
<stringname="menu_item_scan_qrcode">QR kodu skanla</string>
<stringname="title_pref_per_app_proxy">Tətbiq üzrə proksi</string>
<stringname="summary_pref_per_app_proxy">Ümumi: seçilmiş tətbiqlər proksidən istifadə edir, seçilməyənlər birbaşa qoşulur;\nYayınma rejimi: seçilmiş tətbiqlər birbaşa qoşulur, seçilməyənlər proksidən istifadə edir.\nProksi istifadə etməli olan tətbiqlərin avtomatik seçilməsi seçimi menyudadır.</string>
<stringname="summary_pref_is_booted">Cihaz işə düşdükdən sonra avtomatik olaraq seçilmiş serverə qoşulun. Android fonda başladılmanı məhdudlaşdıra bilər.</string>
<stringname="summary_system_vpn_settings">Bu cihaz dəstəkləyirsə, Həmişə açıq VPN-i konfiqurasiya etmək üçün Android VPN tənzimləmələrini açın.</string>
<stringname="subscription_updater_job_tips">Tapşırıq arxa fonda icra olunacaq və gedişat məlumatı bildirişdə göstəriləcək.</string>
<stringname="title_pref_auto_test_after_update_subscription">Abunəlik yeniləndikdən sonra avtomatik sınaqdan keçir</string>
<stringname="summary_pref_auto_test_after_update_subscription">Avtomatlaşdırılmış sınaq uzun çəkir. Aktivləşdirilərsə, tapşırıq arxa fonda işləyəcək; əks halda, cari səhifədə icra olunacaq.</string>
<stringname="title_pref_auto_remove_invalid_after_test">Sınaqdan sonra yararsız konfiqurasiyaları avtomatik sil</string>
<stringname="summary_pref_auto_remove_invalid_after_test">Sınaq nəticələri dəqiq olmaya bilər; silinmiş konfiqurasiyanı bərpa etmək mümkün deyil.</string>
<stringname="title_pref_auto_sort_after_test">Sınaqdan sonra avtomatik çeşidlə</string>
<stringname="summary_pref_auto_sort_after_test">Sınaq nəticələri dəqiq olmaya bilər;</string>
<stringname="summary_pref_mux_enabled">Daha sürətlidir, lakin bağlantı qeyri-sabitliyinə səbəb ola bilər\nAşağıda TCP, UDP və QUIC idarəetməsini fərdiləşdirin</string>
<stringname="title_pref_mux_concurrency">TCP bağlantıları (diapazon -1 ilə 1024 arası)</string>
<stringname="title_pref_mux_xudp_concurrency">XUDP bağlantıları (diapazon -1 ilə 1024 arası)</string>
<stringname="title_pref_mux_xudp_quic">Mux tunelində QUIC idarə edilməsi</string>
<stringname="summary_pref_speed_enabled">Cari sürəti bildiriş panelində göstərin.\nİkona proksi və ya birbaşa trafikin üstünlük təşkil etdiyini bildirir.</string>
<stringname="summary_pref_route_only_enabled">Təyin edilmiş domen adını yalnız marşrutlaşdırma üçün istifadə edin və hədəf ünvanını IP ünvanı olaraq saxlayın.</string>
<stringname="summary_pref_local_dns_enabled">DNS nüvənin DNS modulu tərəfindən emal olunur LAN və ölkə daxili ünvanları yan keçmək lazımdırsa tövsiyə olunur)</string>
<stringname="summary_pref_fake_dns_enabled">FakeDNS domen sorğuları üçün süni IP ünvanları qaytarır (daha sürətlidir, lakin bəzi tətbiqlərlə işləməyə bilər).</string>
<stringname="title_pref_proxy_sharing_enabled">LAN qoşulmalarına icazə ver</string>
<stringname="summary_pref_proxy_sharing_enabled">Digər cihazlar yerli proksi vasitəsilə sizin IP ünvanınızla proksiyə qoşula bilər. İcazəsiz qoşulmaların qarşısını almaq üçün yalnız etibarlı şəbəkələrdə aktivləşdirin</string>
<stringname="toast_warning_pref_proxysharing_short">LAN-dan qoşulmalara icazə verilir. Etibarlı şəbəkədə olduğunuzdan əmin olun</string>
<stringname="summary_pref_enable_local_proxy">Qapalı olduqda, SOCKS proksi əlçatan olmur, buna görə də abunəlik yenilənmələri və bənzər əməliyyatlar proksidən istifadə edə bilmir</string>
<stringname="summary_pref_confirm_remove">Konfiqurasiya silinərkən istifadəçidən ikinci təsdiqin tələb olunub-olunmaması</string>
<stringname="title_pref_append_http_proxy">VPN-ə HTTP proksi əlavə et</string>
<stringname="summary_pref_append_http_proxy">Brauzerlərə və dəstəklənən tətbiqlərə virtual şəbəkə interfeysi əvəzinə birbaşa HTTP proksidən istifadə etməyə icazə verin (Android 10+).</string>
<stringname="title_pref_double_column_display">İki sütunlu düzülüşdən istifadə et</string>
<stringname="summary_pref_double_column_display">Ekrana daha çox məzmun sığdırmaq üçün profil siyahısını iki sütunda göstərin.</string>
<stringname="title_pref_group_all_display">"Hamısı" qrup vərəqini göstər</string>
<stringname="summary_pref_group_all_display">Hər abunəlik qrupundakı profilləri bir vərəqdə birləşdirin.</string>
<stringname="summary_pref_auto_update_subscription">Abunəliklərinizi arxa fonda təyin olunmuş intervallarla avtomatik yeniləyin. Cihazdan asılı olaraq bu funksiya həmişə işləməyə bilər</string>
<stringname="summary_root_mode_enabled">Aşağı səviyyəli şəffaf proksiləmə üçün root icazəsindən istifadə edin. Root rejimi Android VPN xidmətindən istifadə etmək əvəzinə şəbəkə trafikini birbaşa idarə edir. Root rejimi aktiv olduqda standart rejim, tətbiq üzrə marşrutlaşdırma və VPN ilə bağlı tənzimləmələr tətbiq edilmir.</string>
<stringname="toast_root_required">Bu funksiya üçün Root icazəsi tələb olunur</string>
<stringname="title_root_lan_sharing">VPN-i LAN / modem rejimindəki cihazlarla paylaş (root istifadəçiləri)</string>
<stringname="summary_root_lan_sharing">Wi-Fi giriş nöqtəsi (hotspot) və USB modem rejiminə qoşulmuş cihazların trafikini VPN vasitəsilə yönləndirin.</string>
<stringname="sub_setting_pre_profile_tip">Konfiqurasiya qeydlərinin mövcud olduğundan və unikal olduğundan əmin olun</string>
<stringname="sub_setting_entry_proxy_tip">Seçilmiş proksi, bu abunəlikdəki hər bir profilin əvvəlinə həmin profil üçün proksi zəncirindəki giriş keçidi olaraq əlavə edilir.</string>
<stringname="sub_setting_exit_proxy_tip">Seçilmiş proksi, bu abunəlikdəki hər bir profilin sonuna həmin profil üçün proksi zəncirindəki çıxış keçidi olaraq əlavə edilir.</string>
<stringname="routing_settings_tips">Qayda yalnız bütün konfiqurasiya edilmiş uyğunlaşma şərtləri yerinə yetirildikdə (VƏ) tətbiq olunur. Qaydalar yuxarıdan aşağıya doğru yoxlanılır; uyğun gələn ilk qayda tətbiq edilir.</string>
<stringname="routing_settings_process">proses (Paket Adı — yalnız Xray TUN istifadə edildikdə, routeOnly aktiv olduqda və Android 10+ versiyasında dəstəklənir)</string>
<stringname="routing_settings_process_select">Paket adını seçin</string>
<stringname="message_profile_storage_cleanup">Artıq heç bir qrup tərəfindən istifadə edilməyən profil məlumatları silinsin? Seçilmiş profillər və təhlükəsiz təsnif edilə bilməyən məlumatlar saxlanılacaq.</string>
<stringname="server_lab_reserved">Reserved (không bắt buộc, phân cách bằng dấu phẩy)</string>
<stringname="server_lab_local_address">Địa chỉ cục bộ (IPv4/IPv6 không bắt buộc, phân cách bằng dấu phẩy)</string>
<stringname="server_lab_local_mtu">MTU (không bắt buộc, mặc định 1420)</string>
<stringname="server_lab_remote_dns">remoteDNS (tùy chọn, các địa chỉ IPv4/IPv6 cách nhau bằng dấu phẩy, hoặc "local" để dùng DNS của thiết bị)</string>
<stringname="server_lab_remote_dns">remoteDNS (tùy chọn, các địa chỉ IPv4/IPv6 cách nhau bằng dấu phẩy)</string>
<stringname="server_lab_kcp_mtu">mKCP MTU (không bắt buộc, mặc định 1350)</string>
<stringname="server_lab_kcp_tti">mKCP TTI (không bắt buộc, mặc định 50 ms)</string>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.