定制构建时 apps

作为一个开发者或设备厂商,您可能由于各种原因想要对 Friefox OS 首次启动时的 app 进行定制。本文则说明了完成该需求的不同机制。

Gaia 中的 App 存放位置

运行在 Firefox OS 中的 app 都位于 Gaia 源码树下,共有两个存储位置:

  • gaia/apps/: 系统默认的 app 存放在此处, 如 calendar, email, settings, 等。
  • gaia/dev-apps: 其他 app 的存放在此,如在自定义过程中包含的 app。

如果您想要在编译 Gaia/B2G 时忽略或添加这些 app, 有下面几种方式可以实现:

野蛮的定制方法

所谓“野蛮”的方法是指在编译前, 将不想要参与编译的 app 直接删除即可。

编辑配置列表

相比而言,更优雅的方法则是编辑 apps-*.list 文件 (位于不同的设备目录下,在  gaia/build/config/ 内部,如 phone/tablet/) ,将需要编译的 app 路径包括进去。例如,   gaia/build/config/phone/apps-production.list 格式如下所示:

apps/bluetooth
apps/bookmark
apps/browser
apps/calendar
apps/callscreen
etc.

注意,您也可以使用如下代码指定目录下的所有 app:

apps/*

至于在编译时,具体选择哪个  apps-*.list 文件的代码在 gaia/Makefile 文件中指定来,其形式如下所示:

GAIA_DEVICE_TYPE?=phone
  ...
GAIA_APP_TARGET?=engineering
  ...
ifeq ($(MAKECMDGOALS), demo)
GAIA_DOMAIN=thisdomaindoesnotexist.org
GAIA_APP_TARGET=demo
else ifeq ($(MAKECMDGOALS), dogfood)
DOGFOOD=1
else ifeq ($(MAKECMDGOALS), production)
PRODUCTION=1
endif
  ...
ifeq ($(PRODUCTION), 1)
GAIA_OPTIMIZE=1
GAIA_APP_TARGET=production
endif

ifeq ($(DOGFOOD), 1)
GAIA_APP_TARGET=dogfood
endif
  ...
ifndef GAIA_APP_CONFIG
GAIA_APP_CONFIG=build$(SEP)config$(SEP)apps-$(GAIA_APP_TARGET).list
endif

最初, GAIA_APP_TARGET 变2量被设置为 engineeringGAIA_DEVICE_TYPE 变量被设置成  phone, 因此默认情况下编译 Gaia 时会使用 gaia/config/phone/app-engineering.list (其中包括所有的测试,deomo 等)。

要指定其他应用程序列表的用法,请在运行make命令时指定不同的选项。比如用 gaia/build/config/phone/apps-production.list 进行构建, 比如,你要使用:

PRODUCTION=1 make

如果你专门指定DEMO=1进行构建, 那么它将使用apps-demo.list. 如果你专门指定DOGFOOD=1进行构建, 则它将会使用apps-dogfood.list.

你可以完全覆盖该决定通过编辑 GAIA_APP_CONFIG 文件在 gaia/Makefile目录中, 并提供你自己的 apps-*.list 文件.

gaia/Android.mk 包括下面命令:

ifneq ($(filter user userdebug, $(TARGET_BUILD_VARIANT)),)
GAIA_MAKE_FLAGS += PRODUCTION=1
B2G_SYSTEM_APPS := 1
endif

当你构建的时候, 如果 VARIANT=user 或者 VARIANT=userdebug 被设定 (这些将会在 TARGET_BUILD_VARIANT 变量中反映), PRODUCTION=1 在构建Gaia时会自动设置.

注意: 要了解其他有效的 make 选项,请参考 make options 参考文档

使用市场化定制

第三种也是最完善(但最复杂)的方法是使用自定义方式.这将允许您在单独的目录中指定构建时的自定义说明,而无需修改Gaia的核心存储库。 您可以再不同的目录中包括自己的自定义项,或者使用源附带的目录。

例如,使用GAIA_DISTRIBUTION_DIR 这个环境变量来指定自定义示例的位置, 像这样:

GAIA_DISTRIBUTION_DIR=<DISTRIBUTION_PATH> make production

更多有关分发机制的自定义实例请参考以下网页https://github.com/mozilla-b2g/gaia/tree/master/customization

定制完全属于您的个人主题,要了解更多信息,欢迎访问我们的市场定制指南Market Customizations guide.

注意: 如果您希望在 Gaia 编译时包含一些自定义的外部 app, 则需要以指定的方式编译它们,并且将它们放在  gaia/dev-apps/ 文件夹中。请参考 Building Prebundled web apps  获取更多内容。

重要: 如果您是创建自定义B2G/Gaia 版本进行分发的设备供应商,则需要满足一些条件才能将firefox marketplace应用程序包含在手机/平板电脑等设备中。有关更多详细信息,欢迎联系Mozilla!