Add README (build, install, usage)
This commit is contained in:
parent
9fc4e462d0
commit
386cbb4c63
1 changed files with 97 additions and 0 deletions
97
README.md
Normal file
97
README.md
Normal file
|
|
@ -0,0 +1,97 @@
|
||||||
|
# HA starten — Tailscale + Home Assistant launcher
|
||||||
|
|
||||||
|
Minimalistische Android app die in één tik **Tailscale VPN aanzet** en daarna de
|
||||||
|
**Home Assistant** app opent. Ideaal als je HA alleen bereikbaar is via de
|
||||||
|
Tailscale MagicDNS-naam (bijv. `https://homeassistant.tail…ts.net`): buiten je
|
||||||
|
thuisnetwerk moet eerst de tunnel omhoog, pas dan kan de HA-app verbinden.
|
||||||
|
|
||||||
|
## Waarom
|
||||||
|
|
||||||
|
- HA-app staat louter op de **tailnet-URL** (geen LAN-IP), dus de tunnel moet
|
||||||
|
actief zijn vóór HA een verbinding kan maken.
|
||||||
|
- `getLaunchIntentForPackage`/broadcasts overnemen in Tasker was fragiel en
|
||||||
|
verward (accessibility-service, package-visibility, exit-condities). Eén
|
||||||
|
knop-app is simpeler en betrouwbaarder.
|
||||||
|
|
||||||
|
## Werking
|
||||||
|
|
||||||
|
Op basis van de [officiële Tailscale Android intents](https://github.com/tailscale/tailscale-android/pull/87):
|
||||||
|
|
||||||
|
| Knop | BroadCast intent |
|
||||||
|
|---|---|
|
||||||
|
| **VPN aan + HA openen** | `com.tailscale.ipn.CONNECT_VPN` |
|
||||||
|
| **VPN uit** (sluit daarna de app) | `com.tailscale.ipn.DISCONNECT_VPN` |
|
||||||
|
|
||||||
|
Beide gericht op `com.tailscale.ipn/.IPNReceiver` (Broadcast Receiver). De app
|
||||||
|
wacht ~3 s na CONNECT (Tailscale-handshake) voordat hij de HA-app start.
|
||||||
|
|
||||||
|
### Knoppen
|
||||||
|
- Verbind-knop bovenaan, uit-knop onderaan — ver uit elkaar om fouttappen te
|
||||||
|
voorkomen.
|
||||||
|
|
||||||
|
## Vereisten
|
||||||
|
|
||||||
|
- Android 8.0+ (minSdk 26, targetSdk 34)
|
||||||
|
- **Tailscale** app geïnstalleerd en ingelogd
|
||||||
|
- **Home Assistant** Companion app geïnstalleerd (`io.homeassistant.companion.android`)
|
||||||
|
|
||||||
|
> Batterijoptimalisatie uitzetten voor Tailscale werkt het betrouwbaarst;
|
||||||
|
> direct na een telefoon-reboot kan de broadcast-intent kort falen (startlag van
|
||||||
|
> Tailscale's `IPNReceiver`).
|
||||||
|
|
||||||
|
## Bouwen
|
||||||
|
|
||||||
|
De app is bewust Gradle-vrij — een handmatige `aapt2`/`javac`/`d8`-pipeline op een
|
||||||
|
machine met Android SDK build-tools + platform 34:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
SDK=/opt/homebrew/share/android-commandlinetools
|
||||||
|
BT=$SDK/build-tools/34.0.0
|
||||||
|
AJ=$SDK/platforms/android-34/android.jar
|
||||||
|
|
||||||
|
mkdir -p classes dex out out/res
|
||||||
|
|
||||||
|
# 1. resources compilen + linken
|
||||||
|
aapt2 compile --dir res -o out/res/
|
||||||
|
aapt2 link -o out/app-unsigned.apk -I "$AJ" \
|
||||||
|
--manifest AndroidManifest.xml \
|
||||||
|
--min-sdk-version 26 --target-sdk-version 34 \
|
||||||
|
--version-code 1 --version-name 1.0 \
|
||||||
|
$(find out/res -name '*.flat')
|
||||||
|
|
||||||
|
# 2. Java -> dex (gebruik een recente d8; oudere build-tools-d8 faalt op inner classes)
|
||||||
|
javac --release 8 -classpath "$AJ" -d classes src/nl/eddy/tailscalehalauncher/MainActivity.java
|
||||||
|
d8 --release --lib "$AJ" --output dex classes/nl/eddy/tailscalehalauncher/*.class
|
||||||
|
|
||||||
|
# 3. dex in apk, align, sign
|
||||||
|
(cd out && zip -qj app-unsigned.apk ../dex/classes.dex)
|
||||||
|
zipalign -f 4 out/app-unsigned.apk out/app-aligned.apk
|
||||||
|
apksigner sign --ks debug.keystore --ks-pass pass:android \
|
||||||
|
--out out/app.apk out/app-aligned.apk
|
||||||
|
```
|
||||||
|
|
||||||
|
Resultaat: `out/app.apk`.
|
||||||
|
|
||||||
|
## Installeren
|
||||||
|
|
||||||
|
```bash
|
||||||
|
adb install -r out/app.apk
|
||||||
|
```
|
||||||
|
|
||||||
|
of kopieer `out/app.apk` naar de telefoon en tik hem aan (sideload; "onbekende
|
||||||
|
bronnen" toestaan).
|
||||||
|
|
||||||
|
## Projectstructuur
|
||||||
|
|
||||||
|
```
|
||||||
|
AndroidManifest.xml # manifest + <queries> voor HA-zichtbaarheid
|
||||||
|
src/nl/eddy/tailscalehalauncher/ # MainActivity (enige bron)
|
||||||
|
res/mipmap-{mdpi..xxxhdpi}/ic_launcher.png # launcher-icoon (HA-blauw + dikke L)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Aanpassen
|
||||||
|
|
||||||
|
- **Wachttijd VPN → HA-start:** `WAIT_FOR_VPN_MS` in `MainActivity.java`.
|
||||||
|
- **Andere target-app:** `HA_PKG` in `MainActivity.java`.
|
||||||
|
- **Icoon regenereren:** de `res/mipmap-*/ic_launcher.png` worden uit een 512px-PNG
|
||||||
|
gemaakt (`Image.LANCZOS` downscale); pas ze direct aan als je er een wilt wijzigen.
|
||||||
Loading…
Reference in a new issue