如何为多平台phonegap/cordova开发组织代码

Posted

技术标签:

【中文标题】如何为多平台phonegap/cordova开发组织代码【英文标题】:How to organise code for multi-platform phonegap/cordova development 【发布时间】:2013-05-30 11:52:31 【问题描述】:

有没有人有一个明智的、干净的方法来为 phonegap 应用程序拥有一个 www 资产文件夹的单个副本,但又拥有一个 iosandroid 包装器项目?

我意识到我可以用符号链接做一些疯狂的事情,但是它不能解决换出cordova.js 的问题。

我也意识到我可以编写一个构建脚本到xcopy 等等,这可能是我必须要做的,但我只是想知道其他人都在使用什么解决方案?

【问题讨论】:

我真的没有这个项目的包装器。我通常做的是对 Subversion 上的 www 文件夹进行版本控制。然后我在 www 中有一个文件夹,其中包含根据 iOS 或 Android 更改的文件,例如 cordova.js 或 javascript 配置文件。但除此之外,我真的做的不多。 【参考方案1】:

编辑提供cordova推荐的方法:

从 Cordova 3.X 开始,新的 CLI tools. 支持此工作流程。它允许您创建 Cordova 项目,在单个 /www/ 文件夹中编辑应用程序资产,并使用命令行工具传播更改从您的应用程序级别 /www/ 到各个平台特定的资产位置(如 Android 的 res/www/ 或 iOS 的 /www/。)我在这个答案中谈到了这个:Should a phonegap plugin be declared in the config.xml file?

我的旧答案,仍然有用:

IBM Worklight 提供此功能。您在/common/ 文件夹中创建应用程序代码,然后您可以将设备特定代码(如果需要)放置在适当的/Android//iPhone/ 等文件夹中。您可以在这里免费下载开发者版:http://www-03.ibm.com/software/products/us/en/worklight/

我确信还有其他产品,例如 IBM Worklight。我知道 Cordova 邮件列表中有一些 NetBeans 开发人员。我确定还有其他消费产品(如果您发现任何产品,请编辑此答案并列出它们!)

【讨论】:

有趣,但不是PhoneGap 实际上,Worklight 构建在 Cordova 之上。科尔多瓦 == PhoneGap。 Worklight 提供了许多您可能不需要或不需要使用的额外功能,但其核心就像使用 Eclipse 构建 PhoneGap 应用程序一样。您可以访问相同的 API 和所有内容。我可以为您看到的唯一真正的缺点是似乎不支持更换 Cordova 版本,但我相信您可以解决这个问题。 抱歉,worklight 绝对不是phonegap。一方面,它甚至还没有接近免费。第二,phonegap只是墙上的一块砖,就是工作灯。对于只想组织一个简单的 phonegap 应用程序的人来说太过分了。 是的,我同意。 Worklight 包括 phonegap/cordova,但在其之上提供了更多功能。我并不是要暗示它们是等价的。 Worklight 只是一个使用 Cordova 的产品,我敢肯定还有很多其他产品也是这样做的。【参考方案2】:

我有一个通用的“PhoneGap”文件夹和 VS 解决方案,然后在子目录“iOS”和“Android”中,每个平台都有一个单独的代码库,以及所有相关的 Xcode 和 Eclipse 工作区。那是任何特定于设备的调整,或通过模拟器进行的测试,都可以轻松完成。

到目前为止,很简单。

我想我决定不使用符号链接是因为 OS X 上的问题?记不太清了。

当时我正在使用 TFS,因此我编写了一个控制台应用程序,该应用程序将在运行时将您在 TFS 中的未决更改复制到您配置的任何子目录中。这意味着所有 3 个代码库将一起更新。我决定不自动化这一步,让用户通过运行控制台应用程序来控制他们的更改是否被复制。该应用程序能够根据需要添加、编辑或删除现有文件,而且我还有一个要忽略的文件“黑名单”,其中包括 cordova.js

根本没花太长时间敲起来,MSDN文档是有道理的: http://msdn.microsoft.com/en-us/library/bb138973.aspx http://msdn.microsoft.com/en-us/library/microsoft.teamfoundation.versioncontrol.client.workspace.pendadd.aspx

这是一个sn-p:

var teamProjectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://dev:8080/tfs/MyCollection"));
versionControlServer = teamProjectCollection.GetService(typeof(VersionControlServer)) as VersionControlServer;
var pendingSets = versionControlServer.QueryPendingSets(new string[]  "$/" , RecursionType.Full, workspaceInfo.Name, workspaceInfo.OwnerName);

if (pendingSets.Length > 0)

    var allPendingChanges = pendingSets[0].PendingChanges;


...

这些是命名空间:

using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.VersionControl.Client;

【讨论】:

以上是关于如何为多平台phonegap/cordova开发组织代码的主要内容,如果未能解决你的问题,请参考以下文章

使用 phonegap / cordova 更改设备配置文件

制作安全的 PhoneGap/Cordova 应用程序 (Android)

在 PhoneGap/Cordova 中处理 cookie

Phonegap/Cordova Geolocation 不适用于 Android 4.0+,但适用于所有其他平台

PhoneGap/Cordova 3 标准客户端数据库

HealthTap 是使用 phonegap cordova 开发的吗?