codecamp

heX 及 HeXium 编译指南

包括下载,构建工程,编译源代码

背景知识

heX 依赖 ChromiumCEFNode.js 项目。在下载 heX 源代码之前,需要先准备好指定版本的 Chromium 源代码,但不需要下载 CEF 和 Node.js 项目源代码,因为构建工具会自动下载它们。

以上项目的首页:

下载 Chromium 源代码

Chromium 的项目 WIKI 中有非常详细的下载步骤,可通过 svn 或者 git,以及所需要的 depot_tools。参见:http://dev.chromium.org/developers/how-tos/get-the-code

而 Chromium 是一个巨大的项目,若通过 SVN 获取其源代码会耗费大量的时间。为了节省宝贵的时间可以直接下载源代码包。下面主要介绍一下快速下载的方法:

  1. 在浏览器中打开此链接:http://chromium-browser-source.commondatastorage.googleapis.com
  2. 在 heX 源代码根目录的 CHROMIUM_BUILD_COMPATIBILITY 文件中查找指定的 Chromium 版本号
  3. 在上面的链接所指的 XML 文件中找一个与指定版本号最接近的版本。如,查找 rXXXXXX
  4. 下载这个最接近的版本号的源代码包
  5. 解压并且进入到包中 src 目录的父目录
  6. 执行 gclient sync --revision src@指定的Chromium版本号 --force --jobs 32
  7. 一会儿之后,指定版本的 Chromium 源代码会更新完毕
    注意:似乎在升级到 blink 内核之后,步骤 1 的列表已经不再更新。

检出 heX 和 HeXium 源代码

heX 和 HeXium 共享同一套源代码,通过不同的构建工具来生成对应的工程。heX 的源代码必须放置在 Chromium 源代码的 src 目录下。检出 URL 是 https://github.com/netease-youdao/hex.git

代码检出后,目录结构会是:

src - base
      hex
      ...

准备编译环境

从源代码编译 heX 及 HeXium 目前暂时支持 Windows 和 Mac OS X,其中 Mac OS X 下编译 heX 还存在一些问题,会在近期修正。至少需要 4GB 系统内存,推荐 8GB 甚至 16GB 内存。

为了编译 Chromium、Node.js、CEF 以及 heX 源代码,你必须从这里开始配置编译环境,在系统中安装编译前期必要的开发环境。请参考:

完成上述配置后,你需要下载指定版本的 Node.jsCEF,并且通过 GYP 生成工程文件。heX 的构建工具会自动将下载 Node.js、CEF 与生成工程文件,只需在 heX 源代码目录中执行 hex.bathex_end_user.bat (end user 版本) 即可。

编译 heX

heX 的自动构建工具会根据当前的平台生成对应的工程文件:

  • Windows:用 Visual Studio 打开刚生成的 hex.sln,将 hexclient 工程设置为启动工程,编译!
  • Mac OS X:用 Xcode 打开刚生成的 hex.xcodeproj,编译!

一段时间之后(这取决于你的计算机硬件配置),你会在 src/hex/build 目录中找到编译的结果。

编译 HeXium

HeXium 本质上是一个经过修改的加入了 Node.js 的 Chromium 浏览器。这个子项目并不需要 CEF 的支持。

在运行了上面提到的 hex.bat 脚本之后,进入 Chromium 源代码 src 的上层目录,运行 gclient hooks。这样做是确保用于编译 HeXium 的全部工程文件构建正确。

工程文件构建完毕后进入 src/chrome 目录中找到

  • Windows:chrome.sln
  • Mac OS X:chrome.xcodeproj

并使用默认的 IDE 打开,编译!

比编译 heX 更久的一段时间之后(这同样取决于你的计算机硬件配置),你会在

  • Windows:src/build/Debug or Release
  • Mac OS X:src/xcodebuild/Debug or Release

中找到编译的结果。

heX 目录结构详解
heX 二进制包生成工具说明
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }