Files
adb-sideload-free-apps/README.md

73 lines
2.2 KiB
Markdown

# adb-sideload-free-apps
Install free Android apps via ADB from F-Droid, GitHub Releases, GitLab Releases, Codeberg Releases, or generic HTTPS pages.
## Requirements
- Python 3.11+
- `adb` (Android Debug Bridge) in PATH
- `aapt2` or `aapt` (Android SDK Build Tools) in PATH
## Quick start
```bash
python -m pip install -e .
cp config.example.toml config.toml
# Edit config.toml to add your apps
python -m sideload
```
## Usage
```
sideload [APP] [--list] [--device SERIAL] [--dry-run] [--config PATH]
```
- `APP` — app name from config (omit for interactive selection)
- `--list` — list configured apps
- `--device`, `-s` — ADB device serial
- `--dry-run` — resolve, download, validate without installing
- `--config`, `-c` — path to config.toml (default: ./config.toml)
## Configuration
See `config.example.toml`. Supported sources:
| Source | Required fields |
| -------- | ---------------------------- |
| `fdroid` | `url` (page F-Droid) |
| `github` | `url` (repository) |
| `gitlab` | `url` (projet) |
| `codeberg` | `url` (repository Codeberg) |
| `generic` | `url`, `asset_pattern` (HTTPS page or directory) |
Every application also requires `name` and `package`. For GitHub, GitLab, and Codeberg,
set `asset_pattern` when a release contains more than one suitable APK. Debug,
test and unsigned APKs are rejected by default.
The `generic` source follows HTTPS anchor links from `url`. Use ordered
`intermediate_patterns` to navigate directories; when several links match, a
pattern with numeric capture groups selects the greatest numeric tuple.
`asset_pattern` is required and must match exactly one final APK. Optional
`headers` and `sha256` are supported; header values are never logged.
`aapt2` is used to validate the APK package ID before installation, with
`aapt` as a fallback for older Android SDK Build Tools. At least one of them
must be available in `PATH`. The script refuses to install an APK when neither
tool can validate it.
For Wi-Fi ADB, configure an explicit address after enabling wireless debugging:
```toml
[adb]
mode = "wifi"
address = "192.168.1.42:5555"
```
## Testing
```bash
pip install pytest
python -m pytest tests/ -v
```