ATAK (Android Team Awareness Kit) і його настільний аналог WinTAK — це де-факто тактичні застосунки ситуаційної обізнаності, що використовуються силами США та NATO, союзницькими арміями і дедалі частіше цивільними службами першого реагування. Вони відмальовують спільну оперативну картину (COP), обмінюються повідомленнями Cursor-on-Target (CoT) через TAK Server, керують картографічними оверлеями і мають відкритий SDK для плагінів. Для інженерів оборонного ПЗ розробка плагіна ATAK або WinTAK — зазвичай найшвидший шлях до польової спроможності, на порядки швидший за випуск окремого тактичного застосунку.

Ця стаття — інженерний посібник: від порожнього проєкту в Android Studio до підписаного, придатного до поширення плагіна, що витримує реальний день оператора. Передбачається, що ви запитали та отримали ATAK-CIV SDK з tak.gov і маєте інстанс TAK Server, до якого можна підключитися.

Чому плагіни ATAK/WinTAK

Стратегічна причина побудувати плагін, а не окремий застосунок — це важіль. ATAK уже розв'язує важкі проблеми: рендеринг карти з векторними та растровими джерелами, обробка GPS, інтеграція з радіо, обмін CoT-повідомленнями, multicast-виявлення, шифрований транспорт TAK Server, ідентифікація користувача й навігаційна модель, на якій оператори тренувалися роками. Плагін успадковує все це безоплатно.

Тактична причина — це прийняття. Оператор, який уже запускає ATAK на Samsung S22 Tactical Edition або Galaxy XCover у нагрудному кріпленні, встановить ще один плагін за секунди. Переконати того ж оператора встановити, вивчити та довіряти другому окремому тактичному застосунку — значно складніший шлях. Плагіни їдуть на наявній поверхні довіри. Для нових сенсорів, специфічних для місії робочих процесів, інтеграції безпілотників або трансляторів повідомлень NATO плагін майже завжди є правильним форматом доставки.

ATAK — це платформа, а не лише застосунок. Ставлення до нього як до платформи — а до вашого коду як до учасника контрактів цієї платформи — це зміна мислення, необхідна, щоб випускати плагіни, які проходять рецензію оператора.

ATAK-CIV проти ATAK-MIL

Існують дві редакції ATAK, які цікавлять автора плагіна. ATAK-CIV — це цивільний реліз, що поширюється через Google Play Store і через tak.gov без обмежень. ATAK-MIL — це військовий варіант, підтримуваний U.S. Army DEVCOM C5ISR Center і поширюваний лише контрольованими каналами серед уповноважених підрозділів.

З погляду SDK обидві мають спільне API плагінів — той самий AbstractPlugin, той самий MapView, той самий CotEventDispatcher. Відмінності, що мають значення для інженера плагіна: ATAK-MIL включає адаптери для класифікованих даних, специфічну військову символіку (повністю заповнений MIL-STD-2525D), радіодрайвери для SRW, ANW2C, шлюзи Link 16 та контролі безпеки, що обмежують завантаження плагінів за ключем підпису. Плагін, скомпільований під ATAK-CIV, завантажиться під ATAK-MIL за умови збігу версії API і підпису плагіна затвердженим ключем — але припущення щодо UI та можливостей можуть зламатися, якщо ви залежите від віджетів, які існують лише в одній редакції.

Прототипуйте на ATAK-CIV. SDK відкритий, вимоги до пристрою нижчі, і можна ітерувати з публічним TAK Server. Коли можливість доведено, портуйте на ATAK-MIL: переподпишіть схваленим військовим ланцюгом підпису, валідуйте проти цільової версії API і повторно протестуйте на реальних пристроях кінцевого користувача (зазвичай Samsung-смартфонах EUD-класу або дисплеях Persistent Systems MPU5).

Кістяк проєкту

Плагін ATAK — це модуль Android-бібліотеки зі специфічним контрактом маніфесту. Починайте з Gradle-проєкту plugin-template, що постачається всередині ATAK-CIV SDK. Залежності, що мають значення: main.jar з SDK (ATAK API), Gradle-плагін gradle-atak-plugin і бібліотеки AndroidX, прикріплені до версій, з якими постачається сам ATAK — розбіжність версій тут є поширеною причиною NoSuchMethodError в рантаймі.

Файл AndroidManifest.xml має оголошувати метадані дескриптора плагіна: com.atakmap.app.component із вказівкою на ваш підклас AbstractPlugin, версію API, на яку націлений плагін, і потрібні дозволи. ATAK використовує маніфест для виявлення та завантаження плагінів; некоректний дескриптор — найпоширеніша причина того, що плагін не з'являється в менеджері плагінів ATAK.

