Tizen: суть розробки для Samsung Watch і Smart TV

Автор: IT Sectr Опубліковано: 2026-02-07 Час читання: 13 хв

Tizen — відкрита операційна система на базі Linux, що розвивається Samsung і Linux Foundation. Використовується в смарт-годинниках Galaxy Watch, телевізорах Samsung Smart TV, побутовій техніці та IoT-пристроях. Розробка ведеться на C/C++ для нативних додатків і на HTML5/JavaScript для веб-додатків. Tizen SDK надає емулятор та IDE на базі Visual Studio Code. За даними Tizen Association, екосистема налічує понад 200 млн пристроїв.

Головне

  • Tizen — відкрита ОС Samsung на ядрі Linux для годинників, TV, побутової техніки та IoT
  • C/C++ — основна мова для нативних продуктивних додатків з повним доступом до апаратури
  • HTML5/JS — стек для веб-додатків із Tizen Device API та можливістю швидкого прототипування
  • Tizen Studio — SDK з емулятором годинників і TV, профілювальником та налагоджувачем на базі VS Code
  • Galaxy Store — магазин додатків Samsung із модерацією, підписами та комісією 30/25%

Що таке Tizen?

Tizen — операційна система з відкритим кодом, яку курують Samsung і Linux Foundation. Перший комерційний реліз Tizen 1.0 відбувся у 2012 році. Система базується на ядрі Linux та використовує власну архітектуру фреймворків для різних типів пристроїв: Tizen Mobile (смартфони — проект закрито у 2017), Tizen Watch (годинники), Tizen TV (телевізори) та Tizen IoT (розумний дім).

З 2021 року Samsung використовує Tizen переважно в носимих пристроях та телевізорах. Усі смарт-годинники Galaxy Watch до 2021 року працювали на Tizen (Galaxy Watch, Watch Active, Watch 3). Починаючи з Galaxy Watch 4, Samsung перейшла на Wear OS з One UI Watch, але Tizen продовжує підтримуватися для існуючих пристроїв та TV. За даними Samsung (Tizen Ecosystem Report, 2025), на Tizen TV встановлено понад 180 млн телевізорів по всьому світу.

Ключова особливість Tizen — підтримка двох парадигм розробки: нативні додатки (C/C++) з максимальною продуктивністю та веб-додатки (HTML5, CSS, JavaScript) для швидкої розробки. Обидва типи мають доступ до Tizen Device API — обгорток для роботи з Bluetooth, NFC, Wi-Fi, сенсорами, камерою та мультимедіа.

Історія версій Tizen

Tizen 2.3 (2014) — перша стабільна версія для смартфонів Samsung Z. Tizen 3.0 (2017) — покращена багатозадачність, підтримка Vulkan, 64-бітна архітектура. Tizen 4.0 (2018) — перероблені фреймворки, підтримка AI-прискорення на NPU. Tizen 5.5 (2020) — Tizen TV з AVPlay 2.0, WebAssembly, покращений рендеринг. Tizen 6.0 (2022) — підтримка ML-інференсу на пристрої, Matter Protocol для IoT.

Версія TizenРікПристроїКлючове нововведення
2.32014СмартфониПерший комерційний реліз на Samsung Z
3.02017Смартфони, годинникиVulkan, 64-bit, Galaxy Watch
4.02018Годинники, TV, IoTAI-фреймворки, Tizen TV 2019
5.52020TV, IoTAVPlay 2.0, WebAssembly, покращений WebGL
6.02022TV, IoTML-інференс, Matter Protocol

Архітектура Tizen: ядро Linux і фреймворки

Архітектура Tizen побудована за модульним принципом з багаторівневою структурою. Нижній рівень — ядро Linux з патчами для енергоефективності та real-time завдань (RT_PREEMPT для TV та аудіо). Над ядром — Hardware Abstraction Layer (HAL), що надає уніфікований доступ до драйверів камери, сенсорів, Bluetooth, Wi-Fi, NFC, дисплея (через DirectFB або Wayland).

Core Framework Layer

