测试您的原生 Android 应用

对于网页开发者来说,这是一个激动人心的时刻!

多年来,应用一直在蚕食网页,而现在我们看到网页正在吞噬操作系统。Mozilla 正在努力创建一个世界,在这个世界里,您可以编写基于标准的、开放式网页应用。这些应用应该像原生应用一样安装,并且在任何平台上都能正常运行。

Packaged App on Firefox OS

随着新的 Firefox for Android 的发布,我们现在将自动将您的开放式网页应用转换为原生 Android 应用。

Packaged App on Android

但是,如何在将您的应用提交到 Marketplace 之前在 Android 上对其进行测试呢?

我们提供了一个新的工具添加到您的工具集中!

介绍 mozilla-apk-cli

如果您安装了 NodeJS 以及 zip/unzip,那么您可以使用我们新的命令行工具来构建可测试的 .apk 安装程序。

mozilla-apk-cli 是一个命令行应用程序,因此下面的命令将在终端应用程序中运行。

设置非常简单

npm install mozilla-apk-cli

这将在 ./node_modules/.bin/ 中为您提供一个新的程序 mozilla-apk-cli

您也可以使用以下命令全局安装

npm install -g mozilla-apk-cli

我假设您将 ./node_modules/.bin 放入了您的路径中,或者全局安装了它。

开放式网页应用有三种形式,CLI 可以构建它们全部

  • 托管应用
  • 打包应用 zip 文件
  • 从源代码目录构建的打包应用

假设您正在开发一个 打包应用
您的目录结构如下所示

www/
   index.html
   manifest.webapp
   css/
       style.css
   i/
     icon-256.png
     icon-128.png
     icon-60.png
   js/
      main.js

您可以使用以下命令构建一个可测试的 Android 应用

mozilla-apk-cli ./www my_test_app.apk

这将生成 my_test_app.apk,您可以在以下两种方式中将它侧载到您的手机中

  • 将其放在网上,从您的 Android 设备上的浏览器下载/安装
  • 使用 adb 安装应用
adb install my_test_app.apk

在本博文中,我们不会介绍如何设置 adb,但 Android SDK 网站 提供了一些有关 adb 的优秀 资源

adb using USB

分发

请不要分发此测试 .apk 文件。!!!

如果您更改了应用,重新构建并将其发送给您的用户,更新将无法安装。使用 Android 的应用管理器,对于每个新的应用版本,您必须在安装第二个版本之前删除测试应用。

mozilla-apk-cli 用于在本地测试和调试您的新 Android 应用。当您对应用感到满意时,您应该通过 Marketplace从您的网站(通过安装页面)来分发开放式网页应用。

您无需直接管理 .apk 文件。就像您无需管理 Mac OS X、Windows 或 Linux 构建您的开放式网页应用一样。

我们已将原生 Android 支持深度嵌入到 Firefox for Android 运行时中。当用户选择安装开放式网页应用时,原生应用将使用生产版 APK 工厂服务按需合成。这适用于您从任何网站或 Marketplace 安装开放式网页应用时。

CLI 如何工作?

回到我们的新测试工具。该工具是 APK 工厂服务 的前端客户端。它将您的代码发送到该服务的审核者实例。审核者不同于生产发布环境。

该服务会合成一个原生 Android 应用,使用 Android SDK 构建它,最后用开发证书对其进行签名。如前所述,此合成的 APK 是可调试的不应分发

该服务的好处在于,您无需在本地计算机上安装 Java、ant、Android SDK 和其他 Android 开发工具。您可以专注于网页,并使用任何方便的设备进行测试。

托管和打包 Zip 文件

我们刚刚介绍了如何测试打包应用(它是一个源代码目录)。现在让我们看看其他两种模式。如果您已经将打包应用构建成了一个 .zip 文件,请使用

mozilla-apk-cli ./my_app.zip my_test_app.apk

如果您正在构建托管应用,请使用

mozilla-apk-cli http://localhost:8080/ my_test_app.apk

没有 Android 设备?不要担心

也许您会说:“这听起来很不错,但我没有 Android 设备……我该怎么进行测试呢?”

好的,我们已经自动实现了这一点。

一方面,不用担心。 移动优先开发 教会我们的一点是,您永远无法拥有足够多的测试资源来覆盖所有设备和平台。网页是关于开放标准和渐进式增强的。

您的网页应用将作为一个原生 Android 应用更加完善,它将以用户期望的方式融入操作系统。

