26

我想将我的 firefox 扩展打包为 xpi 文件。我尝试将其添加到存档并将其命名为 filename.xpi

但是当我尝试在 Firefox 上安装它时,我收到“包损坏”消息。有什么办法可以创建一个有效的 xpi 文件吗?

我已经安装了 cygwin 并尝试执行 zip 命令来创建 xpi 文件。但是得到 zip 不是命令错误。

有人可以指导我完成它吗?

4

9 回答 9

29

如果您在 Windows 上(要安装 cygwin,看起来就像是这样),您可以使用 windows 内置工具:

  1. 选择扩展的内容(记住,不要选择外部文件夹)。
  2. 右键点击
  3. 发送至
  4. 压缩(压缩)文件夹

然后只需将 .zip 替换为文件名中的 .xpi

看起来您的问题在于正确完成第 1 点。仅选择扩展名的内容。不是包含它的文件夹。

所以基本上你的 zip 文件应该有以下结构:

my_extension.zip
  |- install.rdf
  |- chrome.manifest
  |- <chrome>

而不是这个结构:

my_extension.zip
  |- <my_extension>
       |- install.rdf
       |- chrome.manifest
       |- <chrome>
于 2013-10-08T11:35:59.273 回答
7

我今天遇到了同样的问题,发现错误是该插件显然没有被Mozilla签名,导致Firefox拒绝安装。直到最近,还可以通过在 中设置xpinstall.signatures.required为 false 来绕过此安全检查about:config。但是,从 Firefox 46 开始,签名是强制性的,不再提供旁路,请参阅https://blog.mozilla.org/addons/2016/01/22/add-on-signing-update/这意味着必须降级到以前的版本或使用非发布渠道版本来测试自己的插件:(

于 2016-02-25T12:44:04.097 回答
3

此外,这是我使用命令行 7z为 Firefox 打包扩展的方法:

cd /the/extension/folder/
7z a ../<extension_name>.xpi * -r

(其中“a”代表“添加/创建”,“-r”代表递归)

或者用我们刚刚编辑的文件更新扩展名:

cd /the/extension/folder/
7z u ../<extension_name>.xpi * -r

(“u”用于更新存档的内容)

于 2014-12-28T15:22:40.033 回答
2

使用 7z 打包扩展时,压缩成 .zip 然后重命名为 .xpi,不要压缩 i

于 2013-10-08T08:39:02.393 回答
2

两种方法,使用 GUI 7zFM.exe,或者命令行或批处理文件。

1.0)图形界面方法。假设 7-Zip 与 shell 集成一起安装,因此您会看到 7-Zip 显示在 Windows 资源管理器的上下文菜单(右键单击所选文件)中。

1.a) 进入您的附加组件的文件夹。

1.b) 选择要包含在 .xpi 中的所有文件和文件夹。假设您在任何子文件夹中都没有要忽略的文件。如果这样做,您可能需要使用命令行选项。

1.c) 右键单击​​所选文件列表,找到7z图标,选择Add to archive...选项。

1.d) 弹出一个对话框。编辑 zip 文件的位置和名称,将 .zip 更改为 .xpi 等。

1.e) 请注意,如果您在同一文件夹中创建 .xpi,以后不要重新归档它,因为您的附加组件会严重失败。您绝不希望 .xpi 意外地出现在您的 .xpi 中。我通常只是在父文件夹中创建它,通过添加..\到文件名的开头,例如 ..\addon-1.2.3-fx.xpi

1.f) 7-Zip 有很多强大的压缩选项,并不是所有的 Firefox 都能处理。选择 Firefox 能够处理的设置。参考图片。

XPI 创建的 7-Zip 设置

2.0)命令行方法。假设您在 Windows 中,并且知道如何打开命令提示符、更改驱动器和目录(也称为文件夹)。

2.a)CD到您的附加目录。

2.b) 使用最基本的 7-Zip 命令行。

"C:\Program Files\7-Zip\7z.exe" a -tzip addon-1.2.3-fx.xpi *

2.c) 您可以通过找到与上述 GUI 对应的确切命令行选项来获得较小的文件,即:

"C:\Program Files\7-Zip\7z.exe" a -tzip -mx=9 -mm=Deflate -mfb=258 -mmt=8 "addon-1.2.3-fx.xpi" *

请注意,使用 Deflate 压缩方法时没有 Dictionary size = 32kb 选项。否则,选项按顺序排列并对应于 GUI。

|-----------------------|---------|--------------|
| Option / Parameter    | GUI     | Command line |
|-----------------------|---------|--------------|
| Archive format        | zip     | -tzip        |
| Compression level     | Ultra   | -mx=9        |
| Compression method    | Deflate | -mm=Deflate  |
| Dictionary size       | 32 KB   | (none)       |
| Word size             | 258     | -mfb=258     |
| Number of CPU threads | 8       | -mmt=8       |
|-----------------------|---------|--------------|
| Additional Parameters |         |              |
|-----------------------|---------|--------------|
| Recurse into Folders  | (none)  | -r           |
| Multiple passes       | (none)  | -mpass=15    |
| Preserve Timestamps   | (none)  | -mtc=on      |
| Ignore files in list  |         | -x@{ignore}  |
|-----------------------|---------|--------------|

笔记:

i) 多线程选项 (-mmt=8) 特定于我的系统,它有 8 个内核。如果您有更少的核心等,您需要将其降低到 6 或 4 或 2 或 1(即删除选项),或者如果您有更多的核心,则需要增加。对于一个小的扩展,这两种方式都不会产生太大的影响。

