我在将我的 PhoneGap 1.x 应用程序升级到 Phonegap 3.0 时遇到了很多问题,至少对于 Android 而言(我什至还没有开始升级 iOS 版本)。我想如果我把所有这些东西放在一个问答中,它可能会对很多人有所帮助。
所以问题是:将现有应用程序升级到 Phonegap 3.0 时需要注意什么?
这是一本深入了解一些细节的顶级手册。我正在为 Mac 用户描述该过程,但尽管命令和工具可能不同,但对于 Windows,原则是相同的。
提前警告...
首先,不要打扰官方文档升级手册。这只会帮助您从 1.0 升级到 1.1,然后从 1.1 升级到 1.2,然后从 1.2 升级到 1.3,等等。如果您想跳过多个版本,您不知道自己是否做对了。因此,当您升级时,请从头开始创建一个新项目。
此外,向前跳跃以确保您不会在此过程中陷入困境:如果您的 3.0 之前的 Phonegap 应用程序使用自定义插件,请仔细考虑是否要升级。向前滚动到“注意自定义插件”以了解原因。
一步步
话虽如此,这是一步一步的过程,以行分隔。
1.命令行
Phonegap 3.0 完全是关于命令行工具的。它看起来比实际上要可怕得多。您只需要安装一些您将在那里使用的工具(主要是通过在命令行中键入命令)。
要知道的最重要的一般命令是:
//For Mac and Windows (on Windows, replace slashes by backslashes)
cd mySubfolder //Go to the subfolder "mySubfolder"
cd /MyTopLevelFolder/SomeOtherSubfolder //Go to any folder using the entire address
//Show a list of files and subfolders where you currently are
dir //On Windows
ls //On Mac
2. 在正确的地方
命令行工具最关键的方面是您必须始终注意您当前所在的目录。仅当您位于该应用程序的主文件夹中时,告诉 Phonegap 构建和部署您的应用程序才有效。
通常,要使用您的 Phonegap 项目,您需要使用以下命令导航到项目的主目录:
cd /Users/yourself/thePathToYourWorkspace/YourCurrentPhonegapProject //On Mac
cd D:\ThePathToYourWorkspace/YourCurrentPhonegapProject //On Windows
3. 启蒙之路
PS:为了确保您安装的工具正确运行,您有时需要告诉计算机,如果在当前目录中找不到文件,它应该在一些额外的目录中查找。你编辑一个叫做路径变量的东西。在其他地方查找,这并不太难,但对于 Windows 和 Mac 来说是不同的。
4.先获取工具箱的工具箱
首先,基本的文档没问题。您下载并安装node.js,这是其他工具将使用的工具,然后使用它来安装 phonegap/cordova命令行工具。
//Like so, for Mac
$ sudo npm install -g phonegap
//Note: the "sudo" bit is needed to install a number of necessary files in folders that Apple protects from direct user editing
从现在开始,您可以使用“phonegap”命令为您的项目执行多项任务。
5.打开一个工作区
您需要做的第一件事是创建一个工作区,这是所有项目的主文件夹的通用词(您可以使用 Windows 资源管理器、Finder 或任何其他用户友好的方式来完成此操作)。
特别是对于 Windows,请尝试确保您可以键入该文件夹的完整路径而不使用空格。所以永远不要把你的工作区放在像“我的文档”这样的地方,尤其是因为那是 C:\Documents and settings\John Doe\" 的子目录。而是尝试像 "D:\Workspace\" 这样的地方。
如果您已经将 Dropbox 用于其他目的,并且更改 Dropbox 文件夹的位置并不太麻烦,请考虑使用它来自动备份您的工作区。只需将 Dropbox 文件夹放在 D:\ 或其他磁盘的根目录中即可。然后将 Workspace 添加为 Dropbox 的直接子文件夹。
如果碰巧在项目中同步文件,使用 Dropbox 可能会在开发过程中偶尔阻碍您。但结果是您可以自动备份文件的多个版本:当天的所有版本,昨天的一些版本,前一天的一个版本。
6. 创建你的项目
接下来,您使用该命令在命令行控制台中转到您的工作区目录cd
。在那里,你告诉 Phonegap使用命令放置一个空应用程序的基本结构
$ phonegap create hello com.yourCompanyName.yourAppName HelloWorld
这将创建一个文件夹 HelloWorld 并在其中填充许多子目录,其中包含作为应用程序主干的文件。
7. 把它挂在脚手架上
然后你开始填充这个结构。大多数情况下,您的应用程序将是一堆 HTML、CSS 和 Javascript 文件。那些放在主 www 文件夹中。该文件夹还包含 config.xml 文件,其中包含您的应用程序的许多设置,例如使用什么图标、显示什么名称、是否显示 Android 状态栏、哪些域要列入白名单等。
Phonegap 将这些文件组合在 /www 目录中,因此您可以将所有“可编辑”的东西放在一起。如果您的应用程序没有像插件一样做任何花哨的事情,那么您就可以开始了。
8. 以正确的方式加入白名单
如果你的应用程序的任何部分实际上访问了互联网,即使只是为了谷歌分析之类的东西,你也必须告诉 Phonegap 将适当的域名“列入白名单”。如上所述,这是使用 MyProject\www\config.xml 中的标签完成的。
这是一项棘手的业务,因为 Phonegap 无法处理平台之间在此问题上的差异。
对于 Android(以 Google Analytics 为例),将您的域添加到白名单中,如下所示:
您添加此域两次的原因是许多在线服务以简单的未经验证的 http:// 协议开始,但它们的某些功能随后可能会从/向同一域上的安全 https:// 地址获取或发送代码。
星号很重要,因为您希望能够从 **www.**google-analytics.com 以及主 google-analytics.com 或任何子域下载脚本和其他内容。
9.插入附加功能
如果您的应用需要特殊功能(Android 会要求用户许可的功能,例如访问您的手机或通讯录或相机或加速度计),那么您需要在您的应用项目中安装插件。
在文档中查看此处以了解如何操作。
此外,请确保在 config.xml 中添加一行,告诉 Phonegap 不要请求任何不必要的权限:
<preference name="permissions" value="none" />
文档说这意味着您只要求一个权限(网络访问),但这并不完全正确。示例:如果您安装了相机插件,无论您是否添加了上述 value=none 偏好标签,应用程序都会向用户询问相机访问权限。所有其他功能/权限相同。
10.注意自定义插件
此外,这似乎是 Phonegap 中的一个错误,无论您的插件和权限设置如何,该应用程序都将始终尝试获得其他三个权限:RECORD_VIDEO、ACCESS_COARSE_LOCATION 和 ACCESS_FINE_LOCATION。
Phonegap 只是将它们放在 Android 清单中,就好像您在某处指定了一样。当您构建应用程序以实际发布到应用程序商店时,您需要修复此问题。如何:在最后一次构建之后,但在签名和发布包之前编辑你的 AndroidManifest.xml。
这样你就可以获得这些讨厌的权限。但是每次您将新的应用程序版本上传到应用程序商店时,您都必须重复此操作!
除了标准插件,Phonegap 一直有大量第三方自定义插件。Phonegap 3.0 中的安装方式与以前完全不同。已经知道这个练习的懒惰的专家说“它就像安装核心插件一样”,但没有人费心在任何地方举个例子。
如果您知道如何将 3.0 之前的插件安装过程翻译成 3.0+ 的过程,请添加评论,我将复制粘贴到本手册中。
当您准备好开始测试您的应用程序时,请先连接您的设备(或安装模拟器)。这些命令将是最有用的,但并非所有命令都有很好的文档......
$ phonegap build android //This builds a test app, but doesn't run it
$ phonegap run android //This builds the test app AND runs it on device/emulator
然后,当应用程序完全按照您的意愿运行,并且您准备好将其放入应用程序商店时,您将需要采取最后几个步骤来创建可用于商店的应用程序包 (.apk)。
您需要安装“ant”。在我的例子中,安装所有其他的东西意味着 ant 也被自动安装了,这很可能是你的情况。Ant 是一个构建包的工具(我的愚蠢推论,不是经过验证的事实)。
11. 蚂蚁去哪里
到目前为止,您一直在命令行控制台中从项目的主目录中执行命令。但是,现在,您将希望使用您使用这些命令创建的 Android apk,并且“ant”不知道“phonegap”在哪里可以找到这些命令。
所以转到子子目录...
cd platforms/android //This is a subdir of blabla/workspaces/myproject.
这是您制作的 HTML/CSS/Js 内容的 Android 应用程序的 Java 原生“包装器”的位置。
12. 准备发布
如果您需要对应用程序进行最后的修改(例如从 AndroidManifest.xml 中删除奇怪的权限请求),现在就这样做。请务必编辑文件夹 /platforms/android 中的 AndroidManifest.xml,而不是 /platforms/android/bin 中的那个。
由于 Phonegap 中的错误,您可能需要进行一些修改:
Phonegap sets it to 1
即使您在 config.xml 中指定不同)13.释放蚂蚁
如果您真的准备好将您的东西放入应用商店,只需启动此命令即可。准备好出错:您一次处理这些步骤比我将整个 if-then 过程放在本手册中要容易。
ant release
ant 完成后,您应该在文件夹 /Platforms/Android/bin 中找到一个名为 YourAppName-release.apk 的文件。这是您可以上传到 Google Play 的文件。
14.“蚂蚁释放”可能出现的问题...
A. 你的应用需要一个私钥
密钥存储在私有密钥库(文件)中。如果这不是您的第一个应用程序版本,请从您存储的任何地方获取这些内容,并将其放在一个简单、易于键入的位置,例如 D:\Developer\Keystores。如果这是您的第一个应用程序版本,请创建一个密钥。
B. Ant 找不到你的密钥
Ant 不知道在哪里可以找到这个密钥库,因此您需要在platforms/Android 目录中编辑一个文件以将其指向正确的方向。该文件称为 ant.properties。使用纯文本编辑器添加这些属性:
//Point it to the right directory:
key.store=/Users/Me/Dropbox/Developer/Keystores/keystoreForMyFirstApp //For Mac
key.store = D:\Dropbox\Developer\Keystores\keystoreForMyFirstApp //For Windows
//This describes the name of your signing key, as stored in the keystore
key.alias=FirstKey
您现在可能已准备好将 apk 文件放入 Google Play 或其他一些 Android 商店。我并没有详尽无遗,但这些步骤应该会让你走得很远。欢迎评论!
我认为如果您遵循升级指南并记录您观察到的任何不一致或差异,这将非常有帮助:
iOS:http ://cordova.apache.org/docs/en/3.0.0/guide_platforms_ios_upgrading.md.html#Upgrading%20iOS
我认为您可能需要逐步进行“升级”,例如,您不能从 1.x 跳到 3.0,但是,您可能能够结合一系列步骤。无论如何,实际上通过这个过程,验证它是否有效,并将任何拉取请求提交到https://github.com/apache/cordova-docs/会帮助很多人。谢谢!