voidremote 1.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- voidremote/__init__.py +31 -0
- voidremote/adb/__init__.py +28 -0
- voidremote/adb/client.py +385 -0
- voidremote/adb/device_parser.py +286 -0
- voidremote/cli/__init__.py +5 -0
- voidremote/cli/main.py +987 -0
- voidremote/config/__init__.py +37 -0
- voidremote/config/settings.py +203 -0
- voidremote/controllers/__init__.py +5 -0
- voidremote/controllers/app_controller.py +222 -0
- voidremote/core/__init__.py +1 -0
- voidremote/core/automation.py +184 -0
- voidremote/models/__init__.py +31 -0
- voidremote/models/device.py +263 -0
- voidremote/network/__init__.py +1 -0
- voidremote/network/discovery.py +116 -0
- voidremote/services/__init__.py +13 -0
- voidremote/services/device_service.py +340 -0
- voidremote/services/input_service.py +181 -0
- voidremote/services/monitor_service.py +198 -0
- voidremote/ui/__init__.py +1 -0
- voidremote/ui/app.py +70 -0
- voidremote/ui/dialogs/__init__.py +6 -0
- voidremote/ui/dialogs/connect_dialog.py +149 -0
- voidremote/ui/dialogs/pair_dialog.py +189 -0
- voidremote/ui/main_window.py +371 -0
- voidremote/ui/theme.py +529 -0
- voidremote/ui/views/__init__.py +15 -0
- voidremote/ui/views/dashboard_view.py +233 -0
- voidremote/ui/views/files_view.py +305 -0
- voidremote/ui/views/monitor_view.py +236 -0
- voidremote/ui/views/settings_view.py +257 -0
- voidremote/ui/views/shell_view.py +234 -0
- voidremote/ui/widgets/__init__.py +14 -0
- voidremote/ui/widgets/device_card.py +259 -0
- voidremote/ui/widgets/log_view.py +159 -0
- voidremote/ui/widgets/metric_gauge.py +90 -0
- voidremote/utils/__init__.py +28 -0
- voidremote/utils/logging.py +120 -0
- voidremote/utils/security.py +216 -0
- voidremote-1.0.0.dist-info/METADATA +578 -0
- voidremote-1.0.0.dist-info/RECORD +46 -0
- voidremote-1.0.0.dist-info/WHEEL +5 -0
- voidremote-1.0.0.dist-info/entry_points.txt +5 -0
- voidremote-1.0.0.dist-info/licenses/LICENSE +21 -0
- voidremote-1.0.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,578 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: voidremote
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Wireless Android Remote Controller over ADB
|
|
5
|
+
Author-email: V0IDNETWORK <ilianothingg@gmail.com>
|
|
6
|
+
License: MIT License
|
|
7
|
+
|
|
8
|
+
Copyright (c) 2024 V0IDNETWORK <ilianothingg@gmail.com>
|
|
9
|
+
|
|
10
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
11
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
12
|
+
in the Software without restriction, including without limitation the rights
|
|
13
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
14
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
15
|
+
furnished to do so, subject to the following conditions:
|
|
16
|
+
|
|
17
|
+
The above copyright notice and this permission notice shall be included in all
|
|
18
|
+
copies or substantial portions of the Software.
|
|
19
|
+
|
|
20
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
21
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
22
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
23
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
24
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
25
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
26
|
+
SOFTWARE.
|
|
27
|
+
|
|
28
|
+
Project-URL: Homepage, https://github.com/V0IDNETWORK/VoidRemote
|
|
29
|
+
Project-URL: Documentation, https://github.com/V0IDNETWORK/VoidRemote/wiki
|
|
30
|
+
Project-URL: Repository, https://github.com/V0IDNETWORK/VoidRemote
|
|
31
|
+
Project-URL: Bug Tracker, https://github.com/V0IDNETWORK/VoidRemote/issues
|
|
32
|
+
Project-URL: Author, http://voidNetwork.ir/
|
|
33
|
+
Keywords: android,adb,remote,wireless,scrcpy,mirroring
|
|
34
|
+
Classifier: Development Status :: 4 - Beta
|
|
35
|
+
Classifier: Environment :: X11 Applications :: Qt
|
|
36
|
+
Classifier: Intended Audience :: Developers
|
|
37
|
+
Classifier: Intended Audience :: End Users/Desktop
|
|
38
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
39
|
+
Classifier: Operating System :: OS Independent
|
|
40
|
+
Classifier: Programming Language :: Python :: 3
|
|
41
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
42
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
43
|
+
Classifier: Topic :: Utilities
|
|
44
|
+
Classifier: Topic :: System :: Hardware
|
|
45
|
+
Classifier: Topic :: Communications
|
|
46
|
+
Requires-Python: >=3.12
|
|
47
|
+
Description-Content-Type: text/markdown
|
|
48
|
+
License-File: LICENSE
|
|
49
|
+
Requires-Dist: PySide6>=6.7.0
|
|
50
|
+
Requires-Dist: click>=8.1.7
|
|
51
|
+
Requires-Dist: rich>=13.7.0
|
|
52
|
+
Requires-Dist: adb-shell>=0.4.4
|
|
53
|
+
Requires-Dist: Pillow>=10.3.0
|
|
54
|
+
Requires-Dist: psutil>=5.9.8
|
|
55
|
+
Requires-Dist: pydantic>=2.7.0
|
|
56
|
+
Requires-Dist: pydantic-settings>=2.3.0
|
|
57
|
+
Requires-Dist: cryptography>=42.0.0
|
|
58
|
+
Requires-Dist: appdirs>=1.4.4
|
|
59
|
+
Requires-Dist: requests>=2.32.0
|
|
60
|
+
Requires-Dist: numpy>=1.26.4
|
|
61
|
+
Requires-Dist: pyperclip>=1.8.2
|
|
62
|
+
Provides-Extra: dev
|
|
63
|
+
Requires-Dist: pytest>=8.2.0; extra == "dev"
|
|
64
|
+
Requires-Dist: pytest-asyncio>=0.23.7; extra == "dev"
|
|
65
|
+
Requires-Dist: pytest-cov>=5.0.0; extra == "dev"
|
|
66
|
+
Requires-Dist: pytest-mock>=3.14.0; extra == "dev"
|
|
67
|
+
Requires-Dist: black>=24.4.2; extra == "dev"
|
|
68
|
+
Requires-Dist: ruff>=0.4.7; extra == "dev"
|
|
69
|
+
Requires-Dist: mypy>=1.10.0; extra == "dev"
|
|
70
|
+
Requires-Dist: types-requests>=2.32.0; extra == "dev"
|
|
71
|
+
Requires-Dist: types-Pillow>=10.2.0; extra == "dev"
|
|
72
|
+
Requires-Dist: types-psutil>=5.9.5; extra == "dev"
|
|
73
|
+
Requires-Dist: types-appdirs>=1.4.3; extra == "dev"
|
|
74
|
+
Requires-Dist: pre-commit>=3.7.1; extra == "dev"
|
|
75
|
+
Provides-Extra: docs
|
|
76
|
+
Requires-Dist: mkdocs>=1.6.0; extra == "docs"
|
|
77
|
+
Requires-Dist: mkdocs-material>=9.5.0; extra == "docs"
|
|
78
|
+
Requires-Dist: mkdocstrings[python]>=0.25.0; extra == "docs"
|
|
79
|
+
Dynamic: license-file
|
|
80
|
+
|
|
81
|
+
# VoidRemote
|
|
82
|
+
|
|
83
|
+
<div align="center">
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
โโโ โโโ โโโโโโโ โโโโโโโโโโ โโโโโโโ โโโโโโโโโโโโ โโโโ โโโโโโโ โโโโโโโโโโโโโโโโโ
|
|
87
|
+
โโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
88
|
+
โโโ โโโโโโ โโโโโโโโโ โโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโ โโโ โโโ โโโโโโ
|
|
89
|
+
โโโโ โโโโโโโ โโโโโโโโโ โโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโ โโโ โโโ โโโโโโ
|
|
90
|
+
โโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโ โโโ โโโโโโโโโโโโ โโโ โโโโโโโโ
|
|
91
|
+
โโโโโ โโโโโโโ โโโโโโโโโโ โโโ โโโโโโโโโโโโโโ โโโ โโโโโโโ โโโ โโโโโโโโ
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
**Wireless Android Remote Controller over ADB**
|
|
95
|
+
|
|
96
|
+
[](https://github.com/V0IDNETWORK/VoidRemote/actions/workflows/ci.yml)
|
|
97
|
+
[](https://www.python.org/downloads/)
|
|
98
|
+
[](https://opensource.org/licenses/MIT)
|
|
99
|
+
[](https://github.com/psf/black)
|
|
100
|
+
[](https://github.com/astral-sh/ruff)
|
|
101
|
+
|
|
102
|
+
[Features](#features) ยท [Installation](#installation) ยท [Quick Start](#quick-start) ยท [CLI Reference](#cli-reference) ยท [GUI Guide](#gui-guide) ยท [Architecture](#architecture) ยท [Contributing](#contributing)
|
|
103
|
+
|
|
104
|
+
</div>
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Overview
|
|
109
|
+
|
|
110
|
+
VoidRemote is a cross-platform desktop application for **wirelessly controlling Android devices** through ADB (Android Debug Bridge). It pairs with Android's built-in Wireless Debugging feature โ no root required, no third-party server software, no cables.
|
|
111
|
+
|
|
112
|
+
Built entirely in Python with a modern PySide6 GUI and an enterprise-grade CLI, VoidRemote is designed for developers, testers, power users, and anyone who needs reliable, scriptable remote control of Android devices.
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## Features
|
|
117
|
+
|
|
118
|
+
### ๐ Device Management
|
|
119
|
+
- Discover USB and wireless ADB devices automatically
|
|
120
|
+
- Pair devices via Android 11+ Wireless Debugging (no USB needed after first pair)
|
|
121
|
+
- Auto-reconnect trusted devices on startup
|
|
122
|
+
- Full device info: model, Android version, CPU ABI, resolution, battery, IP, RAM, storage
|
|
123
|
+
|
|
124
|
+
### ๐ฅ๏ธ Screen Mirroring
|
|
125
|
+
- Low-latency screen streaming using `screenrecord` + `screencap`
|
|
126
|
+
- Resizable mirror window, fullscreen support
|
|
127
|
+
- Screenshot capture (CLI + GUI)
|
|
128
|
+
- Screen recording with configurable bitrate and resolution
|
|
129
|
+
|
|
130
|
+
### ๐ฑ๏ธ Input Control
|
|
131
|
+
- Mouse click, double-click, long press
|
|
132
|
+
- Swipe and drag gestures
|
|
133
|
+
- Keyboard text input with Unicode support
|
|
134
|
+
- Hardware key events (Home, Back, Volume, Power, etc.)
|
|
135
|
+
- Clipboard paste
|
|
136
|
+
|
|
137
|
+
### ๐ File Manager
|
|
138
|
+
- Browse device file system
|
|
139
|
+
- Upload local files to device
|
|
140
|
+
- Download device files
|
|
141
|
+
- Subdirectory navigation with history
|
|
142
|
+
|
|
143
|
+
### ๐ฆ APK Management
|
|
144
|
+
- Install APK (with replace/downgrade options)
|
|
145
|
+
- Uninstall packages by name
|
|
146
|
+
- Batch install via CLI
|
|
147
|
+
|
|
148
|
+
### ๐ฅ Shell Terminal
|
|
149
|
+
- Embedded ADB shell with command history
|
|
150
|
+
- Up/down arrow navigation through history
|
|
151
|
+
- Colored output (errors in red)
|
|
152
|
+
- Per-device terminal sessions
|
|
153
|
+
|
|
154
|
+
### ๐ Real-time Monitoring
|
|
155
|
+
- CPU usage with sparkline graph
|
|
156
|
+
- RAM usage (used / total)
|
|
157
|
+
- Battery level and temperature
|
|
158
|
+
- Live metric cards with circular gauges
|
|
159
|
+
|
|
160
|
+
### ๐ค Automation
|
|
161
|
+
- Record macro sequences (tap, swipe, text, keyevent)
|
|
162
|
+
- Play back macros with speed control and repeat
|
|
163
|
+
- Save/load macro library as JSON
|
|
164
|
+
- CLI integration for scripting
|
|
165
|
+
|
|
166
|
+
### ๐ง Enterprise CLI
|
|
167
|
+
- 25+ commands with colored output
|
|
168
|
+
- JSON output mode (`--json`) for scripting
|
|
169
|
+
- Verbose and debug flags
|
|
170
|
+
- `voidremote doctor` for setup diagnosis
|
|
171
|
+
|
|
172
|
+
### ๐จ Modern GUI
|
|
173
|
+
- Dark theme with professional typography
|
|
174
|
+
- Sidebar navigation with 7 panels
|
|
175
|
+
- Device cards with live battery/state indicators
|
|
176
|
+
- Real-time log viewer with level filtering
|
|
177
|
+
- Settings panel with live save
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## Screenshots
|
|
182
|
+
|
|
183
|
+
> _GUI screenshots will be added after first public release._
|
|
184
|
+
|
|
185
|
+
| Dashboard | Shell | Monitor |
|
|
186
|
+
|-----------|-------|---------|
|
|
187
|
+
|  |  |  |
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
## Requirements
|
|
192
|
+
|
|
193
|
+
| Requirement | Minimum Version |
|
|
194
|
+
|-------------|-----------------|
|
|
195
|
+
| Python | 3.12+ |
|
|
196
|
+
| ADB (Platform Tools) | 1.0.41+ |
|
|
197
|
+
| Android | 11+ (for Wireless Debugging) |
|
|
198
|
+
| OS | Windows 10+, macOS 12+, Ubuntu 22.04+ |
|
|
199
|
+
|
|
200
|
+
### Python Dependencies
|
|
201
|
+
- **PySide6** โ Qt6 GUI framework
|
|
202
|
+
- **click** โ CLI framework
|
|
203
|
+
- **rich** โ Terminal formatting
|
|
204
|
+
- **pydantic** โ Settings validation
|
|
205
|
+
- **psutil** โ System metrics
|
|
206
|
+
- **Pillow** โ Image processing
|
|
207
|
+
- **cryptography** โ Secure config storage
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
## Installation
|
|
212
|
+
|
|
213
|
+
### From PyPI (recommended)
|
|
214
|
+
|
|
215
|
+
```bash
|
|
216
|
+
pip install voidremote
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
### From Source
|
|
220
|
+
|
|
221
|
+
```bash
|
|
222
|
+
git clone https://github.com/V0IDNETWORK/VoidRemote.git
|
|
223
|
+
cd VoidRemote
|
|
224
|
+
pip install -e ".[dev]"
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
### Verify Installation
|
|
228
|
+
|
|
229
|
+
```bash
|
|
230
|
+
voidremote doctor
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
---
|
|
234
|
+
|
|
235
|
+
## Quick Start
|
|
236
|
+
|
|
237
|
+
### 1. Enable Wireless Debugging on Android
|
|
238
|
+
|
|
239
|
+
1. Go to **Settings โ About Phone** and tap **Build Number** 7 times to enable Developer Options
|
|
240
|
+
2. Go to **Settings โ Developer Options โ Wireless Debugging**
|
|
241
|
+
3. Enable **Wireless Debugging**
|
|
242
|
+
|
|
243
|
+
### 2. Pair Your Device
|
|
244
|
+
|
|
245
|
+
```bash
|
|
246
|
+
# Interactive pairing wizard
|
|
247
|
+
voidremote pair
|
|
248
|
+
|
|
249
|
+
# Or provide all arguments at once
|
|
250
|
+
voidremote pair 192.168.1.50 37001 123456
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
In the Wireless Debugging screen, tap **"Pair device with pairing code"** and enter the IP, port, and 6-digit code shown.
|
|
254
|
+
|
|
255
|
+
### 3. Connect
|
|
256
|
+
|
|
257
|
+
```bash
|
|
258
|
+
voidremote connect 192.168.1.50
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
### 4. List Devices
|
|
262
|
+
|
|
263
|
+
```bash
|
|
264
|
+
voidremote devices
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
### 5. Launch GUI
|
|
268
|
+
|
|
269
|
+
```bash
|
|
270
|
+
voidremote-gui
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
## CLI Reference
|
|
276
|
+
|
|
277
|
+
```
|
|
278
|
+
voidremote [OPTIONS] COMMAND
|
|
279
|
+
|
|
280
|
+
Options:
|
|
281
|
+
-v, --verbose Enable verbose output
|
|
282
|
+
--debug Enable debug logging
|
|
283
|
+
--json Output as JSON
|
|
284
|
+
-V, --version Show version and exit
|
|
285
|
+
-h, --help Show help
|
|
286
|
+
|
|
287
|
+
Commands:
|
|
288
|
+
devices List connected ADB devices
|
|
289
|
+
pair Pair via Wireless Debugging
|
|
290
|
+
connect Connect to device over TCP/IP
|
|
291
|
+
disconnect Disconnect a wireless device
|
|
292
|
+
info Show detailed device information
|
|
293
|
+
screenshot Capture a screenshot
|
|
294
|
+
shell Execute ADB shell command
|
|
295
|
+
tap Tap at screen coordinates
|
|
296
|
+
swipe Swipe between two points
|
|
297
|
+
text Type text on device
|
|
298
|
+
keyevent Send hardware key event
|
|
299
|
+
install Install an APK
|
|
300
|
+
uninstall Uninstall an app package
|
|
301
|
+
push Push file to device
|
|
302
|
+
pull Pull file from device
|
|
303
|
+
reboot Reboot device
|
|
304
|
+
battery Show battery status
|
|
305
|
+
wifi Show WiFi information
|
|
306
|
+
doctor Diagnose setup issues
|
|
307
|
+
version Show version information
|
|
308
|
+
logs View application logs
|
|
309
|
+
config Manage configuration
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
### Examples
|
|
313
|
+
|
|
314
|
+
```bash
|
|
315
|
+
# Take a screenshot
|
|
316
|
+
voidremote screenshot 192.168.1.50:5555 ~/Desktop/screen.png
|
|
317
|
+
|
|
318
|
+
# Type text
|
|
319
|
+
voidremote text 192.168.1.50:5555 "hello world"
|
|
320
|
+
|
|
321
|
+
# Tap center of a 1080x2400 screen
|
|
322
|
+
voidremote tap 192.168.1.50:5555 540 1200
|
|
323
|
+
|
|
324
|
+
# Swipe up (scroll down)
|
|
325
|
+
voidremote swipe 192.168.1.50:5555 540 1500 540 500 --duration 400
|
|
326
|
+
|
|
327
|
+
# Press back
|
|
328
|
+
voidremote keyevent 192.168.1.50:5555 4
|
|
329
|
+
|
|
330
|
+
# Install APK
|
|
331
|
+
voidremote install 192.168.1.50:5555 ~/Downloads/app.apk
|
|
332
|
+
|
|
333
|
+
# Run shell command
|
|
334
|
+
voidremote shell 192.168.1.50:5555 getprop ro.build.version.release
|
|
335
|
+
|
|
336
|
+
# JSON output for scripting
|
|
337
|
+
voidremote --json devices | jq '.[].serial'
|
|
338
|
+
|
|
339
|
+
# Battery info as JSON
|
|
340
|
+
voidremote --json battery 192.168.1.50:5555
|
|
341
|
+
|
|
342
|
+
# Debug mode
|
|
343
|
+
voidremote --debug connect 192.168.1.50
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
---
|
|
347
|
+
|
|
348
|
+
## GUI Guide
|
|
349
|
+
|
|
350
|
+
Launch the GUI with:
|
|
351
|
+
|
|
352
|
+
```bash
|
|
353
|
+
voidremote-gui
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
### Sidebar Navigation
|
|
357
|
+
|
|
358
|
+
| Panel | Description |
|
|
359
|
+
|-------|-------------|
|
|
360
|
+
| ๐ฑ Devices | Dashboard with device cards |
|
|
361
|
+
| ๐ฅ๏ธ Mirror | Screen mirroring launcher |
|
|
362
|
+
| ๐ฅ Shell | ADB shell terminal |
|
|
363
|
+
| ๐ Monitor | Real-time performance graphs |
|
|
364
|
+
| ๐ Files | File manager |
|
|
365
|
+
| โ๏ธ Settings | Application settings |
|
|
366
|
+
| ๐ Logs | Live log viewer |
|
|
367
|
+
|
|
368
|
+
### Keyboard Shortcuts
|
|
369
|
+
|
|
370
|
+
| Shortcut | Action |
|
|
371
|
+
|----------|--------|
|
|
372
|
+
| `F5` | Refresh device list |
|
|
373
|
+
| `Ctrl+Shift+C` | Open Connect dialog |
|
|
374
|
+
| `Ctrl+Shift+P` | Open Pair dialog |
|
|
375
|
+
| `Ctrl+Q` | Quit |
|
|
376
|
+
|
|
377
|
+
---
|
|
378
|
+
|
|
379
|
+
## Architecture
|
|
380
|
+
|
|
381
|
+
```
|
|
382
|
+
voidremote/
|
|
383
|
+
โโโ adb/ # ADB subprocess layer
|
|
384
|
+
โ โโโ client.py # AdbClient โ raw command execution
|
|
385
|
+
โ โโโ device_parser.py # Parse ADB output into typed models
|
|
386
|
+
โโโ cli/
|
|
387
|
+
โ โโโ main.py # Click CLI โ all 25+ commands
|
|
388
|
+
โโโ config/
|
|
389
|
+
โ โโโ settings.py # Pydantic settings with JSON persistence
|
|
390
|
+
โโโ controllers/
|
|
391
|
+
โ โโโ app_controller.py # DI root โ unified facade for CLI + GUI
|
|
392
|
+
โโโ core/
|
|
393
|
+
โ โโโ automation.py # Macro recording and playback engine
|
|
394
|
+
โโโ models/
|
|
395
|
+
โ โโโ device.py # Pydantic device models
|
|
396
|
+
โโโ network/
|
|
397
|
+
โ โโโ discovery.py # Subnet scanner for ADB device discovery
|
|
398
|
+
โโโ services/
|
|
399
|
+
โ โโโ device_service.py # Device lifecycle + trusted device store
|
|
400
|
+
โ โโโ input_service.py # Touch/keyboard/key event control
|
|
401
|
+
โ โโโ monitor_service.py # Background polling thread for metrics
|
|
402
|
+
โโโ ui/
|
|
403
|
+
โ โโโ app.py # QApplication bootstrap
|
|
404
|
+
โ โโโ main_window.py # Main window + sidebar navigation
|
|
405
|
+
โ โโโ theme.py # Dark QSS theme + color palette
|
|
406
|
+
โ โโโ dialogs/ # Modal dialogs (pair, connect)
|
|
407
|
+
โ โโโ views/ # Full-panel views (dashboard, shell, etc.)
|
|
408
|
+
โ โโโ widgets/ # Reusable widgets (DeviceCard, LogView, etc.)
|
|
409
|
+
โโโ utils/
|
|
410
|
+
โโโ logging.py # Rotating file + colored console logging
|
|
411
|
+
โโโ security.py # Input validation + injection prevention
|
|
412
|
+
```
|
|
413
|
+
|
|
414
|
+
### Design Principles
|
|
415
|
+
|
|
416
|
+
- **Single ADB client**: One `AdbClient` instance shared via `AppController` (dependency injection root)
|
|
417
|
+
- **Layered architecture**: `CLI/GUI โ Controller โ Services โ ADB Client`
|
|
418
|
+
- **Type safety**: Pydantic models for all data, type hints everywhere, mypy-compatible
|
|
419
|
+
- **Security-first**: All user input validated before reaching ADB; no shell=True anywhere
|
|
420
|
+
- **Thread safety**: Background tasks run in `QThread` (GUI) or `threading.Thread` (services)
|
|
421
|
+
|
|
422
|
+
---
|
|
423
|
+
|
|
424
|
+
## Configuration
|
|
425
|
+
|
|
426
|
+
VoidRemote stores its configuration in your platform's standard config directory:
|
|
427
|
+
|
|
428
|
+
| OS | Path |
|
|
429
|
+
|----|------|
|
|
430
|
+
| Windows | `%APPDATA%\V0IDNETWORK\VoidRemote\settings.json` |
|
|
431
|
+
| macOS | `~/Library/Application Support/VoidRemote/settings.json` |
|
|
432
|
+
| Linux | `~/.config/VoidRemote/settings.json` |
|
|
433
|
+
|
|
434
|
+
```bash
|
|
435
|
+
# Show current config
|
|
436
|
+
voidremote config --show
|
|
437
|
+
|
|
438
|
+
# Reset to defaults
|
|
439
|
+
voidremote config --reset
|
|
440
|
+
```
|
|
441
|
+
|
|
442
|
+
Configuration can also be set via environment variables:
|
|
443
|
+
|
|
444
|
+
```bash
|
|
445
|
+
VOIDREMOTE_ADB__PATH=/usr/local/bin/adb
|
|
446
|
+
VOIDREMOTE_UI__THEME=dark
|
|
447
|
+
VOIDREMOTE_LOG__LEVEL=DEBUG
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
---
|
|
451
|
+
|
|
452
|
+
## Troubleshooting
|
|
453
|
+
|
|
454
|
+
### ADB not found
|
|
455
|
+
|
|
456
|
+
```bash
|
|
457
|
+
# Verify ADB is installed
|
|
458
|
+
adb version
|
|
459
|
+
|
|
460
|
+
# If not, install Android Platform Tools:
|
|
461
|
+
# https://developer.android.com/tools/releases/platform-tools
|
|
462
|
+
# Then set the path in settings:
|
|
463
|
+
voidremote config --show
|
|
464
|
+
```
|
|
465
|
+
|
|
466
|
+
### Device not connecting wirelessly
|
|
467
|
+
|
|
468
|
+
1. Ensure device and PC are on the **same WiFi network**
|
|
469
|
+
2. Check that **Wireless Debugging** is enabled in Developer Options
|
|
470
|
+
3. Try re-pairing: `voidremote pair`
|
|
471
|
+
4. Verify firewall is not blocking port 5555
|
|
472
|
+
|
|
473
|
+
### Unauthorized device
|
|
474
|
+
|
|
475
|
+
```bash
|
|
476
|
+
# Revoke and re-authorize ADB
|
|
477
|
+
adb kill-server
|
|
478
|
+
voidremote connect 192.168.1.50
|
|
479
|
+
# Accept the "Allow USB debugging" prompt on the device
|
|
480
|
+
```
|
|
481
|
+
|
|
482
|
+
### GUI won't start
|
|
483
|
+
|
|
484
|
+
```bash
|
|
485
|
+
# Check PySide6 is installed
|
|
486
|
+
python -c "import PySide6; print(PySide6.__version__)"
|
|
487
|
+
|
|
488
|
+
# On Linux, install Qt system dependencies:
|
|
489
|
+
sudo apt install libgl1 libglib2.0-0 libdbus-1-3
|
|
490
|
+
```
|
|
491
|
+
|
|
492
|
+
---
|
|
493
|
+
|
|
494
|
+
## FAQ
|
|
495
|
+
|
|
496
|
+
**Q: Do I need root access?**
|
|
497
|
+
A: No. VoidRemote uses Android's standard ADB interface which requires only Developer Options to be enabled.
|
|
498
|
+
|
|
499
|
+
**Q: Does it work over mobile data / VPN?**
|
|
500
|
+
A: ADB TCP/IP works over any IP network where port 5555 is reachable. VPN tunnels are supported if they carry TCP traffic.
|
|
501
|
+
|
|
502
|
+
**Q: Can I control multiple devices at once?**
|
|
503
|
+
A: Yes. The CLI accepts `--serial` arguments and the GUI maintains separate sessions per device.
|
|
504
|
+
|
|
505
|
+
**Q: Is my device data sent anywhere?**
|
|
506
|
+
A: No. VoidRemote communicates only with your device via ADB. No telemetry, no cloud, no tracking.
|
|
507
|
+
|
|
508
|
+
**Q: Which Android versions are supported?**
|
|
509
|
+
A: ADB input and shell commands work on Android 4.0+. Wireless Debugging pairing requires Android 11+.
|
|
510
|
+
|
|
511
|
+
---
|
|
512
|
+
|
|
513
|
+
## Contributing
|
|
514
|
+
|
|
515
|
+
Contributions are warmly welcome! Please read [CONTRIBUTING.md](CONTRIBUTING.md) before submitting a pull request.
|
|
516
|
+
|
|
517
|
+
```bash
|
|
518
|
+
# Fork the repo and clone your fork
|
|
519
|
+
git clone https://github.com/YOUR_USERNAME/VoidRemote.git
|
|
520
|
+
cd VoidRemote
|
|
521
|
+
|
|
522
|
+
# Install dev dependencies
|
|
523
|
+
pip install -e ".[dev]"
|
|
524
|
+
|
|
525
|
+
# Install pre-commit hooks
|
|
526
|
+
pre-commit install
|
|
527
|
+
|
|
528
|
+
# Run tests
|
|
529
|
+
pytest tests/ -v
|
|
530
|
+
|
|
531
|
+
# Check formatting
|
|
532
|
+
black --check voidremote/ tests/
|
|
533
|
+
ruff check voidremote/ tests/
|
|
534
|
+
```
|
|
535
|
+
|
|
536
|
+
---
|
|
537
|
+
|
|
538
|
+
## Roadmap
|
|
539
|
+
|
|
540
|
+
- [ ] **v1.1**: Live screen mirroring via `scrcpy` Python bindings
|
|
541
|
+
- [ ] **v1.2**: Multi-device simultaneous control
|
|
542
|
+
- [ ] **v1.3**: Macro scheduling (cron-style task runner)
|
|
543
|
+
- [ ] **v1.4**: Plugin system for custom device profiles
|
|
544
|
+
- [ ] **v2.0**: Android TV remote support
|
|
545
|
+
|
|
546
|
+
---
|
|
547
|
+
|
|
548
|
+
## License
|
|
549
|
+
|
|
550
|
+
MIT License โ see [LICENSE](LICENSE) for full text.
|
|
551
|
+
|
|
552
|
+
---
|
|
553
|
+
|
|
554
|
+
## Author
|
|
555
|
+
|
|
556
|
+
**V0IDNETWORK**
|
|
557
|
+
|
|
558
|
+
> V0IDNETWORK is an ongoing, open research effort to document โ rigorously and accurately โ how the modern Internet's circumvention and surveillance technologies actually work at the protocol level, in support of a more open and resilient Internet.
|
|
559
|
+
|
|
560
|
+
| Platform | Link |
|
|
561
|
+
|----------|------|
|
|
562
|
+
| ๐ Website | [voidNetwork.ir](http://voidNetwork.ir/) |
|
|
563
|
+
| ๐ป GitHub | [@V0IDNETWORK](https://github.com/V0IDNETWORK) |
|
|
564
|
+
| ๐ผ LinkedIn | [ilianothing](https://www.linkedin.com/in/ilianothing) |
|
|
565
|
+
| ๐ธ Instagram | [@ilianothing](https://www.instagram.com/ilianothing) |
|
|
566
|
+
| โถ๏ธ YouTube | [@locailife](https://youtube.com/@locailife?si=KMPEWpxZg2CpgfX_) |
|
|
567
|
+
| ๐ฏ TryHackMe | [ilianothingg](https://tryhackme.com/p/ilianothingg) |
|
|
568
|
+
| โ๏ธ Medium | [@ilianothingg](https://medium.com/@ilianothingg) |
|
|
569
|
+
| ๐ฌ Telegram | [@voidxMaster](https://t.me/voidxMaster) |
|
|
570
|
+
| ๐ง Email | [ilianothingg@gmail.com](mailto:ilianothingg@gmail.com) |
|
|
571
|
+
|
|
572
|
+
---
|
|
573
|
+
|
|
574
|
+
<div align="center">
|
|
575
|
+
|
|
576
|
+
Made with โค๏ธ by V0IDNETWORK ยท [Star this repo](https://github.com/V0IDNETWORK/VoidRemote) if you find it useful!
|
|
577
|
+
|
|
578
|
+
</div>
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
voidremote/__init__.py,sha256=7sXTqK811GgibttsWicVYdP3P_HPirB4lNqw1y1GKAQ,804
|
|
2
|
+
voidremote/adb/__init__.py,sha256=lgltZ46x4urkpW3cxkO_AAFi7sR8ILI6TXk7qJY2Yec,658
|
|
3
|
+
voidremote/adb/client.py,sha256=RXAydGdmD9I3w8hJpNtp8fISdmSJqTZ6rEEKQOqltPo,13735
|
|
4
|
+
voidremote/adb/device_parser.py,sha256=ySfUs49AA-7eSSwgbJ-36BJC4fswTbVkK9PIDVW7ynU,9014
|
|
5
|
+
voidremote/cli/__init__.py,sha256=94vvRS7VAA5sX31npcOoJKgZngEezf_NuC3dr7jNC2c,100
|
|
6
|
+
voidremote/cli/main.py,sha256=L7Jb-avktibRukwFKZX_tQ6YW7StgEfJF1YXRQvaIH4,34330
|
|
7
|
+
voidremote/config/__init__.py,sha256=Hs27n9IsOVu1IltzE4-yuc0xnEg0J8AEtiOp8EHzykc,652
|
|
8
|
+
voidremote/config/settings.py,sha256=4wvZ7ezi0ujg-gjt2mti32AsC7TBqAeXn25WNJLboPk,7286
|
|
9
|
+
voidremote/controllers/__init__.py,sha256=Z_yrqU9Hr1CxX2J3cw2i4x3HB9lnOgV8gVZxVbm1i7g,136
|
|
10
|
+
voidremote/controllers/app_controller.py,sha256=h0QDaxXsBz2bmfqXl5IJGcMunrHCuEiHdNJ38ITVeDo,7997
|
|
11
|
+
voidremote/core/__init__.py,sha256=7pxArLZ-fGbaOIhWxvS-8TRfMg-pqrAw-LFsXI4hV6s,31
|
|
12
|
+
voidremote/core/automation.py,sha256=NiPS9a1huFCtKXaDoC7oYS_vvQi24g1p3Ouf_4tqw7Y,6159
|
|
13
|
+
voidremote/models/__init__.py,sha256=_6MU5UcE3IMpkUuDEzAofF8458cd-MtkULWk7Xs-BS4,529
|
|
14
|
+
voidremote/models/device.py,sha256=Z9v_Vyxq30bo2qqm01P2wMTLEsPof0dteJjbrlp1JTY,7984
|
|
15
|
+
voidremote/network/__init__.py,sha256=N4wMGF8nxsVItvmqmaXv6hl7kzrR4GnWphCmVZhqjlI,36
|
|
16
|
+
voidremote/network/discovery.py,sha256=HSqm7Sh9jRTsfjLp1lQKQAdvu9-FYGJtzFaQeRnWP84,3424
|
|
17
|
+
voidremote/services/__init__.py,sha256=22d7ZqQzhTs60vY0zjS80SxDrIi9mgrBuMOnItc2DEk,356
|
|
18
|
+
voidremote/services/device_service.py,sha256=LAeFVv-ej-mYYljjJ9iLbP9Pd1NplK9-Kk7cokeVl4A,11120
|
|
19
|
+
voidremote/services/input_service.py,sha256=4uOaEW5lGrkXL_naSlt8rEoXzA2CLHXmCRtQseUSh60,5415
|
|
20
|
+
voidremote/services/monitor_service.py,sha256=YYk97dYvk_Yj11F6KK2OdN9Z_9U8UlVu5Kjtz6wQjcw,6505
|
|
21
|
+
voidremote/ui/__init__.py,sha256=5dWKcJuReP5O_yMX2btZPR1GFoGoArKwQRoHoAtK9Hg,30
|
|
22
|
+
voidremote/ui/app.py,sha256=HYVkVNdlhUuaAXmNRmA-9Q6X1NIxC5I8YLHs4hgQRyU,1945
|
|
23
|
+
voidremote/ui/main_window.py,sha256=jFl9tFZoAbL6Z3Dtai4x_2DQZwF2KjpTJRUUxOVtjfM,14046
|
|
24
|
+
voidremote/ui/theme.py,sha256=CaReZ9uZ0y7UY89nihKAo179bsioYlIoA_BoSOyBUlA,12267
|
|
25
|
+
voidremote/ui/dialogs/__init__.py,sha256=1bhJ2r-_AQvUCJtdNfI1fJqUeWgrV4mV1Rrz4AINM1U,193
|
|
26
|
+
voidremote/ui/dialogs/connect_dialog.py,sha256=oraKsCE6nluERlyqp7PST4_uteWx1g0sXNE94Jg0SE8,4673
|
|
27
|
+
voidremote/ui/dialogs/pair_dialog.py,sha256=TUr4I3Ut4JuQE-axZRcWxw2YFRBCkJmXIFlM3d6h_mc,5905
|
|
28
|
+
voidremote/ui/views/__init__.py,sha256=D1Yh9UA2aOA0pmWleWZL1Qg1Ruy4YhWwSviispgdTU8,420
|
|
29
|
+
voidremote/ui/views/dashboard_view.py,sha256=O0gPLE2L53UVzlYys2XokZkkZmryXryiqs3uTBdakpw,8716
|
|
30
|
+
voidremote/ui/views/files_view.py,sha256=wfvBN8-nf9oq6iX5EmzyUThIrSfeNUqx9zbVXu1scMY,12034
|
|
31
|
+
voidremote/ui/views/monitor_view.py,sha256=vs-bKTMXoEepKmzulMMqiyCGJuYh11y-hS9SxS0k9G4,8543
|
|
32
|
+
voidremote/ui/views/settings_view.py,sha256=dTliEWBg_W4k_41cO56s_vPJvGI-eLcQxOsbX6NAjBA,9222
|
|
33
|
+
voidremote/ui/views/shell_view.py,sha256=GMe7vg0lPkG8yfCvScYTofL8BJjZArOhINKbHVWDzmw,8339
|
|
34
|
+
voidremote/ui/widgets/__init__.py,sha256=5kW1OTgdd-cfIATNI0zLhUzDNRpF5JMZprgeqDGZAJg,356
|
|
35
|
+
voidremote/ui/widgets/device_card.py,sha256=4iATAWq6aF8z4oFTxDaVdk1kMO9EuLzvLh476Y0fyF0,9472
|
|
36
|
+
voidremote/ui/widgets/log_view.py,sha256=CTTRrRDjbHdKRmmWhJnd-q1DWYU-qyVwyz5NZoTQYVU,5411
|
|
37
|
+
voidremote/ui/widgets/metric_gauge.py,sha256=nOuvXbmj2ieAgAk_wx0EU4BxXfjYZau21Y-VBDxkV3c,2836
|
|
38
|
+
voidremote/utils/__init__.py,sha256=E8iKU2qhYjRm7jhY4q4Wz1Wbidd5NUOnZcQDCu8r81U,646
|
|
39
|
+
voidremote/utils/logging.py,sha256=HeMCg38Z3YKFeqXduXj16g43b2CdcDXWKSWMLDBq1Gk,3764
|
|
40
|
+
voidremote/utils/security.py,sha256=Wzr4_t1QCYm2q-fEtPgttSGNWYwBQOs_CyxZCk_NJbE,5416
|
|
41
|
+
voidremote-1.0.0.dist-info/licenses/LICENSE,sha256=dEg1AI57WEpg6n3DqHcrtTney8-9HwQCaoY1pFbDZbc,1093
|
|
42
|
+
voidremote-1.0.0.dist-info/METADATA,sha256=2bxd3mvdmXAmXXC8Hg3hz2pT7ip-bf-457U5RMyKmAU,19517
|
|
43
|
+
voidremote-1.0.0.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
|
|
44
|
+
voidremote-1.0.0.dist-info/entry_points.txt,sha256=HXhdnMqIbOIoSkp0xmY4dzocJ1lu-vOF0cuTg7Esvys,110
|
|
45
|
+
voidremote-1.0.0.dist-info/top_level.txt,sha256=8ow5LSf1RHEg972UdHFErh7GSbqH8NFoGcPNoOSEXPQ,11
|
|
46
|
+
voidremote-1.0.0.dist-info/RECORD,,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 V0IDNETWORK <ilianothingg@gmail.com>
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
voidremote
|