Шар Core Framework включає Application Framework (керування життєвим циклом додатків), UI Framework (EFL — Enlightenment Foundation Libraries для UI, DALi — 3D-двигун для ігор та анімацій), Multimedia Framework (камера, аудіо, відео через GStreamer та MediaCodec), Network Framework (Bluetooth, Wi-Fi, NFC, HTTP, WebSocket) та Security Framework (SELinux, Smack, Tizen Privilege System).

Service Layer

Service Layer надає системні служби: Application Manager (запуск, зупинка, багатозадачність), Package Manager (встановлення/видалення додатків, формат .tpk та .wgt), Location Manager (GPS, Wi-Fi позиціонування, Geofence), Sensor Manager (акселерометр, гіроскоп, барометр, пульсометр), Context Manager (розпізнавання активності користувача: ходьба, біг, сон).

Device API для веб-додатків

Tizen надає Device API — JavaScript-інтерфейси для веб-додатків, що дають доступ до тих же функцій, що й нативні API. API розділені за модулями: Application API, Bluetooth API, Calendar API, Call History API, Contact API, Content API, Data Control API, Download API, Gallery API, Media Controller API, Message API, NFC API, Notification API, Power API, Push API, System Info API, Time API, Web Setting API.

Нативні додатки Tizen на C/C++

Нативні додатки Tizen компілюються у виконавчий файл формату .tpk (Tizen Package Kit). Основна мова — C++11/14 з компілятором GCC або Clang. Розробка ведеться в Tizen Studio або Visual Studio Code з розширенням Tizen. Нативні додатки мають прямий доступ до EFL, DALi, GStreamer та всіх системних API без посередників, що забезпечує максимальну продуктивність.

Структура нативного додатка

Нативний додаток включає файл tizen-manifest.xml (аналог AndroidManifest.xml), одну або декілька shared library (.so), ресурси (зображення, шрифти, локалізації). Життєвий цикл керується через app_event_cb: APP_EVENT_CREATE, APP_EVENT_RESUME, APP_EVENT_PAUSE, APP_EVENT_DESTROY. UI будується через EFL (Edje + Elementary) для віконних додатків або DALi для 3D-графіки.

cpp
// Нативний додаток Tizen на C++ з EFL UI
#include <app.h>
#include <efl_extension.h>
#include <dlog.h>

typedef struct appdata {
    Evas_Object *win;
    Evas_Object *conform;
    Evas_Object *label;
} appdata_s;

static void
win_delete_cb(void *data, Evas_Object *obj, void *event_info) {
    ui_app_exit();
}

