如何使用Web Extension为Firefox Android创建引导扩展

时间:2018-09-25 13:17:02

标签: android firefox firefox-addon

此问题来自将扩展名(https://github.com/mozilla-services/screenshots)从Firefox桌面移植到Firefox android。

为了使问题简单易懂,似乎引导程序不起作用,我也无法弄清楚。我通过简单的网络扩展(https://github.com/mozilla/example-addon-repo.git

总结了以下问题

如何将以上扩展名转换为Firefox android的引导程序?

下面是我的尝试:

  1. 成功为Firefox android设置了基于Ubuntu 18.04的构建环境,成功生成了“ fennec-62.0.2.en-US.android-arm.apk”,并且可以正常工作(在三星n9500设备上进行测试)
  2. 源代码是从'https://github.com/mozilla/gecko-dev.git'复制而来的,我将在commit#b77a94a2e915faeeaffa7c22932aff3e1bba848e上启用启用
  3. 更改为扩展名上方的引导程序(但失败了),下面是我的补丁程序。

From 90bd6c2e31be3c6f7bca07f3ad5449018a36a272 Mon Sep 17 00:00:00 2001
From: Your Name <you@example.com>
Date: Tue, 25 Sep 2018 18:05:33 +0800
Subject: [PATCH] pageshoting enabling

Signed-off-by: Your Name <you@example.com>
---
 mobile/android/extensions/moz.build                |  8 +++---
 mobile/android/extensions/pageshot/bootstrap.js    | 22 +++++++++++++++
 mobile/android/extensions/pageshot/install.rdf     | 31 ++++++++++++++++++++++
 mobile/android/extensions/pageshot/moz.build       | 26 ++++++++++++++++++
 .../webextension/_locales/en-US/messages.json      | 14 ++++++++++
 .../webextension/_locales/fr/messages.json         | 14 ++++++++++
 .../pageshot/webextension/img/firefox-logo.svg     |  1 +
 .../extensions/pageshot/webextension/main.js       | 10 +++++++
 .../extensions/pageshot/webextension/manifest.json | 29 ++++++++++++++++++++
 9 files changed, 150 insertions(+), 5 deletions(-)
 create mode 100644 mobile/android/extensions/pageshot/bootstrap.js
 create mode 100644 mobile/android/extensions/pageshot/install.rdf
 create mode 100644 mobile/android/extensions/pageshot/moz.build
 create mode 100644 mobile/android/extensions/pageshot/webextension/_locales/en-US/messages.json
 create mode 100644 mobile/android/extensions/pageshot/webextension/_locales/fr/messages.json
 create mode 100644 mobile/android/extensions/pageshot/webextension/img/firefox-logo.svg
 create mode 100644 mobile/android/extensions/pageshot/webextension/main.js
 create mode 100644 mobile/android/extensions/pageshot/webextension/manifest.json

diff --git a/mobile/android/extensions/moz.build b/mobile/android/extensions/moz.build
index 89c414a..17446d3 100644
--- a/mobile/android/extensions/moz.build
+++ b/mobile/android/extensions/moz.build
@@ -7,8 +7,6 @@
 with Files('**'):
     BUG_COMPONENT = ('Firefox for Android', 'General')
 
-# Only include the following system add-ons if building Nightly
-if CONFIG['NIGHTLY_BUILD']:
-    DIRS += [
-        'gws-and-facebook-chrome-spoof',
-    ]
+DIRS += [
+    'pageshot',
+]
diff --git a/mobile/android/extensions/pageshot/bootstrap.js b/mobile/android/extensions/pageshot/bootstrap.js
new file mode 100644
index 0000000..acf1f27
--- /dev/null
+++ b/mobile/android/extensions/pageshot/bootstrap.js
@@ -0,0 +1,22 @@
+"use strict";
+/* eslint no-implicit-globals:off, no-console:off */
+/* exported startup, shutdown, install, uninstall */
+
+function startup({webExtension}) {
+  webExtension.startup().then(() => {
+    console.log("Example WebExtension started!");
+    return Promise.resolved();
+  }).catch(() => {
+    console.error("Example WebExtension startup failed!");
+  });
+}
+
+function shutdown() {
+}
+
+function install() {
+
+}
+
+function uninstall() {
+}
diff --git a/mobile/android/extensions/pageshot/install.rdf b/mobile/android/extensions/pageshot/install.rdf
new file mode 100644
index 0000000..81cf3a0
--- /dev/null
+++ b/mobile/android/extensions/pageshot/install.rdf
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+   - License, v. 2.0. If a copy of the MPL was not distributed with this
+   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+     xmlns:em="http://www.mozilla.org/2004/em-rdf#">
+
+  <Description about="urn:mozilla:install-manifest">
+    <em:id>pageshot@mozilla.org</em:id>
+    <em:version>0.0.1</em:version>
+    <em:type>2</em:type>
+    <em:bootstrap>true</em:bootstrap>
+    <em:multiprocessCompatible>true</em:multiprocessCompatible>
+    <em:hasEmbeddedWebExtension>true</em:hasEmbeddedWebExtension>
+
+    <!-- Target Application this theme can install into,
+        with minimum and maximum supported versions. -->
+    <em:targetApplication>
+      <Description>
+        <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
+        <em:minVersion>48.0</em:minVersion>
+        <em:maxVersion>100.*</em:maxVersion>
+      </Description>
+    </em:targetApplication>
+
+    <!-- Front End MetaData -->
+    <em:name>Example Add-on</em:name>
+    <em:description>Example Add-on built from the example repository.</em:description>
+  </Description>
+</RDF>
diff --git a/mobile/android/extensions/pageshot/moz.build b/mobile/android/extensions/pageshot/moz.build
new file mode 100644
index 0000000..36a05e4
--- /dev/null
+++ b/mobile/android/extensions/pageshot/moz.build
@@ -0,0 +1,26 @@
+DEFINES['MOZ_APP_VERSION'] = CONFIG['MOZ_APP_VERSION']
+DEFINES['MOZ_APP_MAXVERSION'] = CONFIG['MOZ_APP_MAXVERSION']
+
+FINAL_TARGET_FILES.features['pageshot@mozilla.org'] += [
+  'bootstrap.js'
+]
+
+FINAL_TARGET_FILES.features['pageshot@mozilla.org'] += [
+  'install.rdf'
+]
+
+
+FINAL_TARGET_FILES.features['pageshot@mozilla.org']['webextension'] += [
+  'webextension/main.js',
+  'webextension/manifest.json'
+]
+
+FINAL_TARGET_FILES.features['pageshot@mozilla.org']['webextension']['img'] += [
+  'webextension/img/firefox-logo.svg'
+]
+
+
+
+FINAL_TARGET_FILES.features['pageshot@mozilla.org']['webextension']['_locales']['en-US'] += [
+  'webextension/_locales/en-US/messages.json'
+]
diff --git a/mobile/android/extensions/pageshot/webextension/_locales/en-US/messages.json b/mobile/android/extensions/pageshot/webextension/_locales/en-US/messages.json
new file mode 100644
index 0000000..7a19e94
--- /dev/null
+++ b/mobile/android/extensions/pageshot/webextension/_locales/en-US/messages.json
@@ -0,0 +1,14 @@
+{
+  "extensionName": {
+    "message": "Example Add-on",
+    "description": "Name of the extension"
+  },
+  "extensionDescription": {
+    "message": "Example Add-on built from the example repository",
+    "description": "Description of the extension."
+  },
+  "buttonTitle": {
+    "message": "Visit Mozilla",
+    "description": "Description shown on the toolbar when hovered. DO NOT localise 'Mozilla'."
+  }
+}
diff --git a/mobile/android/extensions/pageshot/webextension/_locales/fr/messages.json b/mobile/android/extensions/pageshot/webextension/_locales/fr/messages.json
new file mode 100644
index 0000000..1b2065f
--- /dev/null
+++ b/mobile/android/extensions/pageshot/webextension/_locales/fr/messages.json
@@ -0,0 +1,14 @@
+{
+  "extensionName": {
+    "message": "Exemple d'extension",
+    "description": "Name of the extension"
+  },
+  "extensionDescription": {
+    "message": "Exemple d'extension générée à partir du dépôt de test",
+    "description": "Description of the extension."
+  },
+  "buttonTitle": {
+    "message": "Visitez Mozilla",
+    "description": "Description shown on the toolbar when hovered. DO NOT localise 'Mozilla'."
+  }
+}
diff --git a/mobile/android/extensions/pageshot/webextension/img/firefox-logo.svg b/mobile/android/extensions/pageshot/webextension/img/firefox-logo.svg
new file mode 100644
index 0000000..8a1a9d2
--- /dev/null
+++ b/mobile/android/extensions/pageshot/webextension/img/firefox-logo.svg
@@ -0,0 +1 @@

\ No newline at end of file
diff --git a/mobile/android/extensions/pageshot/webextension/main.js b/mobile/android/extensions/pageshot/webextension/main.js
new file mode 100644
index 0000000..c411e72
--- /dev/null
+++ b/mobile/android/extensions/pageshot/webextension/main.js
@@ -0,0 +1,10 @@
+"use strict";
+
+/* global chrome */
+
+chrome.browserAction.onClicked.addListener(() => {
+  chrome.tabs.create({
+    active: true,
+    url: "https://www.mozilla.org"
+  });
+});
diff --git a/mobile/android/extensions/pageshot/webextension/manifest.json b/mobile/android/extensions/pageshot/webextension/manifest.json
new file mode 100644
index 0000000..dd4d4f1
--- /dev/null
+++ b/mobile/android/extensions/pageshot/webextension/manifest.json
@@ -0,0 +1,29 @@
+{
+  "applications": {
+    "gecko": {
+      "id": "pageshot@mozilla.org",
+        "strict_min_version": "48.0",
+        "strict_max_version": "100.*"
+    }
+  },
+  "background": {
+    "scripts": ["main.js"]
+  },
+  "browser_action": {
+    "browser_style": true,
+    "default_icon": "img/firefox-logo.svg",
+    "default_title": "__MSG_buttonTitle__"
+  },
+
+  "default_locale": "en-US",
+
+  "description": "__MSG_extensionDescription__",
+
+  "manifest_version": 2,
+
+  "name": "Example Add-on",
+
+  "permissions": [],
+
+  "version": "0.0.1"
+}
-- 
2.7.4

0 个答案:

没有答案