# Подготовка устройства

Деплой на устройство идёт через встроенный **dev server** exteraGram (TCP 42690). Прямой `adb push` в приватный каталог плагинов без root **запрещён** (`Permission denied`), поэтому используется dev server — приложение само пишет файл в свой каталог.

## Предусловия

1. Устройство подключено по ADB:

   ```bash
   adb devices
   # должно показывать устройство в состоянии "device"
   ```
2. exteraGram **запущен**.
3. В exteraGram включён движок плагинов и **режим разработчика** — тогда dev server слушает порт 42690. Обычно: настройки exteraGram → Плагины → включить движок → активировать режим разработчика на экране плагинов.

## Проверка dev server

catalib делает это сам, но проверить вручную можно так:

```bash
adb forward tcp:42690 tcp:42690
python - <<'PY'
import socket, json
s = socket.create_connection(("127.0.0.1", 42690), timeout=5)
s.sendall(json.dumps({"@": "ping", "#": 1}).encode())
print(s.recv(256))   # ожидается {"#": 1, "pong": true}
s.close()
PY
adb forward --remove tcp:42690
```

Если соединение не устанавливается или ответа нет — приложение не запущено или не включён режим разработчика.

## Протокол dev server

JSON-сообщения по TCP, ответ содержит тот же `#`:

| Действие             | Аргументы              | Назначение                    |
| -------------------- | ---------------------- | ----------------------------- |
| `ping`               | —                      | проверка доступности          |
| `get_plugins`        | —                      | список установленных плагинов |
| `write_plugin`       | `plugin_id`, `content` | записать файл плагина         |
| `reload_plugin`      | `plugin_id`            | перезагрузить плагин          |
| `set_plugin_enabled` | `plugin_id`, `enabled` | включить/выключить            |
| `delete_plugin`      | `plugin_id`            | удалить плагин                |

catalib инкапсулирует это в `catalib watch --deploy`. Вручную дёргать протокол обычно не нужно.

## Известные особенности сборок

* Свежезаписанный плагин регистрируется **выключенным**. catalib пытается включить его, но на части сборок `set_plugin_enabled` срабатывает **только при открытом экране плагинов** в UI — включите плагин один раз вручную.
* `delete_plugin` на части сборок подтверждается, но файл не удаляет — удаляйте плагин через UI exteraGram.
* Признак успешной загрузки — `error: null` у плагина в `get_plugins` (а не `enabled`).
* Логи плагина в некоторых сборках не доходят до `adb logcat`.

Это особенности dev server exteraGram, не catalib. Подробнее — [Подводные камни](/catalib/reshenie-problem/troubleshooting.md).

## Несколько устройств

Если подключено несколько устройств — указывайте серийный номер:

```bash
catalib watch --deploy --serial <серийный_номер>
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://raito-kyokai.gitbook.io/catalib/deploi/device-setup.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
