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 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 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.3 | 2014 | Смартфони | Перший комерційний реліз на Samsung Z |
| 3.0 | 2017 | Смартфони, годинники | Vulkan, 64-bit, Galaxy Watch |
| 4.0 | 2018 | Годинники, TV, IoT | AI-фреймворки, Tizen TV 2019 |
| 5.5 | 2020 | TV, IoT | AVPlay 2.0, WebAssembly, покращений WebGL |
| 6.0 | 2022 | TV, IoT | ML-інференс, Matter Protocol |
Архітектура Tizen побудована за модульним принципом з багаторівневою структурою. Нижній рівень — ядро Linux з патчами для енергоефективності та real-time завдань (RT_PREEMPT для TV та аудіо). Над ядром — Hardware Abstraction Layer (HAL), що надає уніфікований доступ до драйверів камери, сенсорів, Bluetooth, Wi-Fi, NFC, дисплея (через DirectFB або Wayland).
Шар 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 надає системні служби: Application Manager (запуск, зупинка, багатозадачність), Package Manager (встановлення/видалення додатків, формат .tpk та .wgt), Location Manager (GPS, Wi-Fi позиціонування, Geofence), Sensor Manager (акселерометр, гіроскоп, барометр, пульсометр), Context Manager (розпізнавання активності користувача: ходьба, біг, сон).
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 компілюються у виконавчий файл формату .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-графіки.
// Нативний додаток 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.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-додатки, упаковані у формат .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) обмежує джерела скриптів.
// 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, що обмежує завантаження контенту лише з пакета додатка.
// Веб-додаток 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 має унікальні особливості UI: круглий екран (360×360 пікселів у Galaxy Watch), фізичний безель (rotary bezel) для навігації та три апаратні кнопки: Home, Back, Custom. Розробник має адаптувати інтерфейс під круглу область — кутові елементи можуть обрізатися. Circle UI — бібліотека Samsung із готовими компонентами для круглих екранів.
Rotary Bezel — фізичне кільце навколо екрана Galaxy Watch, що обертається для навігації по списках, регулювання гучності та зуму. У Tizen подія обертання обробляється через rotarydetector або edje-сигнал EFL. Кожний поділ безеля генерує подію з кутом повороту (0-360 градусів). Веб-додатки обробляють безель через rotarydetector API: tizen.rotarydetector.
// Обробка 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() відписується та зупиняє детектор для запобігання витокам пам'яті.
Інтерфейс Tizen Watch використовує компоненти: RotarySelector (круговий список, керований безелем), CircularList (список із круговим скролом), RadialMenu (радіальне меню з іконками по колу), EdgePanel (панель, що виїжджає з краю екрана), CircleProgressBar (круглий індикатор прогресу). Всі компоненти оптимізовані під роздільну здатність 360×360 та враховують відсутність кутів екрана. Розмір touch-цілей — мінімум 48 пікселів.
Tizen TV — платформа для Samsung Smart TV із власним SDK та емулятором. Додатки для TV поділяються на два типи: веб-додатки (HTML5/JS) та нативні додатки (C/C++). Веб-додатки для TV розробляються швидше та простіше, але нативні забезпечують кращу продуктивність для відео та ігор. Tizen TV використовує пульт ДУ з D-pad для навігації.
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.
// Відеоплеєр для 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 властивість.
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 UI | Circle UI (JS) |
| Доступ до API | Повний системний | Device API |
| Продуктивність | Максимальна | Нижча (Web Runtime) |
| Розмір пакета | До 100 МБ | До 10 МБ |
| Стартовий шаблон | Tizen Native App | Tizen Web App |
Часті запитання
Нативні додатки пишуться на C/C++ з використанням EFL або DALi для UI. Веб-додатки використовують HTML5, CSS та JavaScript з Tizen Device API. Для Tizen TV доступна розробка на .NET (C#) через Tizen .NET. Samsung рекомендує C++ для продуктивних додатків та JavaScript для простих інтерфейсів.
Tizen використовує власний фреймворк на C/C++ з оптимізацією під апаратне забезпечення Samsung. Wear OS базується на Android з Kotlin/Java. Tizen споживає на 30% менше енергії на тому ж залізі, але має менше додатків у магазині. З 2021 року Samsung перейшла на Wear OS у нових годинниках, але Tizen продовжує підтримуватися.
Веб-додаток для Tizen TV створюється на HTML5/JavaScript з Tizen Device API. Розробка ведеться в Tizen Studio з TV-емулятором. Додаток упаковується в .wgt-пакет. Ключові API: AVPlay (відео), TVInfoDevice (характеристики TV), TVInputDevice (керування пультом), WebAudio (звук). Навігація через D-pad пульта.
Rotary Bezel — фізичне обертове кільце навколо екрана Galaxy Watch для навігації. Події обробляються через tizen.rotarydetector API. Кожний поділ генерує подію з кутом повороту та напрямком (cw/ccw). Rotary Bezel використовується для скролу списків, регулювання гучності, зуму та навігації по меню.
Публікація через Samsung Galaxy Store. Реєстрація розробника безкоштовна. Додаток (формат .tpk або .wgt) підписується сертифікатом Samsung. Модерація 2-5 днів. Комісія — 30% на перші $10 000 доходу, далі 25%. Мінімальна ціна — $0.99. Виплати щомісяця від $100.
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.