【问题标题】:How to create xpi file with 7Zip?如何使用 7Zip 创建 xpi 文件?
【发布时间】:2013-10-14 23:02:18
【问题描述】:

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

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

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

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

【问题讨论】:

标签: firefox-addon xpi


【解决方案1】:

如果你在 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>

【讨论】:

  • 感谢您的回复先生...我尝试了相同的方法,但是在 Firefox 上安装它时出现“Package Invalid”错误...所以我在我的主机中获取了 shell 访问权限并使用 zip 命令进行了尝试在我的 linux 服务器中,它创建了在 firefox 中运行良好的 xpi...
  • 我过去收到“损坏”消息,但那是因为我没有直接在 zip 文件中包含内容。否则我不确定出了什么问题。
  • @user2301765。会不会是你在使用 addon-sdk?
  • 要在 OS X 上执行此操作,您可以选择 Finder 中的所有文件并单击“压缩 X 项目”,这将生成一个“Archive.zip”
  • 我不明白为什么这篇文章被检查为“已解决”?!此方法不适用于 Firefox 60.*.* 和最新版本
【解决方案2】:

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

【讨论】:

    【解决方案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" 用于更新存档内容)

    【讨论】:

    • 好把戏。我可以在扩展文件夹中创建一个快捷方式来自动化压缩过程:C:\Windows\System32\cmd.exe /k cd "C:\Users\&lt;user&gt;\Documents\Extensions\&lt;extension.folder&gt;\" &amp; "%ProgramFiles%\7-Zip\7z.exe" a ".\&lt;extension.folder&gt;.xpi" -r chrome defaults chrome.manifest install.rdf。太糟糕了 7-Zip 错误 496 (sourceforge.net/p/sevenzip/bugs/496) 需要修复才能使其具有任何价值。
    • 实际上,更好的快捷方式是%SystemRoot%\System32\cmd.exe /c cd "%USERPROFILE%\Documents\Extensions\&lt;extension.folder&gt;\" &amp; "%ProgramFiles%\7-Zip\7z.exe" a ".\&lt;extension.folder&gt;.xpi" -r chrome defaults chrome.manifest install.rdf。这使用了另外两个环境变量并使用了一个不会打开 cmd.exe 窗口的标志。
    • 因此,实际上,7-Zip 错误不适用于 Mozilla Thunderbird 38.5.1,这意味着该快捷方式可用于打包至少当前版本的 Thunderbird 的 Thunderbird 扩展!
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      两种方法,使用 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 能够处理的设置。参考图片。

      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 文件的基本名称,例如addon-1.2.3-fx.xpi 附加 xpi 的 D:\dev\addon-1.2.3-fx 目录。此批处理文件做出此假设,并动态计算出用于 .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=
      

      【讨论】:

      • 谢谢。刚刚更新了一个错字以更正-mx9,它应该有一个=,如-mx=9。添加了关于多线程-mmt=8 选项以及递归-r 选项的注释。这就是我成功打包用于测试、开发和发布的附加组件的方式,从 XUL、Bootstrap/Restartless/cfm、到 SDK/jpm,甚至使用 WebExtensions/web-ext。有时这些工具会对元文件做一些奇怪的事情,你需要手动修改和重新打包。
      【解决方案6】:

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

      【讨论】:

        【解决方案7】:

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

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

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

        【讨论】:

          【解决方案8】:

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

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

          扩展程序 ID 86257e65ca311ee368ffcee50598ce25733a049b@temporary-addon

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

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

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

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

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

          【讨论】:

            【解决方案9】:
            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. 查看结果

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2022-08-10
              • 2020-06-23
              • 2011-01-08
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-04-10
              相关资源
              最近更新 更多