Tizen 是一个基于 Linux 的开源操作系统,由三星和 Linux 基金会开发。用于 Galaxy Watch 智能手表、三星 Smart TV、家用电器和 IoT 设备。原生应用程序用 C/C++ 开发,Web 应用程序用 HTML5/JavaScript 开发。Tizen SDK 提供模拟器以及基于 Visual Studio Code 的 IDE。根据 Tizen 协会 的数据,该生态系统拥有超过 2 亿台设备。
要点
Tizen 是一个开源操作系统,由三星和 Linux 基金会监督。首个商业版本 Tizen 1.0 于 2012 年发布。该系统基于 Linux 内核,并为不同类型的设备使用自己的框架架构:Tizen Mobile(智能手机 — 项目于 2017 年关闭)、Tizen Watch(手表)、Tizen TV(电视)和 Tizen IoT(智能家居)。
自 2021 年以来,三星主要在可穿戴设备和电视中使用 Tizen。2021 年之前的所有 Galaxy Watch 智能手表都运行 Tizen(Galaxy Watch、Watch Active、Watch 3)。从 Galaxy Watch 4 开始,三星已转向带有 One UI Watch 的 Wear OS,但 Tizen 继续为现有设备和电视提供支持。根据三星的数据(Tizen 生态系统报告,2025),全球超过 1.8 亿台电视安装了 Tizen TV。
Tizen 的一个关键特性是支持两种开发范式:具有最高性能的原生应用程序(C/C++)和用于快速开发的 Web 应用程序(HTML5、CSS、JavaScript)。两种类型都可以访问 Tizen Device API — 用于处理蓝牙、NFC、Wi-Fi、传感器、摄像头和多媒体的封装器。
Tizen 2.3(2014)— 首款针对三星 Z 智能手机的稳定版本。Tizen 3.0(2017)— 改进的多任务处理、支持 Vulkan、64 位架构。Tizen 4.0(2018)— 重新设计的框架、NPU 上的 AI 加速支持。Tizen 5.5(2020)— 带有 AVPlay 2.0、WebAssembly、改进渲染的 Tizen TV。Tizen 6.0(2022)— 设备上 ML 推理支持、适用于 IoT 的 Matter 协议。
| Tizen 版本 | 年份 | 设备 | 关键创新 |
|---|---|---|---|
| 2.3 | 2014 | 智能手机 | 首款商业版本在三星 Z 上发布 |
| 3.0 | 2017 | 智能手机、手表 | Vulkan、64 位、Galaxy Watch |
| 4.0 | 2018 | 手表、电视、IoT | AI 框架、Tizen TV 2019 |
| 5.5 | 2020 | 电视、IoT | AVPlay 2.0、WebAssembly、改进的 WebGL |
| 6.0 | 2022 | 电视、IoT | ML 推理、Matter 协议 |
Tizen 架构 采用模块化原则构建,具有多层结构。最底层是 Linux 内核,带有针对能效和实时任务(电视和音频的 RT_PREEMPT)的补丁。内核之上是硬件抽象层(HAL),提供对相机、传感器、蓝牙、Wi-Fi、NFC 和显示驱动程序的统一访问(通过 DirectFB 或 Wayland)。
核心框架层包括 应用程序框架(应用程序生命周期管理)、UI 框架(EFL — 用于 UI 的 Enlightenment Foundation Libraries,DALi — 用于游戏和动画的 3D 引擎)、多媒体框架(通过 GStreamer 和 MediaCodec 提供相机、音频、视频)、网络框架(蓝牙、Wi-Fi、NFC、HTTP、WebSocket)和 安全框架(SELinux、Smack、Tizen 权限系统)。
服务层提供系统服务:应用程序管理器(启动、停止、多任务)、包管理器(安装/卸载应用程序、.tpk 和 .wgt 格式)、位置管理器(GPS、Wi-Fi 定位、地理围栏)、传感器管理器(加速度计、陀螺仪、气压计、心率监视器)、上下文管理器(用户活动识别:步行、跑步、睡眠)。
Tizen 提供 Device API — 用于 Web 应用程序的 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)的可执行文件。主要语言是带有 GCC 或 Clang 编译器的 C++11/14。开发在 Tizen Studio 或带有 Tizen 扩展的 Visual Studio Code 中进行。原生应用程序可以直接访问 EFL、DALi、GStreamer 和所有系统 API,无需中介,确保最高性能。
原生应用程序包含 tizen-manifest.xml 文件(类似于 AndroidManifest.xml)、一个或多个共享库(.so)和资源(图像、字体、本地化)。生命周期通过 app_event_cb 管理:APP_EVENT_CREATE、APP_EVENT_RESUME、APP_EVENT_PAUSE、APP_EVENT_DESTROY。UI 通过 EFL(Edje + Elementary)构建,用于窗口应用程序,或通过 DALi 用于 3D 图形。
// 使用 EFL UI 的 C++ Tizen 原生应用程序
#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 通过 Win → Conformant → Label 层次结构创建 UI 对象。EFL UI 基于 Edje 复合模型 — 主题描述用 .edc 文件编写并编译为 .edj。
tizen-manifest.xml 文件是原生应用程序的配置。它指定 id(反向域格式的唯一标识符)、package(包名)、version、label(显示名称)、author 和 description。权限声明 API 访问:http://tizen.org/privilege/bluetooth、http://tizen.org/privilege/location、http://tizen.org/privilege/camera。如果不指定权限,调用相应的 API 将导致 SECURITY_ERR 错误。
Tizen Web 应用程序 是打包为 .wgt 格式(W3C Widget)的 HTML5 应用程序。开发过程与创建普通网站相同,但通过全局 tizen 对象额外访问 Tizen Device API。Web 应用程序在自己的 Web Runtime(WRT)进程中运行,基于 WebKit 引擎(Tizen 2.x-4.x)或 Chromium(Tizen 5.5+)。
Web 应用程序包含 index.html(入口点)、config.xml(W3C Widget 配置)、CSS、JavaScript 和图像。config.xml 文件类似于 KaiOS 中的 manifest.webapp:必填字段包括 widget(id、version、手表的 height/width)、name、description 和 author。Device API 的权限通过 tizen:privilege 元素指定。CSP(内容安全策略)部分限制脚本来源。
// 用于 Tizen Watch Web 应用程序的 config.xml
<?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 片段展示了关键元素:带有 id 和版本的 widget、带有 wearable 配置文件的 tizen:application(用于圆形手表屏幕)、用于 healthinfo 和 sensor API 的 tizen:privilege,以及将内容加载限制为仅来自应用程序包的内容安全策略。
// Tizen Watch Web 应用程序:心率监测
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 访问 Galaxy Watch 的 HRM 传感器。tizen.sensorservice.getDefaultSensor('HRM') 获取心率传感器,startSensor 以 1 秒间隔开始测量。360×360 的 canvas 绘制圆形指示器 — 这是圆形 Tizen 手表屏幕的典型 UI 范例。
Tizen Watch 具有独特的 UI 特性:圆形屏幕(Galaxy Watch 上为 360×360 像素)、用于导航的物理表圈(rotary bezel)和三个硬件按钮:Home、Back 和 Custom。开发人员必须针对圆形区域调整界面 — 角落元素可能被裁剪。Circle UI 是三星的一个库,提供用于圆形屏幕的现成组件。
Rotary Bezel — Galaxy Watch 屏幕周围的物理环,用于列表导航、音量调节和缩放。在 Tizen 中,旋转事件通过 rotarydetector 或 EFL edje 信号处理。每个表圈凹口都会生成一个带有旋转角度(0-360 度)的事件。Web 应用程序通过 rotarydetector API 处理表圈:tizen.rotarydetector。
// Tizen Watch 中的 Rotary Bezel 处理
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 类通过 tizen.rotarydetector.addEventListener 订阅 rotarydetector 事件。当表圈旋转时,计算方向(cw/ccw)和角度增量。当前部分使用 active 类突出显示。rotarydetector.start() 是必需的 — 没有它,事件不会生成。destroy() 取消订阅并停止检测器以防止内存泄漏。
Tizen Watch 界面使用以下组件:RotarySelector(由表圈控制的圆形列表)、CircularList(带圆形滚动的列表)、RadialMenu(带圆形排列图标的径向菜单)、EdgePanel(从屏幕边缘滑出的面板)和 CircleProgressBar(圆形进度指示器)。所有组件都针对 360×360 分辨率进行了优化,并考虑了屏幕缺少角落的情况。最小触摸目标尺寸为 48 像素。
Tizen TV — 适用于三星 Smart TV 的平台,拥有自己的 SDK 和模拟器。电视应用程序分为两种类型:Web 应用程序(HTML5/JS)和原生应用程序(C/C++)。电视的 Web 应用程序开发更快、更容易,但原生应用程序为视频和游戏提供更好的性能。Tizen TV 使用带 D-pad 的遥控器进行导航。
AVPlay API — Tizen TV 用于视频播放的关键 API。支持 H.264、H.265(HEVC)、VP9、AV1 格式。2024+ 电视上最高支持 8K 分辨率。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);
// 设置显示为电视全屏
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 设置渲染区域 — 在电视上通常是 3840×2160 的全屏。prepareAsync 是带回调的异步准备。AVPlay 通过 ADAPTIVE_INFO 支持自适应比特率,通过 SUBTITLE 属性支持字幕。
Samsung Galaxy Store — Tizen(手表、电视、IoT)的官方应用商店。开发人员注册通过三星开发者计划免费。开发人员上传 .tpk(原生)或 .wgt(Web)格式的应用程序,并使用三星证书签名。审核需要 2-5 个工作日。Galaxy Store 在 190 个国家/地区可用。
Tizen 需要使用三星证书对应用程序进行数字签名。过程:通过 Samsung Certificate Manager 生成作者证书,为商店创建分发者证书,通过 Tizen Studio 签名包(Build Signed Package)。证书与开发者帐户关联。如果没有签名,应用程序只能在启用开发者模式的开发设备上安装。
Galaxy Store 支持付费应用程序(前 10,000 美元收取 30% 佣金,之后 25%)、订阅(25%)、通过 Samsung Ads 广告和通过 Samsung IAP 的应用内购买。对于电视应用程序,可使用 Smart TV Premium Channels 模式。最低价格为 0.99 美元。达到 100 美元门槛后每月付款。
| 要求 | 原生(.tpk) | Web(.wgt) |
|---|---|---|
| 语言 | C/C++ | HTML5, CSS, JS |
| UI 框架 | EFL, DALi, Tizen Circle UI | Circle UI (JS) |
| API 访问 | 完整系统 | Device API |
| 性能 | 最高 | 较低(Web Runtime) |
| 包大小 | 最大 100 MB | 最大 10 MB |
| 起始模板 | Tizen Native App | Tizen Web App |
常见问题
原生应用程序 使用 C/C++ 编写,使用 EFL 或 DALi 作为 UI。Web 应用程序使用 HTML5、CSS 和 JavaScript 以及 Tizen Device API。对于 Tizen TV,可以通过 Tizen .NET 使用 .NET(C#)进行开发。三星建议对高性能应用程序使用 C++,对简单界面使用 JavaScript。
Tizen 使用针对三星硬件优化的自己的 C/C++ 框架。Wear OS 基于 Android 使用 Kotlin/Java。Tizen 在相同硬件上功耗降低 30%,但商店中的应用程序较少。自 2021 年起,三星在新手表上转向了 Wear OS,但 Tizen 继续得到支持。
为 Tizen TV 创建的 Web 应用程序使用 HTML5/JavaScript 和 Tizen Device API。开发在带电视模拟器的 Tizen Studio 中进行。应用程序打包为 .wgt 包。关键 API:AVPlay(视频)、TVInfoDevice(电视规格)、TVInputDevice(遥控器)、WebAudio(声音)。通过遥控器的 D-pad 导航。
Rotary Bezel — Galaxy Watch 屏幕周围的物理旋转环,用于导航。事件通过 tizen.rotarydetector API 处理。每个凹口生成一个带有旋转角度和方向(cw/ccw)的事件。Rotary Bezel 用于滚动列表、调节音量、缩放和菜单导航。
通过 Samsung Galaxy Store 发布。开发人员注册免费。应用程序(.tpk 或 .wgt 格式)使用三星证书签名。审核 2-5 天。前 10,000 美元收入佣金 30%,之后 25%。最低价格 0.99 美元。100 美元起每月付款。
总结
我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。