JAR 清单文件¶
JAR 清单文件是树形结构中的纯文本文件,用于将 chrome 文件打包到 .jar
文件中并创建 Chrome 注册 清单文件。JAR 清单文件通常命名为 jar.mn
。它们在 moz.build
文件中使用 JAR_MANIFESTS
变量声明,该变量构成 jar.mn
文件的集合。在构建 Firefox 时,JAR 清单文件中声明的所有文件都会被处理并安装到 omni.ja
文件中,这些文件位于 browser/
和 toolkit/
目录下。
jar.mn
文件在构建包含该文件的源目录时会由构建系统自动处理。在传递到清单文件处理器之前,jar.mn
会通过 文本预处理器 进行处理。为了扩展 @variables@
(例如 @AB_CD@
)在整个文件中,请在 jar.mn
文件的顶部添加行 #filter substitution
。
jar.mn 的格式相当简单;它包括一个指定正在打包哪个 JAR 文件的标题,以及缩进的行,这些行列出了文件和 chrome 注册指令。
有关简单的 jar.mn
文件,请参见 toolkit/profile/jar.mn。有关更复杂的 jar.mn
文件,请参见 toolkit/locales/jar.mn。下面提供了更多具有特定格式和用途的示例。
发布 Chrome 文件¶
通用格式¶
要在 JAR 中发布 chrome 文件,缩进的行表示要打包的文件
<jarfile>.jar:
path/in/jar/file_name.xul (source/tree/location/file_name.xul)
请注意,文件路径映射按目标 (左) 后跟源 (右) 列出。
相同目录省略¶
如果 JAR 清单文件和打包文件位于同一目录中,则可以省略源路径和括号。一个省略源路径和括号的 jar.mn
文件示例是 浏览器/组件/颜色/jar.mn 的此版本
browser.jar:
content/browser/colorwaycloset.html
content/browser/colorwaycloset.css
content/browser/colorwaycloset.js
如果上述文件与 jar.mn
位于同一目录中,则编写以下内容是等效的。请注意,.jar
文件名为 browser.jar
browser.jar:
content/browser/colorwaycloset.html (colorwaycloset.html)
content/browser/colorwaycloset.css (colorwaycloset.css)
content/browser/colorwaycloset.js (colorwaycloset.js)
此清单文件负责打包颜色选择器所需的文件,包括 JS 脚本、本地化文件、图像 (例如 PNG、AVIF) 和 CSS 样式。查看 浏览器/组件/颜色/colorwaycloset.html 以了解如何使用其 chrome URL 引用文件。
绝对路径¶
源代码树位置也可以是绝对路径(从源代码树的顶部获取)。一个这样的示例可以在 工具包/组件/画中画/jar.mn 中找到
toolkit.jar:
* content/global/pictureinpicture/player.xhtml (content/player.xhtml)
content/global/pictureinpicture/player.js (content/player.js)
星号标记 (预处理)¶
行首的星号标记 (*
) 表示该文件应在打包之前由 文本预处理器 处理。文件 toolkit/profile/jar.mn 指示文件 toolkit/profile/content/profileDowngrade.xhtml 应通过预处理器运行,因为它包含需要解释的 #ifdef
和 #endif
语句
* content/mozapps/profile/profileDowngrade.xhtml (content/profileDowngrade.xhtml)
基本路径、变量、通配符和本地化文件¶
.jar
文件位置前面可以有方括号括起来的基本路径。文件 toolkit/locales/jar.mn 使用基本路径,以便 .jar
文件位于 localization
目录下,这是一个 由 mozbuild 解析的特殊目录。
它也根据变量 @AB_CD@
传递的值命名,通常是语言环境。请注意,文件顶部使用预处理器指令 #filter substitution
将变量替换为值
#filter substitution
...
[localization] @AB_CD@.jar:
crashreporter (%crashreporter/**/*.ftl)
toolkit (%toolkit/**/*.ftl)
源路径前面的百分号指定要作为源的目标语言环境。默认情况下,这是 en-US
。在此特定示例中,将 /toolkit/locales/en-US 作为目标。否则,如果构建本地化版本,则会读取来自备用本地化源代码树 /l10n/<locale>/toolkit/
的文件。**/*.ftl
中的通配符告诉处理器安装 crashreporter
和 toolkit
目录及其子目录中的所有 Fluent 文件。
注册 Chrome¶
Chrome 注册 指令以行首的百分号 (%
) 标记,并且必须是 JAR 文件定义的一部分。任何其他百分号将替换为正在打包的 JAR 文件的相应相对 URL。
清单文件有两个可能的位置。如果 chrome 正在构建到一个独立的应用程序中,则 jar.mn
处理器会在 JAR 文件本身旁边创建一个 <jarfilename>.manifest
。这是默认行为。
如果 moz.build
指定 USE_EXTENSION_MANIFEST = 1
,则 jar.mn
处理器会创建一个适合将 chrome 注册为扩展的单个 chrome.manifest
文件。
示例¶
文件 浏览器/主题/加载项/jar.mn 注册了一个名为 builtin-themes
的 resource
chrome 包。其源文件位于 %content/builtin-themes/
browser.jar:
% resource builtin-themes %content/builtin-themes/
content/builtin-themes/alpenglow (alpenglow/*.svg)
content/builtin-themes/alpenglow/manifest.json (alpenglow/manifest.json)
请注意其他文件如何使用定义的 builtin-themes
资源声明安装目标。因此,主题 Alpenglow
的 SVG 文件 preview.svg
可以使用资源 URL resource://builtin-themes/alpenglow/preview.svg
加载,以便在 about:addons
上提供主题预览。有关 resource
和其他清单文件指令的更多详细信息,请参见 Chrome 注册。