Гачки життєвого циклу живуть в AbstractPlugin (також виставлені як IPlugin у новіших версіях SDK). onCreate(Context, MapView) — це місце, де ви реєструєте інструменти, спадні панелі, шари та слухачів. onDestroyImpl — це місце, де треба їх скасовувати; невиконання цього призводить до витоку слухачів між перезавантаженнями плагіна, що є реальним сценарієм під час оновлень оператора. onConfigurationChanged обробляє поворот пристрою та зміни теми. Ставтеся до методів життєвого циклу як до життєвого циклу Activity в Android: припускайте, що їх можуть викликати кілька разів у несподіваному порядку.

Сумісність версій API забезпечується під час завантаження. ATAK від 4.x до 5.x випускав ламкі зміни API; прикріплюйте PluginAPI у вашому маніфесті до мінімальної підтримуваної версії і тестуйте проти кожного мінорного релізу у вашому цільовому розгортанні. Матриця сумісності у вашому README — "цей плагін: ATAK-CIV 4.10 до 5.2, ATAK-MIL 5.0+" — це контракт, до якого вас триматимуть оператори.

Інтеграція CoT

Cursor-on-Target (CoT) — це формат XML-повідомлень, яким говорить кожен учасник екосистеми TAK. Кожна подія CoT має UID, код типу (ієрархічний рядок на кшталт a-f-G-U-C-I для дружнього наземного підрозділу, бойового, піхотного), точку (широта/довгота/висота), час, час застарівання та довільні дочірні деталі. Плагіни випромінюють CoT, щоб повідомляти про сенсорні контакти, місії, геозони та користувацькі типи треків; вони споживають CoT, щоб реагувати на події, що породжуються оператором або іншими системами.

Дві поверхні API мають значення: CotMapComponent виставляє центральний CotEventDispatcher для вхідних подій, а CotMapComponent.getInternalDispatcher() плюс CommsMapComponent.getInstance().sendCoT(event) — для вихідних. Зареєструйте CotEventListener в onCreate, фільтруйте за префіксом типу і диспетчеризуйте до доменної логіки вашого плагіна. Для вихідних подій будуйте CotEvent програмно — не конкатенуйте XML-рядки. Оператори втрачали іконки треків через малосформований XML, згенерований шаблонізацією рядків.

Валідація схеми запобігає псуванню тактичних даних. Валідуйте кожну вхідну подію CoT проти очікуваної схеми деталей, перш ніж довіряти її вмісту — код типу, межі точки (широта 9000 — це баг парсера десь вище за течією, який ви не хочете поширювати у свій оверлей), монотонність часу застарівання. CoT за задумом дозвільний; оборонне розбирання — відповідальність автора плагіна.

Плагіни шарів карти

Найпоширеніший патерн плагіна ATAK — додавання користувацького оверлею карти: телеметрія дронів, покриття сигналу РЕБ, дружні артилерійські сектори, заборонені для ударів зони, оцінки покриття mesh-радіо. Картографічний стек ATAK — це GLMapView (OpenGL ES) з моделлю упорядкування шарів на основі цілочисельного z-порядку плюс групи видимості.

Додавайте шари, успадковуючись від AbstractLayer для векторних даних або розширюючи TileClientControl для растрових оверлеїв. MapItem — одиниця інтерактивного контенту (маркери, фігури, примітиви рисування) — має повний життєвий цикл: onMapItemEvent спрацьовує для кліків, перетягувань, видалень та змін видимості. Довгоживучі плагіни мають видаляти свої MapItem в onDestroyImpl; осиротілі елементи зберігаються між перезавантаженнями плагіна та збивають операторів з пантелику.

Продуктивність важить більше, ніж очікують. Тисячі об'єктів одночасно — це норма: широкосмуговий ISR-фід легко продукує 5 000 — 20 000 видимих треків. Кластеруйте агресивно, використовуйте Marker.setVisible(false) замість видалення/перестворення і виносьте важку математику (геодезичні буфери, обчислення видимості) поза UI-потік. Досягайте 60 fps на Samsung S22 Tactical; якщо не можете — ваш плагін деінсталюють.

Дисципліна UI

UI-конвенції ATAK існують не просто так: оператор у рукавицях, у слабкому світлі, можливо, під вогнем, орієнтується м'язовою пам'яттю. Drop-Downs (бічна панель, що висувається праворуч) — канонічний спосіб виставити UI плагіна. Розширюйте DropDownReceiver, реєструйте action вашого intent і дайте ATAK керувати життєвим циклом показу/приховування. Не відкривайте власні діалогові вікна над картою — вони ламають стек жестів карти й дезорієнтують операторів.

