为 Firefox OS 侵入 Gaia,第一部分

我想几乎每个人都知道 Mozilla 在开发的这款很棒的新产品,它在移动世界中引起了很多关注。我当然指的是 Firefox OS(代号为 Boot2Gecko),如果你还没有听说过它,那么你需要立即访问产品页面,以及 Wiki 了解更多技术概述。

为了不赘述 Wiki 上已经有的内容,Firefox OS 由三个不同的部分组成

  • Gonk - ‘操作系统’,即底层 Linux 内核和硬件抽象层 (HAL)
  • Gecko - 应用运行时,也存在于你的桌面和移动版 Firefox 中
  • Gaia - 操作系统的用户界面

为 Gaia 贡献代码

作为一个前端工程师,这个新的操作系统开辟了一个充满可能性新世界,但是,你知道吗,你也可以参与并为 Gaia 做贡献?这是真的,从今天开始,我将撰写一系列文章,介绍如何参与。今天的话题是如何获得一个能够让你在 Gaia 上工作、测试和贡献代码的工作环境。好的,让我们开始吧。

第一步是访问 Github,并 fork 和 clone Gaia 仓库

git clone git://github.com/yourusername/gaia.git && cd gaia

完成上述操作后,你就可以创建你的本地 Gaia 配置文件了。在 gaia 目录(你现在应该位于该目录中)中,运行

DEBUG=1 make

上述过程会执行很多操作,第一次运行它会需要一些时间,所以我的建议是,休息一下,给自己泡杯咖啡。完成上述操作后,最后一行输出应该是类似于

Profile Ready: please run [b2g|firefox]
-profile /Users/schalkneethling/mozilla/projects/gaia/profile

下载 B2G 桌面构建

记下 -profile 标志,因为你将在稍后需要它。接下来,我们需要下载一个 B2G 桌面构建。对于 Gaia 第 1 版的工作,这是当前的重点,我们将使用 Aurora 构建,在链接的 FTP 页面上,选择你平台的最新构建,下载完成后,按照你环境中安装应用程序的常规流程进行操作。

注意:由于应用发送和处理事件的方式发生了一些变化,B2G 桌面的最新构建将无法正常工作。为了解决这个问题,并确保更稳定的开发环境,你可以使用来自 http://ftp.mozilla.org/pub/mozilla.org/b2g/nightly/latest-mozilla-b2g18/ 的构建。

现在我们有了配置文件和桌面构建,让我们将它们连接起来。打开一个终端(命令行)并输入以下命令

/path/to/b2g-bin -profile /path/to/profile

# Note: On Mac the path is slightly different as b2g-bin lives
# inside the Contents folder of the .app so here use:

/path/to/b2g/B2G.app/Contents/MacOS/b2g-bin
-profile /path/to/gaia/profile

设置应用

运行上述命令后,将打开一个窗口,其大小与当前 Firefox OS 目标设备的大小相同,并且将显示设置应用。单击并完成设置。之后,将加载一个手机巡回应用,你可以选择跟随或跳过它。

Screen shot of a running B2G Desktop

注意:目前桌面构建中存在一个错误,退出巡回后,你将看到一个黑屏。要进入锁定屏幕,你需要关闭 B2G(Ctrl+C 应该可以做到)并重新启动。如果你使用 DEBUG=1 构建你的 Gaia 配置文件,并且在 B2G 加载时出现 404 错误,你可能会发现你需要在你的 etc/hosts 文件中添加一些条目(有些需要,有些不需要)。这里有一个 你可以直接复制到其中的 gist(GasMask 是一个很好的工具,可以在 Mac 上管理你的 hosts 文件)

对代码进行更改

在浏览了一下界面之后,让我们看看如何对当前应用之一进行简单的更改,并查看更改后的结果。

在 B2G 运行的情况下,打开日历应用,它应该位于 Home 右侧第三个屏幕的左上角。在底部,你将看到显示日历的月份、星期或日期的常规触发器。现在,在你选择的编辑器中,打开 gaia > apps > calendar 中的 index.html 文件。

Screen shot of FirefoxOS showing calendar app icon

在大约第 180 行,你将看到反映我刚刚提到的选项卡的 HTML。继续删除 <menu> 元素并保存文件。


<menu id="view-selector">
  <li class="today">
    <a href="#today">Today</a>
  </li>
  <li class="time-selection">
  ...

接下来,无需重新构建 Gaia,只需关闭 B2G 并重新启动。现在再次打开日历应用,你将看到之前的选项卡消失了,如预期的那样。很棒!现在返回并撤消你的更改,然后重新启动 B2G 和日历应用。你的选项卡现在应该恢复,并像以前一样工作。这展示了使用 B2G 桌面进行开发时的常见工作流程的一个简单示例。

