Skip to content

Подключение к сохранённой сети по id, не трогая настройки Android (v1.20) - #2

Merged
nd4y merged 2 commits into
mainfrom
saved-networks
Sep 23, 2026
Merged

nd4y merged 2 commits into
mainfrom
saved-networks

Conversation

@nd4y

@nd4y nd4y commented Sep 22, 2026 •

Copy link
Copy Markdown
Owner

Проблема: cmd wifi connect-network не выбирает сохранённую сеть, а добавляет её заново, и WifiConfigManager.mergeWithInternalWifiConfiguration переносит в сохранённую запись поля свежего WifiConfiguration — MAC-рандомизация (→ авто), meteredOverride (→ авто), allowAutojoin, «отправлять имя устройства». Всё, что задано в настройках Wi-Fi Android, сбрасывалось при каждом нажатии кнопки. Прокси и статический IP выживали только потому, что merge пропускает UNASSIGNED.

Решение: к уже сохранённой сети подключаться так же, как это делает тап в настройках Android — IWifiManager.connect(config = null, netId). Такого вызова в cmd wifi нет, поэтому в APK добавлен helper WifiHelper (object с main), который привилегированный шелл запускает через app_process с APK в CLASSPATH — так устроен системный svc. Внутри app_process нет ограничений на скрытые API, а uid shell/root даёт NETWORK_SETTINGS; рассчитан и на Shizuku, и на root. Сигнатуры AIDL между релизами разные (12: 3 параметра, 13–14: 4, 15+: 5), поэтому параметры подставляются по типу.

Поведение:

  • сеть уже сохранена → helper находит её по SSID и типу защиты (isSecurityType, так что WPA2-профиль матчит и auto-upgraded WPA3) и вызывает connect(netId). Запись сети в Android не меняется; пароль в профиле не нужен. В подробный лог пишется, что Android хранит для сети (MAC, лимит, IP, прокси, автоподключение, скрытость);
  • автоподключение стало трёхпозиционным: SYSTEM (как в Android, по умолчанию — ничего не трогаем), ON, OFF; для сохранённой сети применяется через allowAutojoin, для новой — флагом -d. Булев autoJoin из 1.19 (true/false) читается как ON/OFF и в YAML, и в сохранённом JSON — у enum свой сериализатор, потому что ошибка разбора сохранённого конфига молча сбрасывает его к значениям по умолчанию;
  • сети нет → как раньше, connect-network из профиля (нужен пароль);
  • helper не смог (например, в Android другой пароль) → ошибка с пояснением, ничего не перезаписывается;
  • новый тумблер «Пересоздавать сохранённую сеть» (overwriteSaved: true, по умолчанию false) возвращает старое поведение, с предупреждением в логе;
  • пароль Wi-Fi в редакторе профиля скрыт, кнопка «Показать».

Также: README (обе версии) — новый раздел «Сохранённые сети и настройки Android», уточнены раздел про пароли, абзац про автоподключение и таблица команд; пример конфига; тесты на autoJoin (YAML и JSON-совместимость с 1.19), overwriteSaved и элементы диалога. Версия 1.20 (versionCode 21).

Проверить на устройстве после установки: подключиться к сети с прокси/«MAC устройства», заданными в Android, и убедиться, что после кнопки NetSwitcher они на месте; в подробном логе должна быть строка helper connect … -> 0 | ok id=N и строка «В Android: …».

nd4y added 2 commits September 22, 2026 17:10
cmd wifi connect-network добавляет сеть заново и переписывает сохранённую
запись значениями по умолчанию: MAC-рандомизация, «лимитная сеть»,
автоподключение, «отправлять имя устройства» сбрасывались при каждом
нажатии. Теперь к уже сохранённой сети приложение подключается через
IWifiManager.connect(netId) — свой helper (WifiHelper) запускается
привилегированным шеллом через app_process, как системный svc. Запись
сети не меняется; из профиля применяется только autoJoin (allowAutojoin).
Сеть, которой ещё нет, добавляется как раньше. Тумблер «Пересоздавать
сохранённую сеть» (overwriteSaved) возвращает старое поведение. Версия 1.20.
Булев autoJoin со значением «вкл.» по умолчанию заставлял helper при
каждом подключении делать allowAutojoin(true) — то есть молча затирал
выключенное в Android автоподключение, ровно то, от чего это изменение
защищает. Теперь три значения: SYSTEM (как в Android, по умолчанию),
ON, OFF. Старые true/false читаются как ON/OFF и в YAML, и в сохранённом
JSON — иначе смена типа сбросила бы конфиг 1.19 к значениям по умолчанию.

Пароль Wi-Fi в редакторе профиля скрыт точками, кнопка «Показать».
@nd4y
nd4y merged commit 9afc3ff into main Sep 23, 2026
1 check passed
@nd4y
nd4y deleted the saved-networks branch September 23, 2026 05:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant