【问题标题】:Installing unsigned XPIs in Firefox for Android version 42 or newer在 Firefox for Android 42 或更高版本中安装未签名的 XPI
【发布时间】:2016-03-16 23:48:04
【问题描述】:

我正在尝试重新开发一个旧项目,它是我正在开发的 Firefox for Android 的扩展。我有两部手机,一部是私人的,一部是我的工作。在我的我有一个旧版本的 Firefox (40)。它的工作方式与以前完全相同。但是,在我工作手机的升级版(Firefox 46)中,我无法安装.xpi。我总是看到带有文本“Firefox 阻止在您的设备上安装插件”的“被阻止的插件”弹出窗口:

[1

我有偏好xpinstall.signatures.required = false。但是,它似乎不起作用。我还启用了 Android 调试。我正在这样做:

#4 - This will copy the XPI to the phone SD card.
adb push $OUTPUT_DIR/$APP_NAME.xpi /sdcard/$APP_NAME.xpi;

#5 - This will start the Firefox App with the XPI to install
adb shell am start -a android.intent.action.VIEW -c android.intent.category.DEFAULT -d file:///mnt/sdcard/$APP_NAME.xpi -n $ANDROID_APP_ID/.App;

在旧版本的 Firefox 中它可以工作;在新的,没有。原因如下:

我们的第一个旨在使附加签名更容易 开发商。此 API 使您能够上传 XPI 并取回 如果它通过了所有的验证检查,则签名的附加组件。

还有:

Firefox 48:(从 Firefox 46 推出)。发行版和 Beta 版 Firefox for Desktop 将不允许未签名的扩展 已安装,没有覆盖。 Firefox for Android 将强制执行附加组件 签名,并将保留一个首选项 - 将在 未来版本——允许用户禁用签名强制。

但是我需要能够在没有验证的情况下进行编程:每次我引入一些小改动(即使只是为了检查某些东西是否有效)都必须签署一个扩展是非常有压力的。

我已经尝试安装 nightly 版本,因为它是为开发人员准备的。我将xpinstall.signatures.required 更改为false。但是,行为是相同的消息。

那么,我们应该如何以这种方式发展?这太不切实际了!

【问题讨论】:

  • 没有代码,这个问题可能跑题了:寻求调试帮助的问题(“为什么这段代码不能按我想要的方式工作?”)必须包括:A ) 期望的行为; B) 一个特定的问题或错误 C) 重现它所需的最短代码所有在问题本身 .没有明确的问题陈述的问题对其他读者没有用处。请参阅:How to create a Minimal, Complete, and Verifiable ExampleWhat topics can I ask about here?How to Ask
  • 你试过其他插件吗?您已从中删除签名的其他已知工作加载项?您是否查看过浏览器错误控制台以查看它的内容?如果有,它说明了什么?
  • 在 Firefox for Android 42 之前的所有版本中,我的所有旧扩展都会发生这种情况
  • 你有你的插件的 .xpi 或者一个简单的“hello world”示例(即minimal reproducible example),你可以给我们一个指针下载以进行测试(例如,包含文件和 .xpi 的 GitHub 存储库)。帮助解决问题的第一步是能够复制它。如果没有这样的下载,开始寻找解决方案的工作量就会大得多。
  • 在桌面浏览器中有 about:debugging 站点,它允许临时加载插件,但这似乎在 FF Beta/Nightly for Android 中不可用。

标签: android firefox firefox-addon firefox-addon-sdk


【解决方案1】:

我使用来自 MDN 的 Walkthrough 示例对此进行了测试。我正在运行 Firefox 48.0,发布版本。此答案假定xpinstall.signatures.requiredabout:config 中设置为false

如果直接导航到file:/// URL,则不会安装附加组件:
Firefox 似乎已通过直接导航到 file:/// 链接来禁用安装未签名的扩展(我尚未测试签名的扩展。)。因此,使用 adb shell am start -a android.intent.action.VIEW 方法使用意图使 Firefox 导航到 file:///mnt/sdcard/extentionFile.xpi URL 只会弹出“阻止加载项”对话框,没有允许选项,您已在其中包含屏幕截图你的问题。如果您手动输入 URL,此对话框是相同的。

无需签名即可安装插件:

您可以通过在 Firefox 中导航到包含 .xpi 文件的目录(例如 file:///mnt/sdcard/),然后单击/触摸该文件来加载未签名的扩展。

因此,对于adb,您将希望它打开目录,而不是尝试让 Firefox 直接打开文件。根据您的问题,您将要使用的 adb 命令将是:

adb shell am start -a android.intent.action.VIEW -c android.intent.category.DEFAULT -d file:///mnt/sdcard/ -n $ANDROID_APP_ID/.App;

然后,您需要在手机上选择$APP_NAME.xpi 文件。您将看到一个或多个屏幕,您可以通过这些屏幕单击安装插件。

这些是我在测试时捕获的屏幕。为了有一个空目录,我使用了/mnt/sdcard/testing/ 而不是/mnt/sdcard/

首先,我使用adb 导航到Firefox 中的目录(这是为了方便,您可以通过手机的用户界面导航到它)使用命令:

adb" shell am start -a android.intent.action.VIEW -c android.intent.category.DEFAULT -d file:///mnt/sdcard/testing/ -n org.mozilla.firefox/.App

这会导致 Firefox 打开目录 (file:///mnt/sdcard/testing/):

单击/选择您的 .xpi 文件。在这种情况下,即 view-source.xpi

将显示“已阻止加载项”对话框。此对话框将具有“允许”安装的选项。 [您可以通过在about:config 中将xpinstall.whitelist.required 设置为false 来跳过此对话框。但是,这仍然不允许您通过使用意图直接导航到文件或将其输入到 Firefox UI 来安装]:

然后,会出现一个对话框,询问您是否要安装未经验证的插件:

之后执行安装:

【讨论】:

猜你喜欢
  • 2015-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-03
  • 2018-02-18
  • 2022-11-21
  • 1970-01-01
  • 2018-04-05
相关资源
最近更新 更多