Hippy-跨端开发框架

一、介绍

Hippy 是一个新生的跨端开发框架,目标是使开发者可以只写一套代码就直接运行于三个平台(iOS、Android 和 Web)。Hippy 的设计是面向传统 Web 开发者的,特别是之前有过 React 和 Vue 开发经验的开发者用起来会更为顺手,Hippy 致力于让前端开发跨端 App 更加容易。

到目前为止,腾讯公司内已经有 27+ 款主流 App 在使用 Hippy 框架,包括手机QQ、QQ浏览器、腾讯视频、QQ音乐、腾讯新闻等,每日触达数亿用户。

特征

  • 为传统 Web 前端开发者设计,官方支持 ReactVue 两种主流前端框架。
  • 不同的平台保持了相同的接口。
  • 通过 JS 引擎 binding 模式实现的前端-终端通讯,具备超强性能。
  • 提供了高性能的可复用列表。
  • 皆可平滑迁移到 Web 浏览器。
  • 完整支持 Flex 的布局引擎

二、开始

准备环境
运行 git clone https://github.com/Tencent/Hippy.git

Hippy 仓库使用 git-lfs 来管理 so,gz,otf,png,jpg 文件, 请确保你已经安装 git-lfs

macOS 用户需要以下软件:

  • Xcode 和 iOS SDK: 用以编译 iOS 终端 app。
  • Android Studio 和 NDK: 用以编译 Android app。
  • Node.JS: 用以运行前端编译脚本。

我们推荐使用 homebrew 来安装依赖。

Windows 用户者需要以下软件:

Windows 用户受条件所限,暂时无法进行 iOS app 开发。

使用 JS 范例来构建 iOS App

我们推荐 iOS 开发者使用模拟器来进行开发和调试工作。当然如果你是一个 iOS 开发高手,也可以通过修改配置将 Hippy app 安装到 iPhone 手机上。

  1. 在根目录运行命令 npm install 安装项目构建脚本的依赖。
  2. 在根目录运行命令 lerna bootstrap 安装前端每一个 package 依赖。(Hippy 采用 Lerna 管理多 JS SDK 包仓库,如果出现 lerna command is not found, 先执行 npm install lerna -g 全局安装 Lerna。)
  3. 在根目录运行命令 npm run build 编译每一个 JS SDK 包。
  4. 选择一个前端范例项目来进行编译,在项目根目录运行 npm run buildexample -- [hippy-react-demo|hippy-vue-demo]
  5. 启动 Xcode 并且开始编译终端 App:open examples/ios-demo/HippyDemo.xcodeproj

如果步骤4出现错误,可以先 cdexamples hippy-react-demo 或者 hippy-vue-demo 目录下,执行 npm install --legacy-peer-deps,提前将 demo 的 NPM 包依赖先安装好。

更多信息请参考 iOS SDK 集成

使用 JS 范例来构建 Android App
我们推荐 Android 开发者使用真机,因为 Hippy 使用的 X5 JS 引擎没有提供 x86 的库以至于无法支持 x86 模拟器,同时使用 ARM 模拟器也比较慢。

在开始前请确认好 SDK 和 NDK 都安装了范例的指定版本,并且请勿更新编译工具链。

  1. 在根目录运行命令 npm install 安装项目构建脚本的依赖。
  2. 在根目录运行命令 lerna bootstrap 安装前端每一个 package 依赖。(Hippy 采用 Lerna 管理多 JS SDK 包仓库,如果出现 lerna command is not found, 先执行 npm install lerna -g 全局安装 Lerna。)
  3. 在根目录运行命令 npm run build 编译每一个 JS SDK 包。
  4. 选择一个前端范例项目来进行编译,在项目根目录运行 npm run buildexample -- [hippy-react-demo|hippy-vue-demo]
  5. 用 Android Studio 来打开终端范例工程 examples/android-demo
  6. 用 USB 数据线插上你的 Android 手机,需要确认手机已经打开 USB 调试模式(可通过在电脑 Terminal 执行 adb devices 判断手机是否已经连上了电脑)。
  7. 运行工程,并安装 APK。

如果步骤4出现错误,可以先 cdexamples hippy-react-demo 或者 hippy-vue-demo 目录下,执行 npm install --legacy-peer-deps,提前将 demo 的 NPM 包依赖先安装好。

如果 Android Studio 报了这个错误 No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android,这里有解决办法

更多信息请参考 Android SDK 集成

调试前端 Demo

  1. 先按照 [使用 JS 范例来构建 iOS App][使用 JS 范例来构建 Android App] 步骤执行。
  2. cdexamples hippy-react-demo 或者 hippy-vue-demo 目录。
  3. 执行 npm install 安装相应 js demo 的依赖包。
  4. 分别执行 npm run hippy:devnpm run hippy:debug(npm run hippy:local-debug 会调用 packages 下的源码) 来开启实时 Debug 模式。

在 example 调试模式下,@hippy/react、@hippy/vue 等 npm 模块会直接链接到 packages > [different package] > dist 目录下面的 js 文件(非 node_modules),所以如果你修改了 packages 下的 JS 源代码并且想让其在 example 中生效,请重新在根目录执行 npm run build

更多关于调试的说明请浏览 Hippy Debug Document

三、文档

参考 hippy examples 下的代码和浏览官网 hippyjs.org

四、项目结构

Hippy
├── examples # 前终端范例代码。
│ ├── hippy-react-demo # hippy-react 前端范例代码。
│ ├── hippy-vue-demo # hippy-vue 前端范例代码。
│ ├── ios-demo # iOS 终端范例代码。
│ └── android-demo # Android 终端范例代码。
├── packages # 前端 npm 包。
│ ├── hippy-debug-server # Hippy 的前终端调试服务。
│ ├── hippy-react # Hippy 的 React 语法绑定。
│ ├── hippy-react-web # hippy-react 转 Web 的库。
│ ├── hippy-vue # Hippy 的 Vue 语法绑定。
│ ├── hippy-vue-css-loader # 用来将 CSS 文本转换为 JS 语法树以供解析的 Webpack loader。
│ ├── hippy-vue-native-components # hippy-vue 中浏览器中所没有的,额外的,终端定制组件。
│ ├── hippy-vue-router # 在 hippy-vue 中运行的 vue-router。
│ └── types # 全局 Typescript 类型
├── ios
│ └── sdk # iOS SDK。
├── android
│ ├── support_ui # Android 终端实现的组件。
│ └── sdk # Android SDK。
├── core # C++ 实现的 JS 模块,通过 Binding 方式运行在 JS 引擎中。
├── docker # 发布 Native 的 Docker 镜像和构建脚本
├── layout # Hippy 布局引擎。
└── scripts # 项目编译脚本。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容