它不使用原生 UI 小部件,也不使用类似的东西,因此不需要进行广泛的测试。渲染引擎是已经安装的 Firefox for Android 中的 gecko。

另一方面……开放标准和兼容性是一个很好的故事,但作为网页开发者,我们知道有些东西往往会有平台特有的错误。我建议对支持的平台进行传统的评级,如果 Android 是一个优先事项,那么一定要购买一个设备,安装 Firefox for Android,并测试您的应用。

随着我们让原生体验在各个平台上(Android、Mac OS X 等)自动实现,我们随时欢迎您的反馈。您对此有什么想法?

mozilla-apk-cli 资源

CLI 工具的源代码位于 GitHub 上。如果您需要一个示例打包应用,这里有一个演示版本。APK 工厂服务的源代码也位于 GitHub 上

加入我们的 频道,分享您的想法、反馈和问题,并请在 Marketplace 集成 中提交错误报告。

感谢 Wil Clouser 提供插图。

关于 Austin King

西雅图非教条艺术家/程序员类型的人类。应用工程团队的流氓网页开发者。拼写检查是留给弱者的。

更多 Austin King 的文章……

关于 Robert Nyman [名誉编辑]

Mozilla Hacks 的技术布道者和编辑。发表演讲并撰写有关 HTML5、JavaScript 和开放式网页的博客文章。Robert 是 HTML5 和开放式网页的坚定支持者,自 1999 年以来一直在从事网页前端开发工作 - 在瑞典和纽约市。他还定期在 http://robertnyman.com 上写博客,喜欢旅行和结识新朋友。

更多 Robert Nyman [名誉编辑] 的文章……


