ATAK (Android Team Awareness Kit) și fratele său desktop WinTAK sunt aplicațiile de facto de conștientizare situațională tactică utilizate în forțele SUA și NATO, armatele aliate și, din ce în ce mai mult, în rândul primilor respondenți civili. Redau un tablou operațional comun (COP) comun, schimbă mesaje Cursor-on-Target (CoT) prin TAK Server, gestionează suprafețele de hartă și găzduiesc un SDK deschis de plugin-uri. Pentru inginerii software de apărare, construirea unui plugin ATAK sau WinTAK este de obicei calea cea mai rapidă spre capacitate implementată — cu ordine de mărime mai rapid decât livrarea unei aplicații tactice independente.

Acest articol este un ghid ingineresc: de la proiectul gol Android Studio până la un plugin semnat, distribuibil, care supraviețuiește zilei unui operator real. Presupune că ați solicitat și primit SDK-ul ATAK-CIV de la tak.gov și aveți o instanță TAK Server la care vă puteți conecta.

De ce Plugin-uri ATAK/WinTAK

Motivul strategic pentru a construi un plugin mai degrabă decât o aplicație independentă este efectul de levier. ATAK rezolvă deja problemele dificile: randarea hărților cu surse vectoriale și raster, gestionarea GPS, integrarea radio, mesageria CoT, descoperirea multicast, transportul criptat TAK Server, identitatea utilizatorului și un model de navigare pe care operatorii l-au exersat de ani de zile. Un plugin moștenește toate acestea gratuit.

Motivul tactic este adoptarea. Un operator care rulează deja ATAK pe un Samsung S22 Tactical Edition sau un Galaxy XCover cu ham toracic va instala un alt plugin în câteva secunde. Convingerea aceluiași operator să instaleze, să învețe și să aibă încredere într-o a doua aplicație tactică independentă este o cale cu fricțiune mult mai mare. Plugin-urile călăresc suprafața de încredere existentă. Pentru senzori noi, fluxuri de lucru specifice misiunilor, integrare drone sau translatoare de mesaje specifice NATO, un plugin este aproape întotdeauna formatul de livrare corect.

ATAK este o platformă, nu doar o aplicație. Tratarea ei ca platformă — și a codului dvs. ca participant la contractele acelei platforme — este schimbarea de mentalitate necesară pentru a livra plugin-uri care trec revizuirea operatorului.

ATAK-CIV față de ATAK-MIL

Există două ediții ATAK cu care un autor de plugin-uri se preocupă. ATAK-CIV este versiunea civilă distribuită prin Google Play Store și prin tak.gov pentru utilizare nerestricționată. ATAK-MIL este varianta militară întreținută de U.S. Army DEVCOM C5ISR Center și distribuită numai prin canale controlate unităților autorizate.

Din perspectiva SDK-ului, cele două partajează un API comun de plugin-uri — aceeași clasă AbstractPlugin, același MapView, același CotEventDispatcher. Diferențele care contează pentru un inginer de plugin-uri sunt: ATAK-MIL include adaptoare de date clasificate, simbolistică specifică militară (MIL-STD-2525D complet populat), drivere radio pentru SRW, ANW2C, gateway-uri Link 16 și controale de securitate care condiționează încărcarea plugin-urilor după cheia de semnare. Un plugin compilat față de ATAK-CIV se va încărca față de ATAK-MIL dacă versiunea API se potrivește și plugin-ul este semnat cu o cheie aprobată — dar presupunerile de UI și capabilitate pot eșua dacă depindeți de widget-uri care există numai într-o ediție.

Prototipați pe ATAK-CIV. SDK-ul este deschis, cerințele de dispozitiv sunt mai mici și puteți itera față de un TAK Server public. Când capabilitatea este dovedită, portați la ATAK-MIL: re-semnați cu lanțul de semnare militar aprobat, validați față de versiunea API țintă și re-testați pe dispozitivele reale ale utilizatorilor finali (de obicei handset-uri Samsung clasa EUD sau afișaje puck Persistent Systems MPU5).

Scheletul Proiectului

Un plugin ATAK este un modul bibliotecă Android cu un contract specific de manifest. Porniți din proiectul Gradle plugin-template livrat în SDK-ul ATAK-CIV. Dependențele care contează: main.jar din SDK (ATAK API), plugin-ul Gradle gradle-atak-plugin și bibliotecile AndroidX fixate la versiunile cu care livrează ATAK însuși — decalajul de versiuni este o cauză frecventă a NoSuchMethodError la runtime.

AndroidManifest.xml trebuie să declare metadatele descriptorului plugin-ului: com.atakmap.app.component indicând subclasa dvs. AbstractPlugin, versiunea API pe care o vizează plugin-ul și permisiunile pe care le necesitați. ATAK utilizează manifestul pentru a descoperi și încărca plugin-uri; un descriptor incorect este cel mai comun motiv pentru care un plugin nu apare în managerul de plugin-uri ATAK.