Розташування у навігаційному меню керується реєстрацією інструментів. Використовуйте ToolbarBroadcastReceiver або новіше API plugin pane, щоб розмістити вашу точку входу в правому тулбарі або в переповненні. Назви важать: короткі дієслова ("Track", "Mark", "Scan"), а не іменники ("Tracking Manager"). Іконки мають читатися на 24dp на 5-дюймовому екрані під прямим сонячним світлом — це означає високий контраст, одна форма переднього плану, без градієнтів.

Темний режим — єдиний режим. Стандартна тема ATAK побудована для роботи у слабкому світлі та сумісності з нічним баченням. Ніколи не вводьте білий фон у Drop-Down — він засліплює NV-оптику оператора й видає його позицію. Використовуйте константи теми ATAK (atakmap.android.R.style.ATAK_TextAppearance і компанія), щоб ваші віджети підхоплювали бажаний профіль оператора, включно з червоним NVG-сумісним режимом.

Підпис плагіна та поширення

ATAK забезпечує підпис плагіна як перешкоду при завантаженні. Кожен APK плагіна має бути підписаний ключем, якому довіряє поточне встановлення ATAK. ATAK-CIV постачається з дозвільним сховищем довіри, що приймає налагоджувальний debug-ключ розробки плюс невеликий набір спільнотних ключів; ATAK-MIL приймає лише ключі, видані контролюючим військовим органом. Плануйте підпис заздалегідь — переподпис плагіна, що вже у руках операторів, потребує повторного поширення.

Ланцюг підпису — стандартний Android: keytool для генерації keystore, jarsigner або Gradle signingConfigs для підпису APK, apksigner v2/v3 для перевірки. ATAK валідує підпис при завантаженні й виставляє "Plugin signature invalid" у менеджері плагінів при невдачі — загальна помилка, що на практиці майже завжди означає невідповідність ключа або версії APK Signature Scheme.

Шляхи поширення різняться за редакцією. Плагіни ATAK-CIV поширюються через Play Store, tak.gov або sideload через URL-завантажувач менеджера плагінів. Плагіни ATAK-MIL поширюються через військові магазини застосунків (NIPRNet/SIPRNet-репозиторії, специфічні для підрозділу MDM-канали) з циклами перевірки, що можуть тривати тижнями. Прив'язка версій — контрактна: розгортання MDM зазвичай блокує і ATAK, і версії плагіна, і позасмугове оновлення плагіна не є опцією, коли ротація вже розгорнута.

Реалії продакшну

Батарея — перше виробниче обмеження. Плагін, що пробуджує GPS щосекунди або утримує partial wake-lock, висадить батарею EUD до завершення чотиригодинного патрулювання. Профілюйте за допомогою Android Battery Historian, надавайте перевагу наявним службам локації ATAK (які вже дедуплікують фікси між плагінами) і ніколи не плануйте фонову роботу, що не обмежена наміром оператора.

Робота при слабкій мережі — друге. ATAK розроблений для роботи відключеним і з переривчастим з'єднанням; будь-який плагін, що припускає IP-доступність, провалюється тієї миті, коли оператор виходить за межі FOB. Ставте вихідну роботу в чергу на диск, спустошуйте при відновленні з'єднання і деградуйте поступово — патерни ті ж, що й для offline-first військових застосунків і стека офлайн-карт MBTiles/PMTiles, який використовує сам ATAK.

Телеметрія — третє і найбільш обмежене. OPSEC вимагає, щоб плагіни не "телефонували додому" — ні на ваш аналітичний ендпоінт, ні на crash-репортер, ні на ліцензійний сервер. Запікайте телеметрію в локальний лог-файл, який ATAK уже веде, виставляйте її через експорт debug-bundle ATAK і дозволяйте підрозділу вирішувати, чи ділитися. Інстинкт впихнути Firebase Crashlytics у тактичний плагін покладе край дозволу на розгортання плагіна.

Цикли підтримки узгоджуються з ритмом релізів ATAK, а не з вашою дорожньою картою. ATAK-CIV випускається приблизно щоквартально; ATAK-MIL випускається на військових графіках, що можуть розтягнути одну версію на 18 місяців. Підтримуйте плаваюче вікно підтримки — поточна версія плюс дві попередні мінорні — це сталий контракт, і ставтеся до release notes ATAK як до обов'язкового вхідного для вашого регресійного плану. Спроможність, що інтегрується з ширшими системами C2 або живить тактичні канали даних NATO через плагін, надійна рівно настільки, наскільки ваша дисципліна довкола поїзда релізів ATAK.