调试

在这个环境中,调试是比较棘手的事情之一,但我们并非一无所有。如果你像以前一样启动 B2G,但附加 -jsconsole 标志,你将看到你从 Firefox 中知道的错误控制台随之打开。当你想检查脚本错误或将日志消息输出到控制台时,这很有用。

Screen shot of B2G desktop running with jsconsole

为了看看它是如何工作的,打开 gaia > apps > calendar > js > views 中的 month.js 文件,在第一行之后添加

console.log("Test log message when loading the Calendar App....");

保存更改并使用 -jsconsole 标志启动 B2G。启动后,单击错误控制台的消息选项卡,然后打开日历应用,你应该会看到打印的消息。

注意:如果你没有看到消息被记录到控制台,可能是因为控制台日志记录已被禁用。要解决这个问题,请转到 Firefox OS 上的设置应用,然后转到设备信息 > 更多信息 > 开发者 > 启用控制台。

这将结束本系列的第一篇文章,但在结束本文之前,这里还有一些有用的地方可以获取信息并加快开发速度


34 评论

  1. MrEricSir

    嘘,HTML 特殊字符不属于命令行!

    2013 年 1 月 14 日 上午 11:41

    1. Robert Nyman

      谢谢,这是一个小编码问题。现在已修复!

      2013 年 1 月 15 日 上午 02:11

  2. Bob Pelerson

    我仍然不明白为什么 Firefox OS 选择了 Linux 内核而不是 FreeBSD?这似乎是一个奇怪且愚蠢的决定。

    2013 年 1 月 14 日 下午 02:04

    1. Schalk Neethling

      嘿 Bob,感谢你的评论。我认为选择 Linux 内核的最主要原因是我们可以通过使用 Android 内核来快速发展我们的 Gonk 层,因此,Linux 成为了配套的一部分。

      不过我很好奇,为什么你选择 FreeBSD 而不是 Linux 内核呢?

      2013 年 1 月 15 日 上午 00:59

  3. Fawad Hassan

    感谢这篇文章。我非常需要它!
    如果你能解释一下高层架构,或者对 Gaia 进行一些概述,在接下来的部分中,这样像我这样的新手就能找到一个好的起点深入研究 Gaia 代码,那就更有帮助了。
    谢谢!

    2013 年 1 月 14 日 下午 10:42

    1. Schalk Neethling

      感谢你的评论 Fawad。在接下来的几周中,肯定会有更多内容,包括更多开发技巧以及对 Gaia 源代码和架构的介绍。敬请期待;)

      2013 年 1 月 15 日 上午 00:57

      1. markg

        这里有一篇关于 Firefox OS 架构的 MDN 参考资料
        https://mdn.org.cn/en-US/docs/Mozilla/Firefox_OS/Platform/Architecture

        2013 年 3 月 13 日 下午 05:22

  4. Thomas

    不幸的是,当我尝试使用我的配置文件启动 B2G 时,我只看到黑屏(gaia 在 master 分支上是最新的)。我使用的是以下命令

    λ ~/Code/gaia/ master /Applications/B2G.app/Contents/MacOS/b2g-bin -profile /Users/tbassetto/Code/gaia/profile
    1358263010274 Marionette INFO MarionetteComponent 加载
    1358263010275 Marionette INFO marionette 已启用,loadearly:false
    ###################################### forms.js 加载
    [AccessFu] INFO attach

    B2G.app 来自 http://ftp.mozilla.org/pub/mozilla.org/b2g/nightly/latest-mozilla-b2g18/b2g-18.0.multi.mac64.dmg

    2013年1月15日 上午8:23

    1. Fawad Hassan

      如果你能看到导览,然后出现黑屏,那么可能是这个问题

      “注意:目前桌面版本存在一个bug,当你退出导览后,你会看到一个黑屏。要进入锁屏,你需要关闭B2G(Ctrl+C应该可以),然后重新启动。”

      2013年1月15日 上午9:06

      1. Thomas Bassetto

        不,从一开始就是黑屏,在假设的导览之前。

        我修改了我的/etc/hosts,但它仍然不起作用。但我又做了一个`DEBUG=1 make`,现在它可以用了! ;)

        2013年1月15日 上午10:37

  5. Fawad Hassan

    b2g桌面显示白页并给出错误“404页面未找到”。

    我成功地构建了gaia并下载了稳定的Linux x86_64版本的b2g。当我使用以下命令运行b2g时

    ./b2g-bin -profile /home/ifadey/Projects/gaia/profile

    它在终端上显示以下输出,并在B2G桌面窗口中显示白页(404页面未找到)。

    1358259547941 Marionette INFO MarionetteComponent loaded 1358259547943 Marionette INFO marionette enabled, loadearly: false ATTENTION: default value of option force_s3tc_enable overridden by environment. ###################################### forms.js loaded [AccessFu] INFO attach creating 1! *** UTM:SVC TimerManager:notify - notified @mozilla.org/addons/integration;1 *** UTM:SVC TimerManager:notify - notified @mozilla.org/extensions/blocklist;1

    2013年1月15日 上午9:26

    1. Schalk Neethling

      嘿,Fawad和Thomas,你们可以添加一些条目到你们的hosts文件中,这应该可以解决问题。我不会在这里发布,我会更新帖子以反映这一点。

      2013年1月15日 上午9:45

      1. Fawad Hassan

        成功了!
        它可以用了,但在我重启机器之后。
        感谢你的修复 :)

        2013年1月16日 上午6:29

  6. Lucas Holmquist

    可能是个愚蠢的问题,但你如何退出一个应用程序,当你已经进入它的时候?

    2013年1月15日 上午9:53

    1. Schalk Neethling

      嘿,Lucas,一点也不愚蠢的问题。在OSX上,有硬件按钮模拟:https://wiki.mozilla.org/Gaia/Hacking#Simulating_Hardware_Buttons

      2013年1月15日 上午11:40

    2. Schalk Neethling

      嘿,Lucas,帖子已经更新了,请查看帖子末尾的最后一个要点。感谢你的评论。

      2013年1月15日 下午1:13

  7. merih

    嗨,我无法让它工作。在运行带有gaia文件夹下的配置文件的“b2g-bin”后,只打开了一个带有tomcat的“It works!”页面的窗口。但是,如果我运行“b2g”(直接或带有配置文件),它似乎可以工作。

    2013年1月16日 上午7:25

    1. Merih Akar

      好的,我已经解决了我的问题。问题是,httpd.js监听端口8080,但是我的机器上也安装了tomcat,它也监听端口8080。我已经停止了tomcat,它开始工作了。

      2013年1月16日 上午9:37

    2. Schalk Neethling

      嘿,merih,从你的描述来看,似乎你已经运行了一个Tomcat实例,它运行在与Gaia在使用DEBUG=1构建配置文件时尝试启动的服务器相同的端口上。

      如果你直接运行B2G,它能工作的原因是,捆绑的Gaia配置文件不是使用DEBUG=1构建的,因此不会发生冲突。你有两种选择,要么停止你的Tomcat实例,要么按照如下方式构建你的Gaia配置文件

      DEBUG=1 GAIA_PORT=:9090 make

      现在,有一个不好的消息;(目前看来,指定一个自定义端口(如上所示)与B2G桌面不兼容,所以,目前,最好的解决方案是停止任何运行在端口8080上的程序。这里有一个关于这个问题的bug https://bugzilla.mozilla.org/show_bug.cgi?id=831347

      2013年1月16日 下午12:21

      1. Merih Akar

        我在你回复之前已经解决了,停止了Tomcat,然后它就成功了!无论如何,感谢你的详细解释 :)

        2013年1月16日 下午12:44

        1. Schalk Neethling

          很棒的Merih,很高兴你成功了,玩得开心!

          2013年1月17日 上午4:40

  8. Variya Soft Solutions

    正如文章中所述,我知道

    git clone git://github.com/yourusername/gaia.git && cd gaia
    以及
    DEBUG=1 make

    是构建Gaia库的命令。但我不确定在哪里运行这些命令或如何使用它们。请建议。谢谢。

    2013年1月16日 上午9:25

    1. Merih Akar

      你应该将它们写入你的终端

      2013年1月16日 上午9:38

    2. Schalk Neethling

      嘿,Variya SS,我想简短的答案是你需要通过终端/命令行来运行这些命令。你以前使用过Git吗?

      2013年1月16日 下午12:25

      1. Variya Soft Solutions

        没有。从来没有。
        感谢Merih Akar、Schalk Neethling的帮助。让我在我的Ubuntu终端上尝试一下。

        2013年1月16日 下午10:00

        1. Schalk Neethling

          嘿,Variya SS,如果你需要一些帮助来开始使用Git,这是一个很好的起点 https://help.github.com/categories/54/articles

          2013年1月17日 上午4:40

  9. Thierry Régagnon

    一切顺利,直到我删除了日历应用程序中的菜单。我停止了B2G并重新启动它,但这次我得到了一个错误:“Firefox无法建立到system.gaiamobile.org:8080服务器的连接”。我第一次启动时没有这个错误。

    我遵循了你关于hosts文件的建议。我使用“Gas Mask”将Gaia规则添加到我的hosts文件中。我使用了你的gist,但它不起作用。然后我意识到你的gist中的端口是8180,而B2G试图连接到8080,所以我将所有规则更改为匹配端口8080。它仍然不起作用。

    有什么想法吗?

    2013年1月19日 上午4:01

    1. Schalk Neethling

      嘿,Theirry,

      首先,我想让你进入你的Gaia签出目录,并完全删除你当前的配置文件:rm -rf profile

      接下来,继续再次构建你的配置文件,但不使用DEBUG,即只运行make

      启动B2G,看看它是否有效,如果有效,继续下一步。

      返回并再次构建你的配置文件,这次使用DEBUG,即DEBUG=1 make。启动B2G,看看它是否仍然有效。

      如果这些步骤中的任何一步失败,请告诉我。此外,为了确保,你是否正在使用从 http://ftp.mozilla.org/pub/mozilla.org/b2g/nightly/latest-mozilla-b2g18/下载的B2G版本?

      2013年1月20日 上午11:40

      1. Thierry Régagnon

        感谢你的帮助,Schalk。

        我遵循了你的建议,它成功地起作用了。

        我尝试了不同的方法来理解问题。当我使用CTRL + C从CLI停止B2G,然后重新启动它时,我会收到关于无法访问system.gaiamobile.org:8080的错误。
        当我使用Gaia中的“关机”选项时,我可以毫无问题地再次运行B2G。(但我得到了崩溃报告器)

        我尝试删除日历应用程序中的菜单。但在修改后,应用程序无法启动。我得到了一个空白页面。我设法通过另一种方式更改了应用程序。

        我无法从month.js文件中记录消息,即使在开发者菜单中启用了控制台选项。

        2013年1月20日 下午3:09

        1. Schalk Neethling

          嘿,Theirry,

          很高兴听到你正在取得进展。关于你遇到的停止和启动B2G的问题,我无法自己复现这个问题,但你在哪个平台上?也许这是一个我们可以提交的bug。

          关于更改日历应用程序代码后出现的问题,你是否删除了菜单元素包装的整个代码片段?如果生成的代码格式不正确,应用程序的渲染将中断,你会发现你最终得到一个白屏。最终,这并不算什么大问题,只要你找到了另一种方法来查看你在应用程序中可视化的更改。

          然后,关于日志不可见的问题,你是否使用-jsconsole标志启动了B2G,并使用DEBUG=1 make构建了你的Gaia配置文件?此外,你是否点击了控制台的不同选项卡,例如切换到“全部”选项卡,看看消息是否在那里显示?也就是说,console.log消息通常应该出现在“消息”选项卡中。

          请告诉我以上内容是否对你有帮助,或者你是否仍然遇到问题。感谢你的评论。

          2013年1月20日 下午11:51

  10. Patrik Schulze

    你在文章中写道

    首先,你需要前往Github并分叉并克隆Gaia库。git clone git://github.com/yourusername/gaia.git && cd gaia

    但是你没有说明在哪里可以找到实际的gaia库,这让人感到困惑

    我认为应该是 https://github.com/mozilla-b2g/gaia.git

    无论如何,我需要做的是:我已经在移动设备上构建、刷机、更改gaia等等。
    但是我真的很想更改gaia的内部部分,它的工作方式和外观。它在移动设备上运行得很好,问题是每次我进行微小的更改后,我都必须构建和刷机,这需要超过10分钟。
    所以我想拥有一个桌面版本,这样当我更改一些css/js/html文件时,我可以立即看到效果
    这是否可以通过构建自己的桌面版本来实现?
    因为当然,你下载的Firefox附加组件和构建版本不允许你这样做,你可以测试应用程序,但不能更改gaia本身

    2013年3月22日 上午4:46

    1. Robert Nyman [编辑]

      感谢你提供链接,我已经将其添加到帖子中。
      不幸的是,目前只能按照本文前面描述的方式在桌面进行测试。

      2013年3月22日 下午05:29

  11. Patrik Schulze

    整个Gaia CSP违规的问题快把我逼疯了。

    我正在尝试编写锁屏小部件,但我无法使用JavaScript和选择div – 因为内联脚本完全被禁用。

    2013年3月28日 上午09:48

    1. markg

      你仍然可以导入外部JavaScript文件。你试过这种方法吗?

      2013年3月28日 上午11:19

本文的评论已关闭。