L×Box v2.25.12
A patch on top of v2.25.11.
Every JSON field and the config editor now run on a native Android editor:
the keyboard no longer covers the text, keyboard arrows and Copy work, and
JSON fields get a Format button. Every screen with a Save button asks before
dropping unsaved edits. Your own WireGuard/AmneziaWG nodes get a Masquerade
section. A new intent re-tests every Direction at once. Direct connections
get a configurable connect timeout. REALITY nodes no longer get the global
TLS fragmentation. Core v1.14.3-lx.15, contract 1.1.115.
Патч поверх v2.25.11.
Все JSON-поля и редактор конфига переведены на нативный редактор Android:
клавиатура больше не закрывает текст, стрелки и Copy клавиатуры работают, у
JSON-полей появилась кнопка Format. Все экраны с кнопкой Save спрашивают,
прежде чем потерять несохранённые правки. У своих узлов WireGuard/AmneziaWG
появилась секция Masquerade. Новый интент перепроверяет все Направления
разом. У прямых соединений настраиваемый таймаут. Глобальная фрагментация
TLS больше не применяется к узлам REALITY. Ядро v1.14.3-lx.15, контракт
1.1.115.
🇬🇧 English
⚠️ Read before updating
- Core
v1.14.3-lx.15(fromv1.14.2-lx.12, base sing-box 1.14.3, docs/KERNEL.md).- AWG masquerade
ip=quic(WARP wizard nodes and any node with
ip=quic): the decoy is generated before every handshake, a new QUIC
Initial with fresh connection IDs on each start, rekey, wake and
reconnect. Before, the node sent the same datagram with the same DCID
for its whole lifetime. ib=chromeandib=firefoxare real QUIC ClientHellos of the browser,
calibrated against Chrome 147/155 and Firefox 149 captures. Before, a
TCP ClientHello sat inside the QUIC Initial.ip=sipsends only INVITE;ip=dnssends EDNS without options.- The core value
ib=chrome-fullis experimental and not offered: a node
with it gets the value dropped with a warning. - Auto groups test their nodes on every
interval. Before, a node was
probed once per two intervals; with the default 15 minutes that means
twice as many background probes as before. - Hold until failure also leaves a node that answers but is more than
twice as slow as the others. fingerprint: random/randomizedno longer leave REALITY nodes to
Xray v26.9.8 and newer dead until restart.- Hysteria2, TUIC and WireGuard on top of WARP (MASQUE) or another IP
tunnel get a packet size that fits the tunnel, so hysteria2 over WARP to
an IPv6 server works. - MASQUE
vhttp: autono longer stays on h2 until restart after one
quick h3 failure. - uTLS/REALITY connections hold 18–25 KB less memory; gRPC is updated for
a critical advisory.
- AWG masquerade
- XHTTP nodes with a
?…tail inpathget a new content hash.
Their config is marked changed once; node selection and disabled marks are
kept. - The config editor no longer wraps long lines.
They scroll sideways; in exchange the headers of the enclosing blocks stay
pinned while you scroll (see Changed).
✨ Added
- Masquerade section for your own WireGuard/AmneziaWG node (task 623).
The node's Settings tab has Masquerade: protocol (Off, QUIC, DNS, STUN,
SIP), domain and browser, as rows like Detour server. A choice is saved at
once:ip/id/ibgo into the node's source (a link, a.confor a
sing-box body), the rest of the text stays as it was. Turning on QUIC, DNS
or SIP fills a random domain from the pool; the dice picks another, the
arrow lists the pool. QUIC needs a domain (it becomes the SNI of the decoy
ClientHello) and defaults to the Chrome profile. A node that setsI1
itself keeps it: the section is off and says why. Packed links (awg://
base64,vpn://) and Xray sources are not written to. The WARP wizard
uses the same fields; its QUIC hint no longer calls the domain cosmetic. - One intent re-tests every Direction (task 625).
com.leadaxe.lxbox.URLTEST_ALLtakes no extras and runs the URL test of
every Direction's auto group in turn; the core re-selects a live node in
each. The same command isurltest-allin the Tasker/Locale plugin and
POST /action/urltest-allin the Debug API. Handy on a MacroDroid shake
gesture when the network goes stale. - Direct connect timeout for
direct-out(task 616).
The connect timeout of the direct outbound is a setting now: Traffic
Processing → Params → Direct connect timeout, presets 5s–2m or any
duration. The default is 15s instead of the core's 5s, so apps on networks
that lose SYN packets (e.g. T-Bank over Tele2) no longer get their
connections cut. Proxy nodes and auto groups are unchanged. - Format button for JSON fields (task 624).
Editable JSON fields (node Source, Edit server in a folder, DNS server
JSON, rule JSON, the DNS rule editor, the wizard's JSON field) have a
Format button: it parses the text as JSON5, like Save on Config, and lays
it out with a two-space indent. Undo reverts it. A parse error shows the
position and leaves the text alone; if the text has comments, a dialog
warns that they will be removed.
🔄 Changed
- JSON fields run on a native Android editor (task 624).
The config editor and every JSON field (node Source and JSON, rules, DNS,
the add-server wizard, subscription Source) use a native editor now. The
keyboard no longer covers the line with the cursor. The arrows of
Unexpected Keyboard and Hacker's Keyboard move the cursor instead of
closing the keyboard. The keyboard's Copy takes the whole multi-line
selection. The selection menu follows the app language. Fields that take
anything highlight WireGuard.confand links as well as JSON. The config
editor and the add-server wizard no longer open the keyboard on their own.
On a TV the D-pad moves into the field and OK opens the keyboard. The
editor works on Android 7 as well. - Pinned block headers instead of folding.
Block folding is gone. Instead, up to three lines of the enclosing blocks
stay pinned at the top while you scroll the config, the node JSON and a
JSON subscription Source. - Field buttons above the field.
Find, Copy and Format sit in a row above the field, next to its caption,
instead of over the text. A field that grows with its text counts wrapped
lines, so a one-line compact JSON grows to the field's limit. Wrapped
fields no longer shade the whole field as the current line. - The custom DNS rule is edited on a full-screen editor (task 626),
like the DNS server, with the JSON body taking the rest of the screen,
instead of a bottom sheet.
🩹 Fixed
- Every screen with a Save button asks before dropping unsaved edits (task 626).
Config, node settings (Tag and Source), the replace-with-group editor,
Edit server in a folder, renaming a folder or a subscription, the
subscription filter rule editor and the custom DNS rule editor used to
drop edits on Back without a word. Now they show the "Unsaved changes"
dialog: Save, Discard or Keep. Save works like the screen's Save button:
if the save is refused (for example, a parse error on Config), the screen
stays open with the message. Changing a field back to what it was is not
an edit. - REALITY nodes no longer get the global TLS fragmentation (task 627).
With TLS record fragmentation on, some VLESS + REALITY servers stopped
answering: the server does not accept a ClientHello split into several
records. The global fragmentation toggles now skip REALITY nodes. - XHTTP keeps the query part of
path(task 620).
A path like/?proxyip=…(Cloudflare Worker relays) lost its?…tail on
import, so the relay never got its parameter and sites behind Cloudflare
failed with 502. The path now goes to the core verbatim, as in Xray, and
the core sends the tail as the request query. Applies to share links, Xray
JSON and sing-box JSON. Nodes of one server that differ only in the path
query are no longer merged into one. - Tailscale Network tab: the exit device is back under Devices (task 613).
In v2.25.11 the chosen exit node was shown only in the Exit node block,
which has no row menu, so it could not be pinged or copied. It is listed
under Devices again with its status and path. - Wrapped lines in JSON fields no longer lose a character at the right edge.
🔧 Under the hood
- Core
v1.14.3-lx.15(from lx.12); the Java surface of the core is
unchanged for the app. - Contract 1.1.115 (from 1.1.114).
- The APK is about 2 MB larger: the native editor and its highlighting
grammars. - Release candidates go to Google Play Open testing
(task 619). - CI:
actions/checkoutv7,actions/download-artifactv8.
🇷🇺 Русский
⚠️ Прочтите до обновления
- Ядро
v1.14.3-lx.15(былоv1.14.2-lx.12, база sing-box 1.14.3, docs/KERNEL.md).- Маскировка AWG
ip=quic(узлы мастера WARP и любой узел сip=quic):
decoy генерируется перед каждым хендшейком — новый QUIC Initial со
свежими connection ID при каждом старте, rekey, пробуждении и
переподключении. Раньше узел всё время жизни слал один и тот же
датаграм с одним DCID. ib=chromeиib=firefox— настоящие QUIC ClientHello браузера,
откалиброванные по захватам Chrome 147/155 и Firefox 149. Раньше
внутри QUIC Initial лежал TCP ClientHello.ip=sipшлёт только INVITE;ip=dnsшлёт EDNS без опций.- Значение ядра
ib=chrome-fullэкспериментальное и не предлагается: у
узла с ним значение снимается с предупреждением. - Авто-группы проверяют узлы каждый
interval. Раньше узел проверялся
раз в два интервала; при стандартных 15 минутах фоновых проверок
становится вдвое больше. - Hold until failure уходит и с узла, который отвечает, но вдвое
медленнее остальных. fingerprint: random/randomizedбольше не глушат до перезапуска
узлы REALITY к Xray v26.9.8 и новее.- Hysteria2, TUIC и WireGuard поверх WARP (MASQUE) или другого
IP-туннеля получают размер пакета, который туннель пропускает, —
hysteria2 поверх WARP к серверу на IPv6 работает. - MASQUE
vhttp: autoбольше не застревает на h2 до перезапуска после
одного быстрого отказа h3. - Соединения uTLS/REALITY держат на 18–25 КБ меньше памяти; gRPC обновлён
по критической уязвимости.
- Маскировка AWG
- У узлов XHTTP с хвостом
?…вpathменяется хеш содержимого.
Их конфиг один раз помечается изменившимся; выбор узла и отметки
отключения сохраняются. - Редактор конфига больше не переносит длинные строки.
Они прокручиваются вбок; взамен заголовки охватывающих блоков закреплены
при прокрутке (см. «Изменено»).
✨ Добавлено
- Секция Masquerade у своего узла WireGuard/AmneziaWG (задача 623).
На вкладке Settings узла появилась Masquerade: протокол (Off, QUIC, DNS,
STUN, SIP), домен и браузер — строками, как Detour server. Выбор
сохраняется сразу:ip/id/ibпишутся в источник узла (ссылку,
.confили тело sing-box), остальной текст не меняется. При включении
QUIC, DNS или SIP подставляется случайный домен из пула; кубик выбирает
другой, стрелка показывает весь пул. QUIC требует домен (он становится
SNI decoy-ClientHello) и по умолчанию берёт профиль Chrome. Узел, гдеI1
задан явно, сохраняет его: секция выключена и объясняет почему.
Упакованные ссылки (awg://в base64,vpn://) и источники Xray не
переписываются. Мастер WARP использует те же поля; его подсказка к QUIC
больше не называет домен косметикой. - Один интент перепроверяет все Направления (задача 625).
com.leadaxe.lxbox.URLTEST_ALLбез extras по очереди запускает URL-тест
авто-группы каждого Направления; ядро в каждой переключается на живой
узел. Та же команда —urltest-allв плагине Tasker/Locale и
POST /action/urltest-allв Debug API. Удобно повесить на встряхивание в
MacroDroid, когда сеть подвисла. - Таймаут соединения для
direct-out(задача 616).
Таймаут соединения прямого выхода теперь настройка: Traffic Processing →
Params → Direct connect timeout, пресеты 5s–2m или любая длительность. По
умолчанию 15 с вместо 5 с ядра, поэтому приложения в сетях, теряющих
SYN-пакеты (например, Т‑Банк через Tele2), больше не обрываются.
Прокси-узлы и авто-группы не затронуты. - Кнопка Format у JSON-полей (задача 624).
У редактируемых JSON-полей (Source узла, Edit server в папке, JSON
DNS-сервера, JSON правила, редактор DNS-правила, JSON-поле мастера) есть
кнопка Format: разбирает текст как JSON5, как Save на Config, и
раскладывает с отступом в два пробела. Undo отменяет. Ошибка разбора
показывает позицию и не трогает текст; если в тексте есть комментарии,
диалог предупреждает, что они будут удалены.
🔄 Изменено
- JSON-поля на нативном редакторе Android (задача 624).
Редактор конфига и все JSON-поля (Source и JSON узла, правила, DNS, мастер
добавления сервера, Source подписки) работают на нативном редакторе.
Клавиатура больше не закрывает строку с курсором. Стрелки Unexpected
Keyboard и Hacker's Keyboard двигают курсор, а не сворачивают клавиатуру.
Copy клавиатуры копирует всё многострочное выделение. Меню выделения — на
языке приложения. Поля, принимающие что угодно, подсвечивают, кроме JSON,
.confWireGuard и ссылки. Редактор конфига и мастер добавления сервера
больше не открывают клавиатуру сами. На ТВ D-pad заходит в поле, OK
открывает клавиатуру. Редактор работает и на Android 7. - Закреплённые заголовки блоков вместо свёртки.
Свёртки блоков больше нет. Вместо неё при прокрутке конфига, JSON узла и
JSON-Source подписки сверху закреплены до трёх строк охватывающих блоков. - Кнопки поля — над полем.
Поиск, Copy и Format стоят строкой над полем, рядом с его подписью, а не
поверх текста. Растущее поле учитывает перенос строк, поэтому
однострочный компактный JSON растёт до предела поля. Поле с переносом
больше не заливается целиком подсветкой текущей строки. - Своё DNS-правило правится на полноэкранном редакторе (задача 626),
как DNS-сервер, с JSON-телом на всю оставшуюся высоту, а не в шторке.
🩹 Исправлено
- Все экраны с кнопкой Save спрашивают, прежде чем потерять правки (задача 626).
Config, настройки узла (Tag и Source), редактор свёртки в группу, Edit
server в папке, переименование папки и подписки, редактор правила
фильтров подписки и редактор своего DNS-правила теряли правки на Back
молча. Теперь они показывают диалог «Unsaved changes»: Save, Discard или
Keep. Save работает как кнопка Save экрана: если сохранение отклонено
(например, ошибка разбора на Config), экран остаётся открытым с
сообщением. Вернуть поле к прежнему значению — не правка. - Глобальная фрагментация TLS больше не применяется к узлам REALITY (задача 627).
При включённой фрагментации TLS-записей часть серверов VLESS + REALITY
переставала отвечать: сервер не принимает ClientHello, разрезанный на
несколько записей. Глобальные переключатели фрагментации теперь
пропускают узлы REALITY. - XHTTP сохраняет query в
path(задача 620).
Путь вида/?proxyip=…(релеи Cloudflare Worker) при импорте терял хвост
?…: релей не получал свой параметр, и сайты за Cloudflare отвечали 502.
Теперь путь уходит в ядро дословно, как в Xray, а ядро отправляет хвост
как query запроса. Касается ссылок, Xray JSON и sing-box JSON. Узлы одного
сервера, различающиеся только query пути, больше не схлопываются в один. - Вкладка Network у Tailscale: выходное устройство снова в Devices (задача 613).
В v2.25.11 выбранный exit node показывался только в блоке Exit node, где
нет меню строки, поэтому его нельзя было пинговать или скопировать. Теперь
он снова в списке Devices со статусом и путём. - Перенесённые строки в JSON-полях больше не теряют символ у правого края.
🔧 Под капотом
- Ядро
v1.14.3-lx.15(было lx.12); Java-поверхность ядра для приложения
не изменилась. - Контракт 1.1.115 (было 1.1.114).
- APK вырос примерно на 2 МБ: нативный редактор и грамматики подсветки.
- Релиз-кандидаты уходят в открытое тестирование Google Play
(задача 619). - CI:
actions/checkoutv7,actions/download-artifactv8.
Install / Установка
adb install -r LxBox-v2.25.12-arm64-v8a.apkБез uninstall! Поверх существующей установки. Настройки и подписки сохранятся.
No uninstall needed — install over the existing one. Settings and subscriptions
are preserved.
Previous release / Предыдущий релиз: v2.25.11.