ATAK (Android Team Awareness Kit) und sein Desktop-Pendant WinTAK sind die de-facto taktischen Anwendungen zur Lagebildverarbeitung, die von US- und NATO-Streitkräften, verbündeten Militärs und zunehmend zivilen Einsatzkräften genutzt werden. Sie stellen ein gemeinsames Lagebild (COP) dar, tauschen Cursor-on-Target (CoT)-Nachrichten über den TAK-Server aus, verwalten Kartenebenen und beherbergen ein offenes Plugin-SDK. Für Software-Ingenieure im Verteidigungsbereich ist der Bau eines ATAK- oder WinTAK-Plugins meist der schnellste Weg zur einsatzfähigen Fähigkeit — Größenordnungen schneller als die Auslieferung einer eigenständigen taktischen App.
Dieser Artikel ist ein Engineering-Leitfaden: vom leeren Android-Studio-Projekt bis zu einem signierten, verteilbaren Plugin, das einen echten Operator-Tag übersteht. Es wird vorausgesetzt, dass Sie das ATAK-CIV SDK von tak.gov angefordert und erhalten haben und über eine TAK-Server-Instanz verfügen, mit der Sie sich verbinden können.
Warum ATAK/WinTAK-Plugins
Der strategische Grund, ein Plugin statt einer eigenständigen App zu bauen, ist Hebelwirkung. ATAK löst die schwierigen Probleme bereits: Kartendarstellung mit Vektor- und Rasterquellen, GPS-Verarbeitung, Funkintegration, CoT-Messaging, Multicast-Discovery, verschlüsselter TAK-Server-Transport, Benutzeridentität und ein Navigationsmodell, an das Operatoren seit Jahren trainiert sind. Ein Plugin erbt all das kostenlos.
Der taktische Grund ist Akzeptanz. Ein Operator, der bereits ATAK auf einem Samsung S22 Tactical Edition oder einem Galaxy XCover mit Brustgurt nutzt, installiert ein weiteres Plugin in Sekunden. Denselben Operator dazu zu bringen, eine zweite eigenständige taktische App zu installieren, zu erlernen und ihr zu vertrauen, ist ein deutlich reibungsreicherer Weg. Plugins reiten auf der bestehenden Vertrauensoberfläche. Für neue Sensoren, missionsspezifische Workflows, Drohnenintegration oder NATO-spezifische Nachrichtenübersetzer ist ein Plugin fast immer das korrekte Auslieferungsformat.
ATAK ist eine Plattform, nicht nur eine App. Sie als Plattform zu behandeln — und Ihren Code als Teilnehmer an den Verträgen dieser Plattform — ist die notwendige Denkweise, um Plugins auszuliefern, die die Operator-Prüfung bestehen.
ATAK-CIV vs. ATAK-MIL
Es gibt zwei ATAK-Editionen, die einen Plugin-Autor interessieren. ATAK-CIV ist die zivile Version, die über den Google Play Store und tak.gov für die uneingeschränkte Nutzung verteilt wird. ATAK-MIL ist die militärische Variante, die vom U.S. Army DEVCOM C5ISR Center gepflegt und nur über kontrollierte Kanäle an autorisierte Einheiten verteilt wird.
Aus SDK-Sicht teilen sich die beiden eine gemeinsame Plugin-API — dasselbe AbstractPlugin, dasselbe MapView, denselben CotEventDispatcher. Die Unterschiede, die für einen Plugin-Ingenieur wichtig sind: ATAK-MIL enthält Adapter für klassifizierte Daten, militärspezifische Symbolik (MIL-STD-2525D vollständig befüllt), Funktreiber für SRW, ANW2C, Link-16-Gateways und Sicherheitskontrollen, die das Plugin-Laden über den Signaturschlüssel reglementieren. Ein Plugin, das gegen ATAK-CIV kompiliert wurde, lädt unter ATAK-MIL, sofern die API-Version übereinstimmt und das Plugin mit einem genehmigten Schlüssel signiert ist — UI- und Fähigkeitsannahmen können jedoch brechen, wenn Sie von Widgets abhängen, die nur in einer Edition existieren.
Prototypen auf ATAK-CIV. Das SDK ist offen, die Geräteanforderungen sind niedriger, und Sie können gegen einen öffentlichen TAK-Server iterieren. Wenn die Fähigkeit bewiesen ist, portieren Sie zu ATAK-MIL: neu signieren mit der genehmigten militärischen Signaturkette, gegen die Ziel-API-Version validieren und auf tatsächlichen Endgeräten erneut testen (typischerweise EUD-Klasse Samsung-Handsets oder Persistent Systems MPU5 Puck-Displays).
Projekt-Skelett
Ein ATAK-Plugin ist ein Android-Library-Modul mit einem spezifischen Manifest-Vertrag. Starten Sie vom plugin-template Gradle-Projekt, das im ATAK-CIV SDK enthalten ist. Die wichtigen Abhängigkeiten: die main.jar aus dem SDK (ATAK-API), das gradle-atak-plugin Gradle-Plugin und AndroidX-Bibliotheken, gepinnt auf die Versionen, die ATAK selbst ausliefert — Versionsabweichungen hier sind eine häufige Ursache für NoSuchMethodError zur Laufzeit.
Die AndroidManifest.xml muss die Plugin-Descriptor-Metadaten deklarieren: com.atakmap.app.component, der auf Ihre AbstractPlugin-Subklasse zeigt, die API-Version, auf die das Plugin abzielt, und die benötigten Berechtigungen. ATAK nutzt das Manifest, um Plugins zu entdecken und zu laden; ein fehlerhafter Descriptor ist der häufigste Grund, warum ein Plugin im ATAK-Plugin-Manager nicht erscheint.
Lifecycle-Hooks leben auf AbstractPlugin (in neueren SDK-Versionen auch als IPlugin verfügbar). onCreate(Context, MapView) ist der Ort, an dem Sie Tools, Drop-Downs, Layer und Listener registrieren. onDestroyImpl ist der Ort, an dem Sie diese deregistrieren müssen — anderenfalls lecken Listener über Plugin-Reloads hinweg, was bei Operator-Updates ein realer Fall ist. onConfigurationChanged behandelt Geräterotation und Themenwechsel. Behandeln Sie Lifecycle-Methoden wie Android-Activity-Lifecycle: gehen Sie davon aus, dass sie mehrfach in unerwarteter Reihenfolge aufgerufen werden können.
Die API-Versionskompatibilität wird zur Ladezeit erzwungen. ATAK 4.x bis 5.x hat brechende API-Änderungen ausgeliefert; pinnen Sie PluginAPI in Ihrem Manifest auf die niedrigste unterstützte Version und testen Sie gegen jedes Minor-Release in Ihrem Ziel-Deployment. Eine Kompatibilitätsmatrix in Ihrer README — „dieses Plugin: ATAK-CIV 4.10 bis 5.2, ATAK-MIL 5.0+" — ist der Vertrag, an den Operatoren Sie binden werden.
CoT-Integration
Cursor-on-Target (CoT) ist das XML-Nachrichtenformat, das jeder Teilnehmer im TAK-Ökosystem spricht. Jedes CoT-Ereignis hat eine UID, einen Typcode (eine hierarchische Zeichenfolge wie a-f-G-U-C-I für freundliche Bodeneinheit, Kampf, Infanterie), Punkt (lat/lon/hae), Zeit, Stale-Zeit und beliebige Detail-Kinder. Plugins emittieren CoT, um Sensorkontakte, Missionen, Geofences und benutzerdefinierte Spurtypen zu melden; sie konsumieren CoT, um auf Ereignisse zu reagieren, die der Operator oder andere Systeme produzieren.
Die beiden wichtigen API-Oberflächen: CotMapComponent exponiert den zentralen CotEventDispatcher für eingehende Ereignisse, und CotMapComponent.getInternalDispatcher() plus CommsMapComponent.getInstance().sendCoT(event) für ausgehende. Registrieren Sie einen CotEventListener in onCreate, filtern Sie nach Typpräfix und delegieren Sie an die Domänenlogik Ihres Plugins. Bauen Sie für ausgehende Ereignisse das CotEvent programmatisch — verketten Sie keine XML-Strings. Operatoren haben Track-Icons verloren wegen fehlerhaftem XML, das durch String-Templating erzeugt wurde.
Schemavalidierung verhindert taktische Datenkorruption. Validieren Sie jedes eingehende CoT-Ereignis gegen das erwartete Detail-Schema, bevor Sie seinem Inhalt vertrauen — Typcode, Punktgrenzen (eine Breite von 9000 ist ein Parser-Bug irgendwo stromaufwärts, den Sie nicht in Ihr Overlay übernehmen wollen) und Monotonie der Stale-Zeit. CoT ist absichtlich permissiv; defensives Parsen ist die Verantwortung des Plugin-Autors.
Kartenebenen-Plugins
Das mit Abstand häufigste ATAK-Plugin-Muster ist das Hinzufügen eines benutzerdefinierten Karten-Overlays: Drohnentelemetrie, EW (elektronische Kampfführung)-Signalabdeckung, freundliche Artillerie-Fächer, No-Strike-Zonen, Schätzungen der Mesh-Funkabdeckung. Der Karten-Stack von ATAK ist GLMapView (OpenGL ES) mit einem Layer-Ordering-Modell, das auf Integer-Z-Order plus Sichtbarkeitsgruppen basiert.
Fügen Sie Layer hinzu, indem Sie AbstractLayer für Vektordaten subklassifizieren oder TileClientControl für Raster-Overlays erweitern. MapItem ist die Einheit interaktiven Inhalts — Marker, Formen, Zeichenprimitive — und hat einen vollständigen Lebenszyklus: onMapItemEvent feuert für Klicks, Drags, Löschungen und Sichtbarkeitsänderungen. Langlebige Plugins müssen ihre MapItems in onDestroyImpl entfernen; verwaiste Elemente überdauern Plugin-Reloads und verwirren Operatoren.
Performance zählt mehr als die meisten erwarten. Tausende von Features gleichzeitig sind normal — ein weitflächiger ISR-Feed produziert leicht 5.000 bis 20.000 sichtbare Spuren. Aggressiv clustern, Marker.setVisible(false) statt Entfernen/Neuerstellen verwenden und schwere Mathematik (geodätische Puffer, Sichtbarkeitsberechnungen) vom UI-Thread auslagern. Erreichen Sie ein 60-fps-Ziel auf einem Samsung S22 Tactical; wenn nicht, wird Ihr Plugin deinstalliert.
UI-Disziplin
Die UI-Konventionen von ATAK existieren aus einem Grund: ein Operator mit Handschuhen, bei wenig Licht, möglicherweise unter Feuer, navigiert per Muskelgedächtnis. Drop-Downs (das rechtsseitig herausfahrende Panel) sind die kanonische Methode, Plugin-UI darzustellen. Erweitern Sie DropDownReceiver, registrieren Sie Ihre Intent-Aktion und überlassen Sie ATAK den Show/Hide-Lifecycle. Öffnen Sie nicht Ihre eigenen Dialogfenster über der Karte — sie brechen den Karten-Gestenstack und desorientieren Operatoren.
Die Platzierung des Navigationsmenüs wird durch Werkzeugregistrierung gesteuert. Verwenden Sie ToolbarBroadcastReceiver oder die neuere Plugin-Pane-API, um Ihren Einstiegspunkt in die rechte Symbolleiste oder das Overflow-Tray zu platzieren. Benennung zählt: kurze Verben („Tracken", „Markieren", „Scannen"), keine Substantive („Tracking-Manager"). Icons müssen bei 24dp auf einem 5-Zoll-Bildschirm im direkten Sonnenlicht lesbar sein — das heißt: kontrastreich, einzelne Vordergrundform, kein Gradient.
Dark Mode ist der einzige Modus. Das Standardthema von ATAK ist für Low-Light-Betrieb und Nachtsichtkompatibilität gebaut. Führen Sie niemals einen weißen Hintergrund in einem Drop-Down ein — er blendet die NV-Optik des Operators und verrät seine Position. Verwenden Sie die ATAK-Themenkonstanten (atakmap.android.R.style.ATAK_TextAppearance und Verwandte), damit Ihre Widgets das bevorzugte Profil des Operators übernehmen, einschließlich des rotlicht-NVG-kompatiblen Modus.
Plugin-Signierung und Verteilung
ATAK erzwingt Plugin-Signierung als Ladezeit-Gate. Jedes Plugin-APK muss mit einem Schlüssel signiert sein, dem die laufende ATAK-Installation vertraut. ATAK-CIV liefert einen permissiven Trust-Store, der den Entwicklungs-Debug-Schlüssel plus eine kleine Menge Community-Schlüssel akzeptiert; ATAK-MIL akzeptiert nur Schlüssel, die von der kontrollierenden militärischen Behörde ausgestellt wurden. Planen Sie die Signierung früh — eine erneute Signierung eines Plugins, das bereits in Operator-Händen ist, erfordert eine erneute Verteilung.
Die Signaturkette ist Standard-Android: keytool zum Erzeugen des Keystores, jarsigner oder Gradle signingConfigs zum Signieren des APK, apksigner v2/v3 zur Verifikation. ATAK validiert die Signatur zur Ladezeit und zeigt im Plugin-Manager „Plugin-Signatur ungültig" an, wenn sie fehlschlägt — ein generischer Fehler, der in der Praxis fast immer Schlüsselabweichung oder APK-Signaturschema-Versionsmismatch bedeutet.
Verteilungswege variieren je Edition. ATAK-CIV-Plugins werden über den Play Store, tak.gov oder Sideload via URL-Abruf des Plugin-Managers verteilt. ATAK-MIL-Plugins werden über militärische App-Stores (NIPRNet/SIPRNet-Repositorien, einheitenspezifische MDM-Kanäle) mit Prüfzyklen verteilt, die Wochen dauern können. Versions-Pinning ist vertraglich: ein MDM-Rollout sperrt typischerweise sowohl ATAK- als auch Plugin-Versionen, und ein Out-of-Band-Plugin-Update ist keine Option, sobald eine Rotation ausgerollt ist.
Produktionsrealitäten
Akku ist die erste Produktionsbeschränkung. Ein Plugin, das das GPS jede Sekunde aufweckt oder einen partiellen Wake-Lock hält, entleert eine EUD-Batterie, bevor eine vierstündige Patrouille abgeschlossen ist. Profilieren Sie mit Androids Battery Historian, bevorzugen Sie ATAKs vorhandene Ortungsdienste (die bereits Fixes über Plugins hinweg deduplizieren) und planen Sie niemals Hintergrundarbeit, die nicht durch Operator-Absicht gesteuert wird.
Low-Network-Betrieb ist der zweite. ATAK ist darauf ausgelegt, getrennt und intermittierend verbunden zu arbeiten; jedes Plugin, das IP-Erreichbarkeit annimmt, scheitert in dem Moment, in dem der Operator die FOB verlässt. Stellen Sie ausgehende Arbeit auf der Festplatte in Warteschlangen, leeren Sie bei Wiederverbindung und degradieren Sie graziös — die Muster sind dieselben wie für offline-first militärische Apps und den MBTiles/PMTiles Offline-Karten-Stack, den ATAK selbst verwendet.
Telemetrie ist der dritte und am stärksten eingeschränkte Punkt. OPSEC verlangt, dass Plugins nicht nach Hause telefonieren — nicht zu Ihrem Analytics-Endpunkt, nicht zu einem Crash-Reporter, nicht zu einem Lizenzserver. Schreiben Sie Telemetrie in die lokale Log-Datei, die ATAK bereits führt, exportieren Sie sie über den ATAK-Debug-Bundle-Export und lassen Sie die Einheit entscheiden, ob sie geteilt wird. Der Instinkt, Firebase Crashlytics in ein taktisches Plugin zu schicken, beendet die Bereitstellungsautorisierung des Plugins.
Support-Zyklen richten sich nach ATAKs Release-Kadenz, nicht nach Ihrer Roadmap. ATAK-CIV released etwa vierteljährlich; ATAK-MIL released auf militärischen Zeitplänen, die eine einzelne Version 18 Monate lang strecken können. Pflegen Sie ein rollierendes Support-Fenster — aktuelle Version plus die beiden vorherigen Minor-Versionen ist ein tragfähiger Vertrag — und behandeln Sie ATAK-Release-Notes als verbindlichen Eingang für Ihren Regressionsplan. Eine Fähigkeit, die mit breiteren C2-Systemen integriert oder NATO-taktische Datenverbindungen über ein Plugin speist, ist nur so zuverlässig wie Ihre Disziplin rund um den ATAK-Release-Train.