static void
create_base_gui(appdata_s *ad) {
    // Створення вікна Tizen
    ad->win = efl_add(EFL_UI_WIN_CLASS, nullptr,
                      efl_ui_win_typename_set(efl_add(EFL_UI_WIN_CLASS, nullptr), "tizen-hello"));

    // Заголовок вікна
    efl_text_set(ad->win, "Hello Tizen");
    efl_event_callback_add(ad->win, EFL_UI_WIN_EVENT_DELETE_REQUEST, win_delete_cb, ad);

    // Conformant — стандартний контейнер Tizen для носимих пристроїв
    ad->conform = efl_add(EFL_UI_CONFORMANT_CLASS, ad->win);
    efl_content_set(ad->win, ad->conform);
    efl_gfx_size_hint_weight_set(ad->conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);

    // Текстова мітка
    ad->label = efl_add(EFL_UI_LABEL_CLASS, ad->conform);
    efl_text_set(ad->label, "Ласкаво просимо до Tizen!");
    efl_content_set(ad->conform, ad->label);

    // Відображення вікна
    efl_gfx_size_hint_weight_set(ad->label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
    efl_gfx_size_hint_align_set(ad->label, EVAS_HINT_FILL, EVAS_HINT_FILL);
}

static void
app_get_resource_cb(void *data) {
    // Обробник отримання ресурсів додатка
    appdata_s *ad = (appdata_s *)data;
    create_base_gui(ad);
}

static bool
app_create_cb(void *data) {
    // Викликається при створенні додатка
    appdata_s *ad = (appdata_s *)data;
    create_base_gui(ad);
    return true;
}

int
main(int argc, char *argv[]) {
    appdata_s ad = {0,};
    ui_app_lifecycle_callback_s event_callback = {0,};

    event_callback.create = app_create_cb;
    return ui_app_main(argc, argv, &event_callback, &ad);
}

Нативний додаток Tizen Hello World використовує EFL (Enlightenment Foundation Libraries) для UI. ui_app_main — точка входу Tizen, яка приймає колбеки життєвого циклу. efl_add створює UI-об'єкти через ієрархію Win → Conformant → Label. EFL UI заснований на композитній моделі Edje — теми описуються в .edc-файлах і компілюються в .edj.

Tizen Manifest (tizen-manifest.xml)

Файл tizen-manifest.xml — конфігурація нативного додатка. Вказує id (унікальний ідентифікатор у форматі зворотного домену), package (ім'я пакета), version, label (відображувана назва), author, description. Привілеї (privileges) оголошують доступ до API: http://tizen.org/privilege/bluetooth, http://tizen.org/privilege/location, http://tizen.org/privilege/camera. Без вказання привілею виклик відповідного API завершиться помилкою SECURITY_ERR.

Веб-додатки Tizen на HTML5 і JavaScript

Веб-додатки Tizen — це HTML5-додатки, упаковані у формат .wgt (W3C Widget). Розробка ідентична створенню звичайного веб-сайту, але з додатковим доступом до Tizen Device API через глобальний об'єкт tizen. Веб-додатки запускаються у власному процесі Web Runtime (WRT), заснованому на рушії WebKit (Tizen 2.x-4.x) або Chromium (Tizen 5.5+).

Структура веб-додатка

Веб-додаток містить index.html (точка входу), config.xml (W3C Widget Configuration), CSS, JavaScript, зображення. Файл config.xml аналогічний manifest.webapp у KaiOS: обов'язкові поля widget (id, version, height/width для годинника), name, description, author. Дозволи для Device API вказуються через елемент tizen:privilege. Секція CSP (Content Security Policy) обмежує джерела скриптів.

javascript
// config.xml для веб-додатка Tizen Watch
<?xml version="1.0" encoding="UTF-8"?>
<widget xmlns="http://www.w3.org/ns/widgets"
        xmlns:tizen="http://tizen.org/ns/widgets"
        id="com.example.heartrate"
        version="1.0.0"
        height="360" width="360">
    <tizen:application id="com.example.heartrate"
                       package="com.example.heartrate"
                       required_version="4.0"/>
    <name>Пульсометр</name>
    <description>Измерение пульса на Galaxy Watch</description>
    <author>Developer</author>
    <tizen:privilege name="http://tizen.org/privilege/healthinfo"/>
    <tizen:privilege name="http://tizen.org/privilege/sensor"/>
    <tizen:profile name="wearable"/>
    <tizen:content-security-policy>
        default-src 'self'; script-src 'self'; style-src 'self'
    </tizen:content-security-policy>
</widget>

Мінімальний фрагмент config.xml демонструє ключові елементи: widget з id та версією, tizen:application з профілем wearable для круглих екранів годинників, tizen:privilege для healthinfo та sensor API, і Content Security Policy, що обмежує завантаження контенту лише з пакета додатка.

javascript
// Веб-додаток Tizen Watch: моніторинг пульсу
const HeartRateMonitor = {
    hrSensor: null,
    isMonitoring: false,

    async init() {
        try {
            // Перевірка підтримки HRM-сенсора
            const sensors = tizen.sensorservice.getAvailableSensors();
            if (!sensors.includes('HRM')) {
                throw new Error('HRM-сенсор не найден');
            }

            // Отримання доступу до датчика пульсу
            this.hrSensor = tizen.sensorservice.getDefaultSensor('HRM');
            console.log('HRM-сенсор инициализирован');
        } catch (err) {
            console.error('Ошибка инициализации:', err.message);
        }
    },

    startMonitoring() {
        if (!this.hrSensor) return;

        this.isMonitoring = true;
        this.hrSensor.startSensor({
            interval: 1000,  // вимірювання щосекунди
            callback: {
                onsuccess: (data) => {
                    const heartRate = data.heartRate;
                    document.getElementById('hr-value').textContent = heartRate;
                    this.updateDisplay(heartRate);
                },
                onerror: (err) => {
                    console.error('Ошибка сенсора:', err.message);
                }
            }
        });
    },

    stopMonitoring() {
        if (this.hrSensor && this.isMonitoring) {
            this.hrSensor.stopSensor();
            this.isMonitoring = false;
        }
    },

    updateDisplay(heartRate) {
        // Візуалізація пульсу на круглому екрані 360x360
        const canvas = document.getElementById('hr-canvas');
        const ctx = canvas.getContext('2d');
        ctx.clearRect(0, 0, 360, 360);

        // Круглий індикатор пульсу
        ctx.beginPath();
        ctx.arc(180, 180, 120, 0, 2 * Math.PI);
        ctx.strokeStyle = '#ff4444';
        ctx.lineWidth = 8;
        ctx.stroke();
    }
};

document.addEventListener('DOMContentLoaded', () => {
    HeartRateMonitor.init().then(() => {
        HeartRateMonitor.startMonitoring();
    });
});

Додаток HeartRateMonitor використовує Tizen Sensor API для доступу до HRM-датчика Galaxy Watch. tizen.sensorservice.getDefaultSensor('HRM') отримує сенсор пульсу, startSensor запускає вимірювання з інтервалом 1 секунда. Canvas 360×360 малює круглий індикатор — типова UI-парадигма для круглих екранів годинників Tizen.

Розробка для Tizen Watch: Circle UI і Rotary

Tizen Watch має унікальні особливості UI: круглий екран (360×360 пікселів у Galaxy Watch), фізичний безель (rotary bezel) для навігації та три апаратні кнопки: Home, Back, Custom. Розробник має адаптувати інтерфейс під круглу область — кутові елементи можуть обрізатися. Circle UI — бібліотека Samsung із готовими компонентами для круглих екранів.

Rotary Bezel

Rotary Bezel — фізичне кільце навколо екрана Galaxy Watch, що обертається для навігації по списках, регулювання гучності та зуму. У Tizen подія обертання обробляється через rotarydetector або edje-сигнал EFL. Кожний поділ безеля генерує подію з кутом повороту (0-360 градусів). Веб-додатки обробляють безель через rotarydetector API: tizen.rotarydetector.

javascript
// Обробка Rotary Bezel у Tizen Watch
class RotaryNavigation {
    constructor() {
        this.currentAngle = 0;
        this.sections = document.querySelectorAll('.rotary-section');
        this.currentSection = 0;
        this.init();
    }

    init() {
        // Підписка на події обертання безеля
        const detector = tizen.rotarydetector;

        detector.addEventListener('rotarydetector', (event) => {
            // event.angle — поточний кут (0-360)
            // event.direction — 'cw' (за годинниковою) або 'ccw' (проти годинникової)
            this.handleRotation(event);
        });

        // Активація rotarydetector
        detector.start();
    }

    handleRotation(event) {
        const delta = event.delta;  // зміна кута
        this.currentAngle += delta;

        // Визначення напрямку та переміщення
        if (delta > 0) {
            // Обертання за годинниковою — наступний елемент
            this.currentSection = Math.min(this.currentSection + 1, this.sections.length - 1);
        } else {
            // Обертання проти годинникової — попередній елемент
            this.currentSection = Math.max(this.currentSection - 1, 0);
        }

        this.updateUI();
    }

    updateUI() {
        this.sections.forEach((el, i) => {
            el.classList.toggle('active', i === this.currentSection);
            el.scrollIntoView({ block: 'nearest', behavior: 'smooth' });
        });
    }

    destroy() {
        tizen.rotarydetector.removeEventListener('rotarydetector');
        tizen.rotarydetector.stop();
    }
}

// Ініціалізація при завантаженні додатка
document.addEventListener('tizen-rotary-ready', () => {
    const nav = new RotaryNavigation();
});

Клас RotaryNavigation підписується на події rotarydetector через tizen.rotarydetector.addEventListener. При обертанні безеля обчислюється напрямок (cw/ccw) та delta кута. Поточна секція підсвічується класом active. rotarydetector.start() обов'язковий — без нього події не генеруються. destroy() відписується та зупиняє детектор для запобігання витокам пам'яті.

Особливості UI для годинників

Інтерфейс Tizen Watch використовує компоненти: RotarySelector (круговий список, керований безелем), CircularList (список із круговим скролом), RadialMenu (радіальне меню з іконками по колу), EdgePanel (панель, що виїжджає з краю екрана), CircleProgressBar (круглий індикатор прогресу). Всі компоненти оптимізовані під роздільну здатність 360×360 та враховують відсутність кутів екрана. Розмір touch-цілей — мінімум 48 пікселів.

Розробка для Tizen TV: додатки для Smart TV

Tizen TV — платформа для Samsung Smart TV із власним SDK та емулятором. Додатки для TV поділяються на два типи: веб-додатки (HTML5/JS) та нативні додатки (C/C++). Веб-додатки для TV розробляються швидше та простіше, але нативні забезпечують кращу продуктивність для відео та ігор. Tizen TV використовує пульт ДУ з D-pad для навігації.

AVPlay API для відео

AVPlay API — ключовий API Tizen TV для відтворення відео. Підтримує формати H.264, H.265 (HEVC), VP9, AV1. Роздільна здатність до 8K на TV 2024+. AVPlay API забезпечує апаратне декодування, HDR10+, Dolby Atmos, субтитри, множинні аудіодоріжки. Керування через play(), pause(), stop(), seekTo(position), setDisplayRect(). Потік може бути локальним файлом або HLS/DASH URL.

javascript
// Відеоплеєр для Tizen TV з AVPlay API
class TizenVideoPlayer {
    constructor(videoElementId) {
        this.videoElement = document.getElementById(videoElementId);
        this.avplay = null;
        this.isReady = false;
    }

    async init(url) {
        try {
            // Перевірка доступності AVPlay
            if (typeof webapis === 'undefined' ||
                !webapis.avplay) {
                throw new Error('AVPlay API недоступен');
            }

            this.avplay = webapis.avplay;
            this.avplay.open(url);

            // Налаштування відображення на весь екран TV
            this.avplay.setDisplayRect(0, 0, 3840, 2160);
            this.avplay.setDisplayMethod(webapis.avplay.AVPLAY_DISPLAY_METHOD_PLAYER);

            // Налаштування аудіо (Dolby Atmos, якщо підтримується)
            this.avplay.setStreamingProperty('ADAPTIVE_INFO', JSON.stringify({
                width: 3840,
                height: 2160,
                bitrate: 25000000
            }));

            this.avplay.prepareAsync(
                () => {
                    this.isReady = true;
                    console.log('Видео готово к воспроизведению');
                },
                (error) => {
                    console.error('Ошибка подготовки:', error);
                }
            );
        } catch (err) {
            console.error('Ошибка инициализации:', err);
        }
    }

    play() {
        if (this.isReady) this.avplay.play();
    }

    pause() {
        this.avplay.pause();
    }

    seekTo(positionMs) {
        this.avplay.seekTo(positionMs);
    }

    setSubtitle(url, encoding) {
        this.avplay.setStreamingProperty('SUBTITLE', JSON.stringify({
            url: url,
            encoding: encoding || 'UTF-8'
        }));
    }
}

// Використання
const player = new TizenVideoPlayer('video-area');
player.init('https://example.com/stream.m3u8');
player.setSubtitle('https://example.com/subs.vtt', 'UTF-8');

Клас TizenVideoPlayer демонструє роботу з AVPlay API. webapis.avplay.open() відкриває медіа-потік (локальний або HLS/DASH). setDisplayRect задає область рендерингу — на TV зазвичай fullscreen 3840×2160. prepareAsync — асинхронна підготовка з колбеками. AVPlay підтримує адаптивний бітрейт через ADAPTIVE_INFO та субтитри через SUBTITLE властивість.

Galaxy Store та публікація додатків

Samsung Galaxy Store — офіційний магазин додатків для Tizen (годинники, TV, IoT). Реєстрація розробника — безкоштовна через програму Samsung Developers. Розробник завантажує додаток у форматі .tpk (нативний) або .wgt (веб), підписаний сертифікатом Samsung. Модерація займає 2-5 робочих днів. Galaxy Store доступний у 190 країнах.

Підпис додатка

Tizen вимагає цифровий підпис додатка сертифікатом Samsung. Процес: генерація Author Certificate через Samsung Certificate Manager, створення Distributor Certificate для магазину, підпис пакета через Tizen Studio (Build Signed Package). Сертифікат прив'язується до облікового запису розробника. Без підпису додаток встановлюється лише на dev-пристрої з увімкненим Developer Mode.

Модель монетизації

Galaxy Store підтримує платні додатки (комісія 30% на перші $10 000, далі 25%), підписки (25%), рекламу через Samsung Ads та in-app purchases через Samsung IAP. Для TV-додатків доступна модель Smart TV Premium Channels. Мінімальна ціна — $0.99. Виплати проводяться щомісяця при досягненні порогу $100.

ВимогаНативний (.tpk)Веб (.wgt)
МоваC/C++HTML5, CSS, JS
UI фреймворкEFL, DALi, Tizen Circle UICircle UI (JS)
Доступ до APIПовний системнийDevice API
ПродуктивністьМаксимальнаНижча (Web Runtime)
Розмір пакетаДо 100 МБДо 10 МБ
Стартовий шаблонTizen Native AppTizen Web App

Часті запитання

Які мови використовуються для розробки під Tizen?

Нативні додатки пишуться на C/C++ з використанням EFL або DALi для UI. Веб-додатки використовують HTML5, CSS та JavaScript з Tizen Device API. Для Tizen TV доступна розробка на .NET (C#) через Tizen .NET. Samsung рекомендує C++ для продуктивних додатків та JavaScript для простих інтерфейсів.

Чим Tizen відрізняється від Wear OS?

Tizen використовує власний фреймворк на C/C++ з оптимізацією під апаратне забезпечення Samsung. Wear OS базується на Android з Kotlin/Java. Tizen споживає на 30% менше енергії на тому ж залізі, але має менше додатків у магазині. З 2021 року Samsung перейшла на Wear OS у нових годинниках, але Tizen продовжує підтримуватися.

Як створити веб-додаток для Tizen TV?

Веб-додаток для Tizen TV створюється на HTML5/JavaScript з Tizen Device API. Розробка ведеться в Tizen Studio з TV-емулятором. Додаток упаковується в .wgt-пакет. Ключові API: AVPlay (відео), TVInfoDevice (характеристики TV), TVInputDevice (керування пультом), WebAudio (звук). Навігація через D-pad пульта.

Що таке Rotary Bezel у Tizen?

Rotary Bezel — фізичне обертове кільце навколо екрана Galaxy Watch для навігації. Події обробляються через tizen.rotarydetector API. Кожний поділ генерує подію з кутом повороту та напрямком (cw/ccw). Rotary Bezel використовується для скролу списків, регулювання гучності, зуму та навігації по меню.

Як публікувати додатки Tizen?

Публікація через Samsung Galaxy Store. Реєстрація розробника безкоштовна. Додаток (формат .tpk або .wgt) підписується сертифікатом Samsung. Модерація 2-5 днів. Комісія — 30% на перші $10 000 доходу, далі 25%. Мінімальна ціна — $0.99. Виплати щомісяця від $100.

Підсумки

  • Tizen — відкрита ОС Samsung на ядрі Linux для годинників, TV, IoT, побутової техніки з підтримкою нативних та веб-додатків
  • Нативні додатки (C/C++, EFL/DALi, формат .tpk) забезпечують максимальну продуктивність та повний доступ до апаратури
  • Веб-додатки (HTML5/JS, формат .wgt, Web Runtime на Chromium) — швидка розробка з Device API
  • Tizen Watch використовує круглий екран 360×360, Rotary Bezel, Circle UI та компоненти RotarySelector/CircularList
  • Tizen TV використовує AVPlay API для апаратного декодування H.264/H.265/VP9 до 8K, HDR10+, Dolby Atmos
  • Galaxy Store — безкоштовна реєстрація, формат .tpk/.wgt, підпис сертифікатом Samsung, модерація 2-5 днів
  • Tizen Studio — SDK на базі VS Code з емулятором годинників та TV, профілювальником та налагоджувачем

Ми розробимо мобільний застосунок під ключ

IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

Читайте також