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

4.2 KiB

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ötigandroid/ 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:
    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):
    <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.