如何用7Zip创建xpi文件?

时间:2013-10-08 06:29:51

标签: firefox-addon xpi

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

但是当我尝试在firefox上安装它时,#34;包已损坏"信息。有什么办法可以创建一个有效的xpi文件吗?

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

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

9 个答案:

答案 0 :(得分:24)

如果你在Windows上(安装cygwin就像你一样),你可以使用内置工具的窗口:

  1. 选择扩展程序的内容(请记住,不要选择外部文件夹)。
  2. 右键单击
  3. 发送至
  4. 压缩(压缩)文件夹
  5. 然后在文件名

    中替换.zip .xpi

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

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

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

    而不是这个结构:

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

答案 1 :(得分:4)

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

答案 2 :(得分:2)

此外,以下是我使用命令行 7z 打包Firefox的扩展程序:

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

(其中'a'代表“add / create”和“-r”代表递归)

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

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

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

答案 3 :(得分:2)

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

1.0) GUI方法。假设7-Zip安装了shell集成,因此您可以在Windows资源管理器的上下文菜单(右键单击所选文件)中看到7-Zip。

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能够处理的设置。参考图片。

7-Zip Settings for XPI Creation

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

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 Compression方法时没有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附加xpi的addon-1.2.3-fx.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=

答案 4 :(得分:1)

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

答案 5 :(得分:1)

使用7z时,请执行以下操作 仅选择内部内容而不选择外部文件夹。 输入文件名为 filename.xpi ,并在压缩时出现的提示中选择存档格式为 zip 。 您将找到创建的有效xpi文件。 使用创建的xpi在firefox上安装扩展。 它有效!

答案 6 :(得分:0)

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

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

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

答案 7 :(得分:0)

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

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

扩展名ID     86257e65ca311ee368ffcee50598ce25733a049b @ temporary-addon

然后您要做的就是在manifest.json中添加修改“应用程序”的内容:

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

在按下 Remove (卸载)以卸载临时加载项之后,您应该像以前一样再次构建xpi 现在是一个普通的xpi文件签名,可以正常安装了! (这里的作品无需修改其他内容)

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

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

答案 8 :(得分: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. 重新启动Firefox

  3. 查看结果

enter image description here