ii) 递归到文件夹的选项可能是也可能不是默认选项,因此指定此选项应确保正确递归。

iii) preserve windows timestamps(创建、访问、修改)选项应默认为on反正,因此可能不需要。

iv) 该ignore files in list选项是具有文件列表和您希望排除的文件通配符的任何文件。

2.d)高级主题#1:忽略文件列表(示例)

|----------------|------------------------------------|
| What to Ignore | Why to Ignore                      |
|----------------|------------------------------------|
| TODO.txt       | Informal reminders of code to fix. |
| *.xpi          | In case you forget warning above!  |
| .ignore        | Ignore the ignore file list.       |
| ignore.txt     | Same thing, if you used this name. |
|----------------|------------------------------------|

"C:\Program Files\7-Zip\7z.exe" a -tzip -mx9 -mm=Deflate -mfb=258 -mmt=8 -mpass=15 -mtc=on "addon-1.2.3-fx.xpi" * -x@ignore.txt

2.e)高级主题#2:批处理文件(Windows CMD.EXE),假设是相当新的窗口,即来自 21 世纪。这可以是简单而严格的,也可以是复杂而灵活的,只要您愿意。一般的平衡是假设您将Command Prompt在您正在处理的附加组件的顶级目录中,并且您已智能地将该目录命名为具有与 .xpi 文件相同的基本名称,例如D:\dev\addon-1.2.3-fx用于addon-1.2.3-fx.xpi添加的目录- 在 xpi 上。此批处理文件做出此假设,并动态计算出用于 .xpi 的正确基本名称。

@ECHO OFF
REM - xpi.bat - batch file to create Mozilla add-on xpi using 7-Zip

REM - This finds the folder name, and discards the rest of the full path, saves in an environment variable.
FOR %%* IN (.) DO SET XPI=%%~nx*

REM - Uncomment the DEL line, or delete .xpi file manually, if it gets corrupted or includes some other junk by accident.
REM DEL "%XPI%.xpi"

REM - Command line which does everything the GUI does, but also lets you run several passes for the smallest .xpi possible.
"C:\Program Files\7-Zip\7z.exe" a -tzip -r -mx=9 -mm=Deflate -mfb=258 -mmt=8 -mpass=15 -mtc=on "%XPI%.xpi" * -x@ignore.txt
REM - Cleanup the environment variable.
SET XPI=
于 2016-05-14T04:03:56.993 回答
1

使用 7z 时按照以下操作仅选择内部内容而不选择外部文件夹。将文件名输入为filename.xpi ,然后在压缩时出现的提示中选择归档格式为zip 。您会发现创建了一个有效的 xpi 文件。使用创建的 xpi 在 Firefox 上安装扩展。有用!

于 2015-02-19T12:52:12.613 回答
1

只需压缩 my_extension 文件夹中的所有文件和文件夹,并将生成的压缩文件的扩展名更改为 my_extension.xpi

/my_extension
  |- defaults/
  |- locale/
  |- resources/
  |- install.rdf
  |- ... (other files and folders)

安装从 my_extension 文件夹的压缩文件创建的 xpi 文件将导致错误为
“无法安装此插件,因为它似乎已损坏。” 错误

于 2015-09-01T00:32:12.987 回答
1

我尝试自己以多种方式构建一个 zip,因为我确信我做错了什么,因为我得到的只是“包损坏”的东西。好吧..不再是了,我什至不需要从加载临时加载项中加载它(现在我将 xpi 文件从桌面拖放到 Waterfox 上,然后将其安装为合法 xpi 文件!我该怎么做?因为我尝试自己首先在加载临时加载项(url:about:debugging#addons)xpi文件中加载它的github东西,使用user314159使用的方法和使用7zip的.bat文件方法。

加载后,您应该阅读类似于以下内容的内容:

扩展 ID 86257e65ca311ee368ffcee50598ce25733a049b@temporary-addon

那么您应该做的就是在 manifest.json 中添加修改“应用程序”:

"applications": {
    "gecko": {
      "strict_min_version": "54.0a1",
      "id": "86257e65ca311ee368ffcee50598ce25733a049b@temporary-addon"
    }
  },

在此推送删除以卸载临时插件之后,您应该像以前一样再次构建 xpi 现在是一个普通的 xpi 文件签名您可以正常安装的内容!(这是无需修改任何其他内容的作品)

我使用 Waterfox x64 我似乎是 Firefox 的问题

答案是您应该在集线器上上传您的扩展,然后使用 mozilla 签名 API https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/Distribution

于 2019-04-23T07:15:32.820 回答
0
  1. 创建文件config.js
  2. 将代码插入config.js
//
try {
Components.utils.import("resource://gre/modules/addons/XPIProvider.jsm", {})
.eval("SIGNED_TYPES.clear()");
}
catch(ex) {}
  1. 移动config.js到应用程序工作文件夹,例如:C:\Program Files\Mozilla Firefox\

  2. 创建config-prefs.js代码并将其写入:

pref("general.config.obscure_value", 0);
pref("general.config.filename", "config.js");
  1. 地点config-pres.js_C:\Program Files\Mozilla Firefox\defaults\pref\

  2. 重启火狐

  3. 看结果

在此处输入图像描述

于 2019-06-30T17:31:16.327 回答