Hook-urile de ciclu de viață trăiesc pe AbstractPlugin (expus și ca IPlugin în versiunile SDK mai noi). onCreate(Context, MapView) este locul unde înregistrați instrumente, drop-down-uri, straturi și ascultători. onDestroyImpl este locul unde trebuie să le deregistrați — nerespectarea acestui lucru scurge ascultători la reîncărcările plugin-ului, care este un scenariu real în timpul actualizărilor operatorului. onConfigurationChanged gestionează rotația dispozitivului și schimbările de temă. Tratați metodele ciclului de viață ca ciclul de viață al Android Activity: presupuneți că pot fi apelate de mai multe ori în ordini neașteptate.

Compatibilitatea versiunilor API este impusă la timp de încărcare. ATAK 4.x la 5.x a livrat modificări de API cu rupere a compatibilității; fixați PluginAPI în manifestul dvs. la cea mai mică versiune pe care o suportați și testați față de fiecare versiune minoră din implementarea dvs. țintă. O matrice de compatibilitate în README-ul dvs. — „acest plugin: ATAK-CIV 4.10 până la 5.2, ATAK-MIL 5.0+" — este contractul pe care operatorii îl vor respecta.

Integrarea CoT

Cursor-on-Target (CoT) este formatul de mesaj XML pe care îl vorbește fiecare participant al ecosistemului TAK. Fiecare eveniment CoT are un UID, un cod de tip (un șir ierarhic ca a-f-G-U-C-I pentru unitate terestră prietenoasă, luptă, infanterie), punct (lat/lon/hae), timp, timp de expirare și copii de detaliu arbitrari. Plugin-urile emit CoT pentru a raporta contacte senzoriale, misiuni, geofence-uri și tipuri de urmărire personalizate; consumă CoT pentru a reacționa la evenimentele produse de operator sau alte sisteme.

Cele două suprafețe API care contează: CotMapComponent expune CotEventDispatcher central pentru evenimentele de intrare, și CotMapComponent.getInternalDispatcher() plus CommsMapComponent.getInstance().sendCoT(event) pentru ieșire. Înregistrați un CotEventListener în onCreate, filtrați pe prefixul de tip și expediați în logica domeniului plugin-ului dvs. Pentru evenimentele de ieșire, construiți CotEvent programatic — nu concatenați șiruri XML. Operatorii au pierdut pictogramele de urmărire din cauza XML-ului malformat produs de șabloanele de șiruri.

Validarea schemei previne corupția datelor tactice. Validați fiecare eveniment CoT de intrare față de schema de detalii așteptată înainte de a-i accepta conținutul — codul de tip, limitele punctului (un lat de 9000 este o eroare de parser undeva în amonte pe care nu doriți să o propagați în suprafața dvs.) și monotonia timpului de expirare. CoT este permisiv prin design; parsarea defensivă este responsabilitatea autorului plugin-ului.

Plugin-uri de Strat de Hartă

Cel mai frecvent model de plugin ATAK este adăugarea unei suprafețe de hartă personalizate: telemetrie drone, acoperire semnalelor EW (război electronic), ventilatoare de artilerie prietenoasă, zone de interdicție a loviturilor, estimări de acoperire radio mesh. Stiva de hartă a ATAK este GLMapView (OpenGL ES) cu un model de ordonare a straturilor bazat pe z-ordine întreg plus grupuri de vizibilitate.

Adăugați straturi subclasând AbstractLayer pentru date vectoriale sau extinzând TileClientControl pentru suprafețe raster. MapItem este unitatea de conținut interactiv — markeri, forme, primitive de desenare — și are un ciclu de viață complet: onMapItemEvent se declanșează pentru clicuri, trageri, ștergeri și modificări de vizibilitate. Plugin-urile de lungă durată trebuie să elimine MapItem-urile lor în onDestroyImpl; elementele orfane persistă la reîncărcările plugin-ului și dezorientează operatorii.

Performanța contează mai mult decât se asteaptă oamenii. Mii de caracteristici simultan sunt normale — un flux ISR de zonă largă produce cu ușurință 5.000 până la 20.000 de urmăriri vizibile. Grupați agresiv, utilizați Marker.setVisible(false) mai degrabă decât eliminarea/recrearea și externalizați matematica grea (buffere geodezice, calculele viewshed) de pe firul UI. Atingeți o țintă de 60fps pe un Samsung S22 Tactical; dacă nu puteți, plugin-ul dvs. va fi dezinstalat.

Disciplina UI

Convențiile UI ale ATAK există dintr-un motiv: un operator care poartă mănuși, în lumină slabă, posibil sub foc, navighează prin memoria musculară. Drop-Down-urile (panoul glisant din dreapta) sunt modul canonic de a expune UI-ul plugin-ului. Extindeți DropDownReceiver, înregistrați acțiunea de intenție și lăsați ATAK să gestioneze ciclul de viață afișare/ascundere. Nu afișați propriile ferestre de dialog peste hartă — ele întrerup stiva de gesturi a hărții și dezorientează operatorii.

