55 lines
2.5 KiB
Markdown
55 lines
2.5 KiB
Markdown
# arc-shot
|
||
|
||
Крошечное Android-приложение для фермы: foreground-сервис + HTTP-файл-сервер на
|
||
порту **8099**, раздающий скриншоты с `/sdcard`. Нужно, чтобы десктоп качал кадры
|
||
по HTTP **напрямую с телефона, мимо adb** — иначе `adb exec-out screencap` по Wi-Fi
|
||
виснет и душит adb-сервер (каскад `adb devices timeout` → mass-offline).
|
||
|
||
Экран приложение **не снимает** (это требовало бы MediaProjection с диалогом
|
||
согласия) — кадр делает десктоп через `adb shell screencap -p /sdcard/arc_shot.png`,
|
||
а arc-shot только отдаёт готовый файл по HTTP. Без внешних зависимостей (raw
|
||
`ServerSocket`).
|
||
|
||
## Эндпоинты
|
||
|
||
- `GET /health` → `200 ok`
|
||
- `GET /<file>.png` → файл из `/sdcard` (например `/arc_shot.png`)
|
||
|
||
## Сборка
|
||
|
||
**Офлайн, без Gradle/AGP** (только Android SDK build-tools):
|
||
|
||
```bash
|
||
./build_manual.sh
|
||
# -> build/arc-shot.apk
|
||
```
|
||
|
||
Переменные: `BT_VER` (build-tools, дефолт 35.0.1), `PLATFORM` (дефолт android-34),
|
||
`MIN_SDK`/`TARGET_SDK`, `ANDROID_SDK_ROOT`.
|
||
|
||
**Через Android Studio / Gradle** — см. `build.gradle`. Важно: для AGP-сборки убрать
|
||
атрибут `package="com.arc.shot"` из `AndroidManifest.xml` (AGP берёт пакет из
|
||
`namespace`). Ручной `build_manual.sh`, наоборот, требует `package=` в манифесте.
|
||
|
||
## Установка и выдача прав (с десктопа, через adb)
|
||
|
||
```bash
|
||
adb -s <serial> install -r build/arc-shot.apk
|
||
# доступ к /sdcard без диалога на устройстве:
|
||
adb -s <serial> shell appops set com.arc.shot MANAGE_EXTERNAL_STORAGE allow
|
||
# запустить сервис:
|
||
adb -s <serial> shell am start -n com.arc.shot/.MainActivity
|
||
```
|
||
|
||
## Проверка
|
||
|
||
```bash
|
||
adb -s <serial> shell screencap -p /sdcard/arc_shot.png
|
||
IP=$(adb -s <serial> shell ip route get 1.1.1.1 | sed -n 's/.*src \([0-9.]*\).*/\1/p')
|
||
curl -s "http://$IP:8099/arc_shot.png" -o shot.png && file shot.png
|
||
curl -s "http://$IP:8099/health" # -> ok
|
||
```
|
||
|
||
Десктоп использует этот путь автоматически при `config.ini [screenshot] transport=http`
|
||
(с fallback на `exec-out`, если arc-shot недоступен).
|