hippy-tv 是quicktvui框架中Native层运行库。它主要工作是对腾讯开源项目 hippy 进行针对电视设备的优化及二次扩展。
graph LR
A[quicktvui] -- run on --> B[quicktvui-sdk]
B -- depends on --> C[hippy-tv]
ℹ️ quicktvui由三部分组成:quicktvui-sdk(安卓RuntimeSDK)、hippy-tv(基于hippy的tv扩展)、quicktvui(Vue 快应用框架)。 本仓库为核心代码仓库,若需查看完整安卓端运行效果和实际应用示例,请前往 quicktvui-sdk 项目。
⚠️ 目前仅支持Android >= 17 版本设备
- ✏️ 修改 hippy 部分 API 行为:对底层渲染与事件响应机制进行了适配优化。
- 🎯 引入焦点系统:支持遥控器方向键导航、焦点记忆、边界控制等,增强 TV 操作体验。
- 🧾 更快的列表组件:高性能虚拟列表,支持遥控分页滚动和动态渲染。
- 🧩 完善各类组件模块:补充瀑布流等 TV 常用UI组件
📌 注意!本项目基于 Hippy
v2.8.2版本 Fork,并在此基础上进行 TV 场景定制与功能增强。目前与hippy偏离较大,暂不考虑合并新版hippy后续将会在大版本变动时与hippy最新版本合并。
在 Android Studio 中编译
- 打开 Android Studio:
- 启动 Android Studio
- 选择 "Open an Existing Project"
- 选择项目目录:
- 导航到 hippy-tv 项目的根目录
- 选择 build.gradle 或 settings.gradle 文件所在目录
- 点击 "Open"
- 同步Gradle:
- Android Studio 会自动开始同步 Gradle
- 如果没有自动同步,点击工具栏的 "Sync Project with Gradle Files" 按钮
- 编译项目:
- 同步完成后,打开右侧的 Gradle 面板(View → Tool Windows → Gradle)
- 导航到项目 → Tasks → build
- 双击 "build" 任务执行编译
- 或者,在终端运行:
./gradlew android-sdk:build在项目的 hippy-tv/android/sdk/local.properties 文件中添加您自己仓库及账号信息:
MAVEN_REPO_URL_RELEASE=your-repo-url-release
MAVEN_REPO_URL_SNAPSHOT=your-repo-url-snapshot
MAVEN_USERNAME=your-username
MAVEN_PASSWORD=your-password
按需修改 hippy-tv/android/sdk/gradle.properties 文件中的发布相关配置:
EXT_JS_ENGINE_LIB=false
NDK_VERSION=21.4.7075529
INCLUDE_SUPPORT_UI=true
INCLUDE_ABI_X86=true
android.useAndroidX=false
#是否动态加载so,如果为true,则不会打包到aar中
ENABLE_SO_DOWNLOAD=true
##需要的so架构,ENABLE_SO_DOWNLOAD为false时生效
INCLUDE_ABI_ARM64_V8A=false
INCLUDE_ABI_ARMEABI=false
INCLUDE_ABI_ARMEABI_V7A=false
INCLUDE_ABI_X86_64=false
COMPILE_SDK_VERSION=29
PUBLISH_ARTIFACT_ID=hippy-tv
MIN_SDK_VERSION=17
ARCHIVES_BASE_NAME=hippy-tv
#打debug版本时,将此行注释掉
V8_RELEASE=x5-lite
V8_TAG=recommend
PUBLISH_VERSION_DESC=Hippy library for Android TV
VERSION_CODE=1
android.enableD8=true
TARGET_SDK_VERSION=29
SKIP_CMAKE_AND_NINJA=false
VERSION_NAME=0.2.0
PUBLISH_GIT_URL=https\://github.com/Tencent/Hippy
#maven groupId
PUBLISH_GROUP_ID=com.quicktvui
#版本提交号
COMMIT=""
#hippy-tv核心版本号,vue会在程序中读取判断部分api是否兼容
CORE_VERSION=0.2.0
INPUT_PREFERENCE=focus
debug将V8_RELEASE注释掉,将ENABLE_SO_DOWNLOAD改为false,然后按需将各个SO架构的开关打开。
例如:
EXT_JS_ENGINE_LIB=false
NDK_VERSION=21.4.7075529
INCLUDE_SUPPORT_UI=true
INCLUDE_ABI_X86=true
android.useAndroidX=false
#是否动态加载so,如果为true,则不会打包到aar中
ENABLE_SO_DOWNLOAD=false
##需要的so架构,ENABLE_SO_DOWNLOAD为false时生效
INCLUDE_ABI_ARM64_V8A=true
INCLUDE_ABI_ARMEABI=true
INCLUDE_ABI_ARMEABI_V7A=true
INCLUDE_ABI_X86_64=true
COMPILE_SDK_VERSION=29
PUBLISH_ARTIFACT_ID=hippy-tv-debug
MIN_SDK_VERSION=17
ARCHIVES_BASE_NAME=hippy-tv-debug
#打debug版本时,将此行注释掉
#V8_RELEASE=x5-lite
V8_TAG=recommend
PUBLISH_VERSION_DESC=Hippy library for Android TV
VERSION_CODE=1
android.enableD8=true
TARGET_SDK_VERSION=29
SKIP_CMAKE_AND_NINJA=false
VERSION_NAME=0.2.0
PUBLISH_GIT_URL=https\://github.com/Tencent/Hippy
#maven groupId
PUBLISH_GROUP_ID=com.quicktvui
#版本提交号
COMMIT=""
#hippy-tv核心版本号,vue会在程序中读取判断部分api是否兼容
CORE_VERSION=0.2.0
INPUT_PREFERENCE=focus在项目根目录下执行以下 Gradle 命令:
./gradlew android-sdk:publish或者通过 Android Studio 的 Gradle 面板:
- 打开右侧 Gradle 面板
- 导航到
hippy-tv → android-sdk → Tasks → publishing - 双击 publish 任务
- ✅ 列表组件重构,更方便使用 (即将release)
- ◻️ 鸿蒙平台适配(HarmonyOS)进行中
- ◻️ 列表滚动体验优化
- 🚧 ul组件支持Grid布局
- ◻️ 更多css样式支持
- ◻️ 支持svg图片
- ◻️ 焦点相关API优化
- ◻️ 组件扩展文档
- ◻️ 合并 Hippy 最新版本
本项目采用三段式版本命名规范(即 主版本号.次版本号.修订号),遵循语义化版本原则:
主版本号 (MAJOR):重大变更或不兼容的API修改次版本号 (MINOR):新增功能且向下兼容修订号 (PATCH):问题修复或微小改进,完全兼容
| 版本范围 | 兼容性说明 |
|---|---|
1.x.x |
同一主版本内保证API兼容性 |
x.2.x → x.3.x |
可安全升级,包含新功能 |
x.x.1 → x.x.2 |
强烈建议升级,仅含错误修复 |
A:
传统安卓开发存在以下问题:
- 开发效率低:XML + Java/Kotlin 开发周期长,调试复杂。
- 无法动态更新:原生代码无法实时修复线上问题。
- 升级部署慢:需要将APK提交各大应用商店审核后上线,部署周期长。
Hippy 的优势:
✅ 前端技术栈:基于 JavaScript/TypeScript,复用 Web 生态(React/Vue),提升开发效率。
✅ 动态化能力:js动态语言特性,天然支持动态化,相较于插件化等native更新方式,无论开发还是部署、加载体验都很顺畅。
A:
- 渲染性能:Hippy 采用 Native 渲染(与 Flutter/React Native 类似),UI 组件最终映射为原生控件,性能接近原生。
- 瓶颈分析:
- JS 层:Vue/React 的虚拟 DOM 管理可能成为性能瓶颈(尤其在复杂页面)。
- 通信开销:JS 与 Native 的桥接通信(Bridge)在频繁交互时可能有延迟。
- 启动速度:相较于原生hippy增加了js引擎启动的时间成本(大部分电视在1S左右),引擎启动之后时间主要与js程序本身,dom少的情况下,与原生相差不大。
- 优化建议:
- 减少不必要的 DOM 节点(如扁平化组件结构)。
- 性能敏感模块(如动画、复杂且数量庞大的UI组件)可通过原生实现。
- 减少频繁的 JS-Native 通信,复杂的通信场景考虑整体用原生实现。
结论:在 DOM 较少的场景下,Hippy 性能与原生基本持平;复杂场景需针对性优化,或者将复杂逻辑用原生实现,性能也能追平原生。
A:
✅ 支持!Hippy 的 JS Bundle 可通过 CDN 或服务端动态下发,实现热更新(无需应用商店审核)。
A:
- 高频迭代功能:如活动页、运营弹窗。
- 动态化要求高:需快速修复线上问题的核心模块。
- 原生开发增加动态化能力:使原生增加动态化能力,减少发版频率。
A: 可以,这是目前推荐的开发方式。例如将复杂、对性能要求较高的页面、组件利用原生实现,通过js去组织加载,这样既能保证性能,又有了动态化的能力。 目前常见俩种结合的开发方式:
- JS为入口: js做为主入口,将复杂的ui组件、模块利用Native实现并提供给hippy调用。
- Native为入口:可以将需要动态化的ui模块做为一个
jsView当做一个标准View嵌入到Activity当中。
如需更多问题解答,请参考 Hippy 官方文档 或提交 Issue。
ℹ️ 本项目已成功应用于多个实际 TV 应用中,但整体仍处于快速演进阶段,使用时请注意版本变化。
⚠️ 欢迎你 Fork 本项目,自由修改并根据自身需求进行定制开发。
如你有问题或建议,欢迎通过 Issue 与我们沟通反馈。
本项目基于 Apache License 2.0 开源发布。