1
0
forked from BRT/arc
arc/apk/arc-shot/README.md

55 lines
2.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 недоступен).