17 条评论

  1. Sekander

    请缩短“mozilla-apk-cli”的名称。
    太懒了,不想打字 :P

    2014 年 6 月 12 日 上午 2:41

    1. Austin King

      抱歉 :)根据您的 Shell,您可以尝试以下操作

      alias apk=”mozilla-apk-cli”

      2014 年 6 月 12 日 上午 9:40

  2. Antoine Turmel

    如果不能分发 .apk 文件,那创建它的意义何在?
    我的意思是,使用 Firefox for Android 已经可以测试您自己的应用了……

    2014 年 6 月 12 日 上午 2:48

    1. Fawad Hassan

      简单来说,Android 用户可以通过 Firefox for Android 从 “Firefox Marketplace” 获取您的开放式网页应用,并且提交到该 Marketplace 时无需创建 .apk 文件。您需要遵循与提交 Firefox OS 应用相同的流程。

      2014 年 6 月 12 日 上午 3:18

    2. Austin King

      Fawad Hassan 和 David Bruant 对这个问题的回答非常棒。

      1) mozilla-apk-cli 是一个开发和测试工具

      2) 您可以通过 Mozilla Marketplace 或其他 Marketplace 或您自己的网站上的安装页面来分发您的 Android 应用。

      我们构建 APK 工厂是为了将其作为一个开放式服务,为整个网页提供支持,而不仅仅是 Mozilla Marketplace。它通过构建安装页面时使用的 mozApps API 运作。

      2014 年 6 月 12 日 上午 9:32

  3. David Bruant

    “mozilla-apk-cli 仅用于在本地测试和调试您的新 Android 应用。当您对应用感到满意时,您应该通过 Marketplace 或从您的网站(通过安装页面)来分发开放式网页应用。”
    => Android 用户习惯在 Google Play 中查找应用。这也是人们发现 Android 应用的地方。有没有办法生成可以在该渠道分发的应用?

    “我们已将原生 Android 支持深度嵌入到 Firefox for Android 运行时中。当用户选择安装开放式网页应用时,原生应用将使用生产版 APK 工厂服务按需合成。这适用于您从任何网站或 Marketplace 安装开放式网页应用时。”
    => 这适用于除 Firefox for Android 之外的其他浏览器吗?根据各种资料,Firefox for Android 的市场份额在 2%-3% 之间。当我们希望用户下载他们的应用时,期望他们使用这款移动浏览器似乎不现实。

    使用 mozilla-apk-cli 进行更新似乎很棘手。合成的应用如何更新?

    2014 年 6 月 12 日 上午 2:58

    1. Austin King

      > 使用 mozilla-apk-cli 进行更新似乎很棘手。合成的应用如何更新?

      Firefox for Android 每天都会进行一次 ping 操作以检查更新。如果您的清单发生更改,则表示该应用程序需要更新。用户可以选择更新您的应用程序。

      2014 年 6 月 12 日 上午 09:02

  4. Thomas

    所以这仅适用于为 Firefox for Android 编写的应用程序。纯粹的 Firefox OS 应用程序(例如,特权应用程序)访问 sdcard 等,不会像这样工作吗?

    顺便说一句,我的应用程序在使用打包的 zip 格式作为输入时,manifest.webapp 会出现问题 - 它会报错 “参数 'url' 必须是字符串,而不是未定义”。但如果我不压缩,而是直接在目录中提供应用程序,一切正常。

    2014 年 6 月 12 日 上午 05:49

  5. Robert

    我希望这个 apk 生成在用户手中惨败。这只会鼓励人们禁用他们设备的“从其他来源安装”保护,然后成为鼓励您从互联网安装随机 apk 的恶意软件网站/广告的目标。

    我理解为了让 web 应用程序在系统上易于识别为与 Firefox 不同的东西,需要一个 apk,但我认为解决方法是开发 Android 上的新安全 API 来实现这一点,也许可以向 Google 建议,或者为 AOSP 做出贡献。

    2014 年 6 月 12 日 上午 06:36

    1. Luke

      您是指 Android 中的“从非市场来源安装”选项吗?具有讽刺意味的是,Google Play 可能是 Android 中最大的安全漏洞 - 考虑到任何拥有被盗 Google 帐户的人都可以安装任何应用程序 (http://nakedsecurity.sophos.com/2011/02/04/android-market-web-store-backdoor-phone-hackers/)

      此外,Google Play 显然没有 Mozilla 拥有的经过人工审查的系统,导致不时出现伪造/恶意软件应用程序:http://www.infoworld.com/d/security/report-android-malware-and-spyware-apps-spike-in-the-google-play-store-236702

      FirefoxOS 应用程序的安装应该对用户透明 - 您只需从 Firefox 的市场安装即可 :)

      2014 年 6 月 12 日 上午 07:22

      1. Robert

        不,我的意思是人们在 Android 上启用“允许第三方应用程序”安全设置,因为他们信任 Firefox 在他们从 Marketplace 安装应用程序时请求该设置,然后访问带有恶意软件的网站或通过广告安装该软件,因为他们正在使用 Firefox。

        这增加了 Firefox 可信赖安装外部 apk 文件的感知,然后网站利用这种用户感知来谋取利益。

        抱歉,Firefox 要求人们禁用 Android 保护,让我不再推荐 Firefox for Android。

        2014 年 6 月 12 日 上午 09:04

        1. Bill Walker

          嗨,Robert,

          我们与您一样,对我们在 Android 上不得不做出的安全与开放之间的权衡感到沮丧,我相信亚马逊也一样。例如,如果我们可以要求人们信任他们从 marketplace.firefox.com 而不是从所有来源安装的应用程序,那就很酷了。不幸的是,我认为我们没有这个选项。

          我们与亚马逊等第三方原生 Android 应用商店一样,选择要求用户启用第三方应用程序设置,因为我们认为我们生态系统对用户的益处超过了这样做的风险。我们相信我们的安全模型以及对 web 应用程序的严格权限控制意味着用户在其 Android 设备上安装的 Firefox Marketplace 应用程序将是安全的。

          2014 年 6 月 12 日 上午 10:05

  6. Mte90

    这种解决方案可以使用远程调试吗?

    2014 年 6 月 12 日 上午 06:50

    1. Austin King

      是的,此 CLI 工具生成的 APK 可进行远程调试。

      2014 年 6 月 12 日 上午 08:57

  7. Austin King

    > 所以这仅适用于为 Firefox for Android 编写的应用程序。纯粹的 Firefox OS 应用程序(例如,特权应用程序)访问 sdcard 等,不会像这样工作吗?

    “纯粹的 Firefox OS 应用程序”最终应该可以正常工作。

    这是关于基于标准的 web 开发,而不是关于为特定平台开发应用程序。

    我们正在努力将所有 web 意图和 Web API 与其原生 Android 对应项相匹配。

    2014 年 6 月 12 日 上午 08:53

    1. Thomas

      感谢您的答复!

      所以目前 navigator.getDeviceStorage(“sdcard”) 不受支持,但计划在未来实现?是否可以估计开发人员可以使用此功能还需要多长时间?

      2014 年 6 月 12 日 上午 09:08

      1. Myk Melez

        Bug 886627 跟踪启用设备存储 API 的工作,目前标记为“跟踪 Fennec 33”,这意味着我们预计将在 Fennec 的该版本中修复它(尽管不能保证)。

        2014 年 6 月 12 日 上午 09:55

本文评论已关闭。