Plasarea meniului de navigare este guvernată de înregistrarea instrumentelor. Utilizați ToolbarBroadcastReceiver sau noul API de panou plugin pentru a plasa punctul de intrare în bara de instrumente din dreapta sau tava de depășire. Denumirea contează: verbe scurte („Urmărire", „Marcare", „Scanare"), nu substantive („Manager de Urmărire"). Pictogramele trebuie să fie lizibile la 24dp pe un ecran de 5 inchi în lumina directă a soarelui — asta înseamnă contrast ridicat, o singură formă prim-plan, fără gradient.

Modul întunecat este singurul mod. Tema implicită a ATAK este construită pentru funcționarea în lumină slabă și compatibilitatea cu viziunea nocturnă. Nu introduceți niciodată un fundal alb într-un Drop-Down — inundă optica NV a operatorului și le anunță poziția. Utilizați constantele de temă ATAK (atakmap.android.R.style.ATAK_TextAppearance și altele) astfel încât widget-urile dvs. să preia profilul preferat al operatorului, inclusiv modul compatibil NVG cu lumină roșie.

Semnarea și Distribuția Plugin-ului

ATAK impune semnarea plugin-ului ca poartă la timp de încărcare. Fiecare APK plugin trebuie semnat cu o cheie pe care instalarea ATAK în execuție o are încredere. ATAK-CIV livrează cu un magazin de încredere permisiv care acceptă cheia debug de dezvoltare plus un set mic de chei comunitare; ATAK-MIL acceptă numai chei emise de autoritatea militară de control. Planificați semnarea devreme — re-semnarea unui plugin deja în mâinile operatorilor necesită redistribuire.

Lanțul de semnare este standard Android: keytool pentru a genera keystore-ul, jarsigner sau Gradle signingConfigs pentru a semna APK-ul, apksigner v2/v3 pentru a verifica. ATAK validează semnătura la timp de încărcare și afișează „Semnătură plugin invalidă" în managerul de plugin-uri când eșuează — o eroare generică care, în practică, înseamnă aproape întotdeauna incompatibilitate de cheie sau incompatibilitate a versiunii APK Signature Scheme.

Căile de distribuție variază în funcție de ediție. Plugin-urile ATAK-CIV se distribuie prin Play Store, tak.gov sau sideload prin preluarea URL din managerul de plugin-uri. Plugin-urile ATAK-MIL se distribuie prin magazine de aplicații militare (depozite NIPRNet/SIPRNet, canale MDM specifice unității) cu cicluri de verificare care pot dura săptămâni. Fixarea versiunilor este contractuală: o implementare MDM blochează de obicei atât versiunile ATAK, cât și pe cele ale plugin-ului, iar o actualizare de plugin out-of-band nu este o opțiune odată ce o rotație s-a implementat.

Realitățile de Producție

Bateria este prima constrângere de producție. Un plugin care trezește GPS-ul în fiecare secundă sau deține un partial wake-lock va descărca bateria unui EUD înainte ca o patrulă de patru ore să se finalizeze. Profilați cu Battery Historian al Android, preferați serviciile de localizare existente ale ATAK (care deduplică deja fix-urile între plugin-uri) și nu programați niciodată lucrări de fundal care nu sunt condiționate de intenția operatorului.

Funcționarea la rețea redusă este a doua. ATAK este proiectat să funcționeze deconectat și intermitent conectat; orice plugin care presupune accesibilitate IP eșuează în momentul în care operatorul iese de pe FOB. Puneți în coadă lucrările de ieșire pe disc, goliți la reconectare și degradați elegant — modelele sunt aceleași cu cele pentru aplicații militare offline-first și stiva de hartă offline MBTiles/PMTiles pe care o utilizează ATAK însuși.

Telemetria este a treia, și cea mai constrânsă. OPSEC cere ca plugin-urile să nu „telefoneze acasă" — nu la punctul dvs. final de analiză, nu la un reporter de accidente, nu la un server de licențe. Integrați telemetria în fișierul jurnal local pe care ATAK îl menține deja, expuneți-o prin exportul pachetului de debug ATAK și lăsați unitatea să decidă dacă o distribuie. Instinctul de a livra Firebase Crashlytics într-un plugin tactic va termina autorizarea de implementare a plugin-ului.

Ciclurile de suport se aliniază la cadența de lansare a ATAK, nu la foaia dvs. de parcurs. ATAK-CIV lansează aproximativ trimestrial; ATAK-MIL lansează pe linii de timp militare care pot extinde o singură versiune timp de 18 luni. Mențineți o fereastră de suport de rulare — versiunea curentă plus cele două versiuni minore anterioare este un contract sustenabil — și tratați notele de lansare ATAK ca intrare obligatorie în planul de regresie. O capabilitate care se integrează cu sisteme C2 mai largi sau alimentează linkuri de date tactice NATO printr-un plugin este fiabilă numai pe măsura disciplinei dvs. față de trenul de lansare ATAK.