# 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//` 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 ``` `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.