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 positioning, 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 градусов). Веб-приложения обрабатывают bezel через 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 использует пульт ДУ (Remote Control) с 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 property.

Galaxy Store и публикация приложений

Samsung Galaxy Store — официальный магазин приложений для Tizen (часы, TV, IoT). Регистрация разработчика — $0 (бесплатно) через программу 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 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

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