netdiag-app/native-plugin/README.md
Eduard Wisch 881ca7956f Phase 0: doppelte Plugin-Quelle aufgeloest, falsche Doku-Zusagen korrigiert
Aufraeumen vor den eigentlichen Korrekturen — ohne Verhaltensaenderung am Code.

Doppelte Plugin-Quelle:
Die drei Kotlin-Dateien lagen byte-identisch in native-plugin/ UND in
android/app/src/main/java/de/data_it_solution/netdiag/. Gebaut wurde immer nur die
Kopie unter android/ — eine Aenderung an der falschen Datei sah deshalb aus wie
"der Fix wirkt nicht". native-plugin/ enthaelt jetzt nur noch die Anleitung, die
auf den echten Ort verweist.

Doku sagte drei Dinge, die nicht stimmen:
- stresstest.ts behauptete "laeuft nativ als Foreground-Service". Tut es nicht —
  im Plugin steht an der Stelle nur ein Kommentar, dass man einen ergaenzen
  sollte. Bei ausgeschaltetem Display friert Android den Lauf ein.
- iperf.ts/scanner.ts/README nannten den Durchsatztest "iperf-kompatibel". Er
  spricht kein iperf3-Protokoll (kein Cookie, kein Parameterblock) und scheitert
  gegen einen echten iperf3-Server.
- ipscan.ts beschrieb sich als "ARP + Ping + Namen". Gefunden wird nur, wer auf
  Ping antwortet oder sich per mDNS meldet; die ARP-Tabelle wird lediglich
  nachgeschlagen und ist ab Android 10 meist gar nicht lesbar.

Statt der falschen Zusagen stehen dort jetzt die tatsaechlichen Grenzen plus
Verweis auf die Phase, die sie behebt.

README: DHCP-Check und WLAN-Scan als Werkzeuge entfernt (sind nicht mehr in
tools/index.ts registriert, tauchen aber in alten Protokollen noch auf).

Geprueft: vite build ok, svelte-check 0 Fehler (2 vorbestehende Warnungen).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-14 18:39:40 +02:00

83 lines
4.2 KiB
Markdown

# Natives Scan-Plugin `NetDiagScanner`
Der WebView kann keine Raw-Sockets/ICMP/ARP — die eigentliche Netzwerk-Messung
läuft in einem nativen Android-Plugin (Kotlin).
## Wo der Code liegt
**Einzige Quelle:**
```
android/app/src/main/java/de/data_it_solution/netdiag/
├── NetDiagScannerPlugin.kt Capacitor-Plugin mit allen Scan-Methoden
├── MonitorService.kt Vordergrund-Dienst des Geräte-Monitors
├── Snmp.kt minimaler SNMP-v2c-GET-Client
└── MainActivity.kt registriert das Plugin
```
> **Bis 08/2026 lagen dieselben Dateien zusätzlich hier im Ordner `native-plugin/`.**
> Gebaut wurde aber immer nur die Kopie unter `android/` — eine Änderung an der
> falschen Datei sah deshalb aus wie „der Fix wirkt nicht". Die Doppelablage ist
> aufgelöst; dieser Ordner enthält nur noch diese Anleitung.
Das Verzeichnis `android/` liegt vollständig im Repo (Kotlin, Manifest, Gradle,
Signing-Config sind dort fest eingerichtet). `npx cap sync android` kopiert nur die
Web-Assets hinein und aktualisiert die Plugin-Liste — es überschreibt **keinen**
nativen Code.
## Ein neues Plugin-Kommando ergänzen
1. Methode in `NetDiagScannerPlugin.kt` mit `@PluginMethod` anlegen.
2. Im TS-Wrapper `src/lib/scanner.ts` die Signatur ergänzen (inkl. Browser-Mock,
sonst lässt sich die Seite im Dev-Server nicht mehr bedienen).
3. Werkzeug unter `src/lib/tools/<kategorie>/` anlegen und in `tools/index.ts` eintragen.
## Erstmalige Einrichtung (nur relevant, wenn `android/` neu erzeugt wird)
Normalerweise **nicht nötig**`android/` ist eingecheckt. Falls doch:
1. `npm install && npx vite build && npx cap add android`
2. Kotlin-Dateien nach `android/app/src/main/java/de/data_it_solution/netdiag/` legen
3. Plugin in `MainActivity.kt` registrieren:
```kotlin
class MainActivity : BridgeActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
registerPlugin(NetDiagScannerPlugin::class.java)
super.onCreate(savedInstanceState)
}
}
```
4. **`kotlin-android` im Gradle-Build aktivieren** — sonst werden die `.kt`-Dateien
stillschweigend ignoriert, der Build ist grün und das Plugin fehlt im APK
(„plugin is not implemented on android", siehe KB #660).
5. Berechtigungen im `AndroidManifest.xml` (Stand heute):
```xml
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
```
`ACCESS_FINE_LOCATION` ist Pflicht, damit Android WLAN-Scan-Ergebnisse liefert.
## Bekannte Einschränkungen
- **ARP/MAC**: `/proc/net/arp` ist ab Android 10 in der Regel nicht mehr lesbar —
dann bleiben MAC und Hersteller leer. Das ist der Grund, warum in den bisherigen
Kunden-PDFs die Spalten MAC/Hersteller leer sind.
- **Hersteller-Lookup**: nur kleiner OUI-Auszug eingebaut. Für volle Abdeckung die
IEEE-OUI-Datei als Asset einbinden und in `ouiVendor()` nutzen.
- **Durchsatz-Test**: spricht **kein** iperf3-Protokoll, sondern schreibt/liest roh
auf einen TCP-Socket. Gegen einen echten iperf3-Server schlägt er fehl; er braucht
eine schlichte TCP-Sink/Source-Gegenstelle. Umbau steht in
`../../ROADMAP_UMSETZUNG.md` (Phase 1).
- **Stresstest**: läuft **nicht** in einem Foreground-Service — bei ausgeschaltetem
Display friert Android den Lauf ein. Umbau in Phase 2.
- **IP-Konflikt-Prüfung**: hängt an der ARP-Tabelle und ist damit auf aktuellen
Android-Versionen praktisch nicht durchführbar.
- **PoE-/Strommessung**: bewusst nicht enthalten (Hardware-Grenze) — späteres Modul.