Repository navigation
pl AI AGENTS
Languages: English | العربية | Čeština | Deutsch | Español | فارسی | Français | हिन्दी | Bahasa Indonesia | Italiano | 日本語 | 한국어 | Nederlands | Polski | Português | Русский | Svenska | ไทย | Türkçe | Tiếng Việt | 中文
VDBackup jest zbudowany tak, aby asystent lub agent AI mógł administrować każdą treścią i akcją modułu bezgłowo, tak samo jak robi to człowiek przez WebUI. WebUI jest tylko jednym klientem małego API JSON; twój agent jest kolejnym. Używaj API, nie scrapuj WebUI.
Wszystko przechodzi przez jeden punkt wejścia, uruchamiany jako root na urządzeniu:
sh /data/adb/modules/vdbackup/scripts/helper.sh <verb> <base64(JSON-args)>
- Argumenty to pojedynczy obiekt JSON, zakodowany w base64, przekazany jako jeden token argv.
- Polecenie wypisuje jeden obiekt JSON na stdout:
{"ok":true,...}lub{"ok":false,"code":"ERR_...","message":"..."}. Parsuj to; nigdy nie scrapuj tekstu. - Długie operacje (
backup,restore,import) zwracają{"ok":true,"opid":"..."}natychmiast i działają odłączone (przeżywają zamknięcie wywołującego/WebUI). Odpytuj ich postęp; nie są zakończone, gdy wywołanie powraca. -
progressicancelbiorą base64 surowego łańcucha opid, nie obiekt JSON.
Mały pomocnik dla twojego shella:
b64() { printf '%s' "$1" | base64 -w0; }
H=/data/adb/modules/vdbackup/scripts/helper.sh
sh "$H" backup "$(b64 '{"package":"com.example.app","mode":"full"}')"Aby sterować tym z komputera roboczego, uruchom to przez swój zwykły kanał root do urządzenia
(adb shell jako root, lub konfiguracja SSH-to-root). Moduł dostarcza dołączone binaria, więc
po instalacji nie potrzebuje żadnego internetu dla lokalnej kopii/przywracania; tylko cele
chmurowe (rclone/restic/ssh) komunikują się z siecią.
| Czasownik | Args (JSON) | Zwraca |
|---|---|---|
ping |
{} |
{ok,version,abi} |
config-get |
{} |
{ok,config} |
config-set |
obiekt konfiguracji (lub {key,value}) |
{ok} |
keygen |
{} |
generuje parę kluczy age do szyfrowania |
list-apps |
{user?} |
{ok,apps:[{package,label,system,versionCode}]} (dex, shell fallback) |
label |
{package,user?} |
{ok,label} (prawdziwa zlokalizowana nazwa aplikacji, bez kontekstu) |
icon |
{package,user?,vc?} |
{ok,package,icon} (base64 PNG; cachowane per package+vc) |
backup |
zobacz poniżej |
{ok,opid} (odłączone) |
restore |
zobacz niżej |
{ok,opid} (odłączone) |
import |
{from,ref,password,ssaid,user} |
{ok,opid} (odłączone) |
import-scan |
{from,path} |
{ok,backups:[...]} |
progress |
base64(opid) | żywy progress-<opid>.json
|
cancel |
base64(opid) | {ok,cancelled} |
list-ops |
{} |
{ok,ops:[...]} (ponowne podłączenie po przywróceniu połączenia) |
list-apps/icons
|
{user?} / {user?,items:[{package,vc}]}
|
lista aplikacji / wsadowe ikony base64 |
list-backups |
{package?} |
{ok,backups:[{ref,package,label,versionName,versionCode,created_at,mode,items}]} |
backup-info |
{ref} |
{ok,...} pełne szczegóły jednej kopii (wersja, źródło instalacji, stan, data, tryb, rozmiar, elementy, liczby uprawnień, urządzenie) |
backup-icon |
{ref} |
{ok,icon} PNG base64 z manifestu (działa, gdy aplikacja jest odinstalowana) |
delete-backup |
{ref} |
{ok,deleted} (ref musi być pod katalogiem kopii) |
prune |
{package,user?,keep} |
{ok,pruned:[...]} zachowuje N najnowszych kopii pakietu |
log-read |
{limit?} |
{ok,entries:[...]} dziennik audytu, od najnowszych |
special-categories |
{} |
{ok,categories:[{id,available}]} (messages/contacts/wifi/bluetooth) |
special-backup |
{categories,compression?,password?,portable?} |
{ok,opid} kopia ogólnosystemowa (odłączone) |
special-restore |
{ref,confirm:true,categories?,password?} |
{ok,opid} (wymaga restartu; confirm to zabezpiecza) |
special-list |
{} |
{ok,backups:[{ref,created_at,categories}]} |
sysmount-status |
{} |
{ok,nomount,nm,ksu,live_capable} |
sysmount-add / sysmount-del / sysmount-list
|
{package,priv?} |
montuje zainstalowaną aplikację jako systemową (bezsystemowy podmoduł; na żywo przez NoMount, inaczej przy następnym rozruchu) |
companion-status / companion-install
|
{} |
status komponentu Dysku Google / instalacja na żądanie |
dests-list / dest-add / dest-test / dest-del
|
{id,type,...} |
zarządzanie celami |
remote-add / remote-list / remote-del
|
{name,backend,params:{...}} |
zarządzanie zdalnymi rclone (tworzy wpis rclone.conf, na który wskazuje cel type:"rclone") |
schedule-set / schedule-list / schedule-delete
|
{id,package,mode,dest,cron,at,keep,items} |
zaplanowane zadania |
scheduler-tick |
{} |
uruchamia należne zadania + stosuje retencję + obserwator automatycznej kopii (wywołuje to heartbeat rozruchowy) |
{
"package": "com.example.app",
"user": 0,
"mode": "full", // full | snapshot | mirror
"compression": "zstd:10", // none | lz4 | zstd[:N] | gzip
"items": ["apk","data","data_de","obb","external","media"],
"encrypt_data": false,
"encrypt_apk": false,
"dest": "local", // local | <destination id>
"verify": true, // re-hash each archive vs the manifest (default on for Full)
"dry_run": false, // true = report a size plan, write nothing
"ssaid": false // OPT-IN, see below
}restore/import biorą {ref} (katalog kopii / scan ref). restore przyjmuje również:
"items" (podzbiór typów elementów kopii do przywrócenia; pomiń, by przywrócić wszystkie), "test": true
(rozpakowuje do katalogu tymczasowego i weryfikuje, bez dotykania żywej aplikacji), "mode" dla
snapshot/mirror, "password" dla zaszyfrowanej kopii, "ssaid" (opt-in) oraz opcje źródła
instalacji "spoof_installer" (domyślnie z config, ustawia instalatora na Sklep Play w czasie
instalacji) i "deep_spoof": true (zaawansowany opt-in; fałszuje też pakiet inicjujący i źródło
pakietu, edytując bazę pakietów, stosuje się po restarcie). import bierze "from": "neo" | "databackup"
oraz, dla zaszyfrowanej kopii Neo, "password".
Cel chmurowy to cel type:"rclone", który nazywa zdalny rclone; utwórz
najpierw ten zdalny za pomocą remote-add. Pola haseł są przechowywane zaciemnione, nigdy
w postaci jawnej. Obsługiwane wartości backend i ich params:
sftp : host, port, user, pass smb : host, port, user, pass
ftp : host, port, user, pass webdav: url, vendor, user, pass
s3 : provider, access_key_id, secret_access_key, endpoint, region
drive : token, scope (token = output of `rclone authorize "drive"`)
Google Drive ma dwie ścieżki: ten zdalny drive (nie wymaga projektu Google Cloud, używa
własnego OAuth rclone - uruchom rclone authorize "drive" raz na dowolnym komputerze i przekaż
token) lub opcjonalną aplikację towarzyszącą (własne OAuth client id). Oba kończą jako zwykłe
cele.
Pole konfiguracji network_policy kontroluje, które połączenie mogą wykorzystać przesyły chmurowe:
any (domyślnie), wifi, lub mobile. Ustaw je za pomocą config-set. Gdy jest wifi lub
mobile, każdy przesył chmurowy (Full rclone/Drive upload, Mirror sync, zdalna
restic kopia/przywracanie snapshota, Mirror przywracanie) najpierw sprawdza aktywny transport i
przerywa z ERR_NET_POLICY, jeśli nie pasuje - zarówno dla zadań ręcznych, jak i zaplanowanych.
Cele lokalne nigdy nie są ograniczane.
-
ssaidjest ściśle opt-in (domyślnie wyłączone). Tworzy kopię / przywraca ANDROID_ID urządzenia przez przepisanie pliku systemowego; przywracanie stosuje się dopiero po restarcie, a poprzedni plik jest zawsze najpierw zapisywany dla rollbacku. Wysyłaj"ssaid": truetylko na bezpośrednie, zamierzone żądanie użytkownika - nigdy domyślnie. -
Akcje modyfikujące (restore, delete, import) są destrukcyjne i są logowane do
lokalnej ścieżki audytu (
logs/audit.jsonl). Przywracanie jest wierne (wipe-then-extract), więc przywraca aplikację do dokładnego stanu kopii. Potwierdź zamiar, zanim je wywołasz. -
Nigdy nie osłabiaj zachowania (SELinux/uid/gid/tryby/xattr) ani reguły APK (APK
są zawsze skompresowane, nigdy zaszyfrowane, chyba że ustawiono
encrypt_apk). - Traktuj wyjście JSON jako źródło prawdy; sprawdzaj
ok/code, odpytujprogress, i uwidaczniaj kodyERR_*zamiast zgadywać.
Zobacz ARCHITECTURE.md i FILE-STRUCTURE.md dla wewnętrznych szczegółów.
Ta dokumentacja została wygenerowana za pomocą Claude (Anthropic) i jest utrzymywana przez VD171. Poprawki i ulepszenia są mile widziane - zobacz CONTRIBUTING.md.