原文链接:https://developer.chrome.com/native-client/devguide/distributing
注意:已针对ChromeOS以外的平台公布了此处所述技术的弃用。
请访问我们的 迁移指南 了解详情。
发布你的应用
本文档介绍如何通过Chrome Web Store(CWS)在Web上分发Portable Native Client应用程序和Native Client应用程序 。
便携式Native Client
默认情况下,为网页启用Portable Native Client,因此不需要单独的分发步骤。使PNaCl成为Web应用程序的一部分就像嵌入指向pexe的清单文件一样简单。有关详细信息,请参阅 技术概述。
使用Web应用程序分发PNaCl模块的唯一约束是遵循同源策略。PNaCl清单和 pexe必须使用HTML从同一域提供,或者应使用CORS机制将它们安全地托管在不同的域上。
非便携式Native Client
NaCl模块仅允许通过Chrome Web Store(CWS)分发的应用程序 CWS要求已到位,以防止针对特定体系结构(例如,x86-32,x86-64或或更高版本)编译的Native Client可执行文件(nexe)的扩散臂)。
通常,通过Chrome Web Store分发应用程序的注意事项和指南也适用于包含NaCl模块的应用程序。以下是相关文档的几点建议:
在本文档中,我们将仅关注特定于包含NaCl模块的应用程序的分发问题。
Chrome应用
Chrome应用是Chrome网上应用店中托管的特殊zip文件(扩展名为.crx)。此文件包含所有应用程序部分:Chrome Web Store清单文件(manifest.json),图标和所有常规Native Client应用程序文件。有关创建Chrome应用的详细信息,请参阅Chrome应用。
减少用户下载包的大小
提示: 在多平台zip文件中打包应用程序可以显着降低应用程序的下载和存储要求。
如上所述,要将Chrome应用程序上传到CWS,您必须创建一个包含应用程序所需资源的zip文件,包括用于多种体系结构的.nexe文件(x86-64,x86-32和ARM)。在Chrome 28之前,当用户安装您的应用时,他们必须从CWS下载.crx文件,其中包含所有包含的.nexe文件。
从Chrome 28开始,Chrome网上应用店包含一项称为 多平台zip文件的功能。此功能允许您以减少用户下载包大小的方式构建应用程序目录和zip文件。以下是此功能的工作原理:
- 您仍然将所有.nexe文件包含在上载到CWS的zip文件中,但是您为特定体系结构指定了特定的.nexe文件(以及适当的其他文件)。
- Chrome网上应用店会重新打包您的应用,以便用户只下载其特定架构所需的文件。
以下是如何使用此功能:
-
创建一个名为的目录
_platform_specific
。将此目录放在CWS清单文件所在的同一级别manifest.json
。 -
为您支持的每个特定体系结构创建子目录,并在相关子目录中添加每个体系结构的文件。
这是一个示例app目录结构:
|-- my_app_directory/ | |-- manifest.json | |-- my_app.html | |-- my_module.nmf | +-- css/ | +-- images/ | +-- scripts/ | |-- _platform_specific/ | | |-- x86-64/ | | | |-- my_module_x86_64.nexe | | |-- x86-32/ | | | |-- my_module_x86_32.nexe | | |-- arm/ | | | |-- my_module_arm.nexe | | |-- all/ | | | |-- my_module_x86_64.nexe | | | |-- my_module_x86_64.nexe | | | |-- my_module_x86_32.nexe
请注意有关app目录结构的一些要点:
-
特定于体系结构的子目录:
-
可以有任意名字;
-
必须直接在
_platform_specific
目录下; 和 -
必须列在CWS清单文件中(参见下面的步骤3)。
-
-
您可以包含一个fallback子目录,该子目录提供包含所有特定于体系结构的文件的下载包。(在上面的示例中,这是
all/
子目录。)如果用户具有不支持多平台zip文件的早期版本的Chrome(Chrome 28之前),则使用此文件夹。 -
您不能直接在文件夹中包含任何文件
_platform_specific
。所有特定于体系结构的文件必须位于特定于体系结构的子目录之下。 -
_platform_specific
所有下载包中都包含不在该目录下的文件。(在上面的例子中,包括my_app.html
,my_module.nmf
和css/
,images/
和scripts/
目录。)
-
-
修改CWS清单文件,
manifest.json
以便它指定哪个子目录_platform_specific
对应于哪个体系结构。CWS清单文件必须包含新名称/值对,其中名称为
platforms
,值为数组。该数组具有每个Native Client体系结构的对象,具有两个名称/值对:名称 值 nacl_arch
x86-64
,x86-32
或arm
sub_package_path
_platform_specific
包含指定NaCl体系结构文件的目录路径(以...开头)这是一个示例
manifest.json
文件:{ "name": "My Reminder App", "description": "A reminder app that syncs across Chrome browsers.", "manifest_version": 2, "minimum_chrome_version": "28", "offline_enabled": true, "version": "0.3", "permissions": [ {"fileSystem": ["write"]}, "alarms", "storage" ], "app": { "background": { "scripts": ["scripts/background.js"] } }, "icons": { "16": "images/icon-16x16.png", "128": "images/icon-128x128.png" }, "platforms": [ { "nacl_arch": "x86-64", "sub_package_path": "_platform_specific/x86-64/" }, { "nacl_arch": "x86-32", "sub_package_path": "_platform_specific/x86-32/" }, { "nacl_arch": "arm", "sub_package_path": "_platform_specific/arm/" }, { "sub_package_path": "_platform_specific/all/" } ] }
请注意上面CWS清单文件中的最后一个条目,它指定了
sub_package_path
没有相应的文件nacl_arch
。此条目标识回退目录,如果用户体系结构与列出的任何NaCl体系结构不匹配,或者用户使用的旧版Chrome不支持多平台zip文件,则该目录包含在下载包中。 -
根据需要修改应用程序,以便将文件用于正确的用户体系结构。
要引用特定于体系结构的文件,请使用JavaScript API chrome.runtime.getPlatformInfo()。举个例子,如果你在目录体系结构相关的文件
x86-64
,x86-32
以及arm
,你可以使用下面的JavaScript代码来创建这些文件的路径:function getPath(name) { return '_platform_specific/' + chrome.runtime.getPlatformInfo().nacl_arch + '/' + name; }
-
测试您的应用程序,创建一个zip文件,并像以前一样将应用程序上传到CWS。
Chrome应用的其他注意事项
- 在CWS中的应用程序说明中,请务必提及您的应用程序是仅适用于Chrome浏览器的Native Client应用程序。另外,请务必确定您的应用程序所需的最低版Chrome。
-
托管和打包的应用程序在CWS清单中有一个“启动”参数。此参数仅在应用(不是扩展程序)中显示,并告知Google Chrome在用户启动已安装的应用时要显示的内容。例如:
"launch": { "web_url": "http://mail.google.com/mail/" }
- 如果要使用Pepper FileIO API 编写本地数据 ,则必须在Chrome Web Store清单文件中设置“unlimitedStorage”权限,就像使用HTML5 File API的JavaScript应用程序一样。
- 对于Chrome应用,您只能使用应用内购买。
- 您可以将应用程序放在Google Web Store中,只能访问某些人进行测试。有关详细信息,请参阅发布以测试帐户。
延期
封装应用的特定于NaCl的注释也 适用于扩展。
托管申请
.html文件,.nmf文件(Native Client清单文件)和.nexe文件必须从同一个域提供,Chrome Web Store清单文件必须指定正确的,经过验证的域。其他文件可以从相同或其他域提供。
此外,请参阅Chrome应用的其他注意事项。
注册Native Client模块以处理MIME类型
如果您希望Chrome使用Native Client模块显示特定类型的内容,则可以将该内容的MIME类型与Native Client模块相关联。使用nacl_modules
Chrome网上应用店清单文件中的属性将Native Client模块注册为一种或多种特定MIME类型的处理程序。例如,下面代码段中的粗体代码将Native Client模块注册为OpenOffice电子表格MIME类型的内容处理程序:
{
"name": "My Native Client Spreadsheet Viewer",
"version": "0.1",
"description": "Open spreadsheets right in your browser.",
"nacl_modules": [{
"path": "SpreadsheetViewer.nmf",
"mime_type": "application/vnd.oasis.opendocument.spreadsheet"
}]
}
“path”的值是应用程序目录中Native Client清单文件(.nmf)的位置。有关Native Client清单文件的详细信息,请参阅清单文件。
“mime_type”的值是您希望Native Client模块处理的特定MIME类型。每种MIME类型只能与一个.nmf文件关联,但单个.nmf文件可能会处理多种MIME类型。以下示例显示了一个扩展,其中包含两个处理三种MIME类型的.nmf文件。
{
"name": "My Native Client Spreadsheet and Document Viewer",
"version": "0.1",
"description": "Open spreadsheets and documents right in your browser.",
"nacl_modules": [{
"path": "SpreadsheetViewer.nmf",
"mime_type": "application/vnd.oasis.opendocument.spreadsheet"
},
{
"path": "SpreadsheetViewer.nmf",
"mime_type": "application/vnd.oasis.opendocument.spreadsheet-template"
},
{
"path": "DocumentViewer.nmf",
"mime_type": "application/vnd.oasis.opendocument.text"
}]
}
该nacl_modules
属性是可选的 - 仅当您希望Chrome使用Native Client模块显示特定类型的内容时才指定此属性。
CC-By 3.0许可下提供的内容