在本地应用程序开发中使用 Phonegap

我最近偶然发现了 接电话。你们有人试过吗。它是一个令人难以置信的工具,声称开发人员可以同时使用基于 HTML 5的框架,如 Sencha touch 和 Jquery 可以通过手机访问本地功能。另外,通过一些努力,这些代码可以从 Android 移植到 Iphone。在我投入其中之前,我想知道什么是论坛的经验与 Phonegap。对于企业级应用程序开发来说,痛点是什么,它是否真的可伸缩。

34909 次浏览

If you don't need any of the hardware features or performance beyond what HTML5 and Phonegap provide, an encapsulated web app (plus some limited access to other features) is a great solution.

Many enterprises deploy large scale web apps. Phonegap (or just a plain web view control with embedded content) will allow you to run these web apps offline (except, of course, for any online data required).

I've built a couple of applications using PhoneGap, and for what it provides, it's great. There are a couple of quick notes I would like to point out, which might help you.

Disable device-based features you're not using The accelerometer, geolocation features are by default turned on. If you're not using them, I would turn them off, as your app will load faster (initialize) and run smoother.

onDeviceReady - This is the method that's called once phonegap has loaded and is ready. $(document).ready or whatever you're used to, doesn't really apply here - unless you're only doing interface/hard-coded HTML stuff. If you're interacting with iPhone features, like GeoLocation, you will need to do everything after onDeviceReady has been called.

Pick a UI/library There are a ton of options for the interface/libraries, jquery-mobile, sencha touch, jqtouch, etc.. These each offer a unique approach, and feature-set. Do some research and use one, but avoid combining. You can read about some more options, tools here: http://www.phonegap.com/tool (link updated)

Also, more on just mobile development in general, with PhoneGap If you're looking to build apps, that are distributed through the Android market and iPhone App Store, I would read through their exhaustive lists for guidelines on how to develop your app. For example, in the tools link above, there is a "tool/plugin" called Easy APNS - while this is useful for Android - and technically doable on the iPhone, it violates the development agreement, as it states you must use the Apple notification network, etc.. This is just an example, but reading up on that stuff will save you a lot of headaches, if that's your end goal.

All in all, it's great for lightweight apps, especially if you come from a web development background. LocalStorage, GeoLocation, etc.. works really well. I hope this helps a little... and feel to ask questions.

Additional Edit:

I really think it comes down to what you want to do, and what you know how to do. Matt pointed out that developing native apps, for iOS is better, etc.. Yeah, if you have the time and knowledge to learn that - of course native will be better. But PhoneGap is made for web developers that can take their existing skillset and build apps. Also, PhoneGap allows you to build apps quickly, for iOS, Android, Symbian, Palm, Blackberry. With minor adjustments to your codebase for each.

Before expressing my opinion of Phonegap, I need to issue a little disclaimer saying that I am, by no means, a web developer. For me, writing JavaScript and CSS is like pulling teeth. That said, I don't like Phonegap.

There are a few very appealing aspects of the framework, mainly the "Write-Once-Run-Anywere" appeal and the "I-Don't-Have-To-Learn-Objective-C?" appeal. The framework can even give you access to some of the hardware features like the accelerometer. All of these are valid, to a certain extent.

That said, none of the great iOS apps are built using any kind of cross platform framework. There are so many subtle and elegant UI interactions that are handled for you by the native UIKit controls that many users and developers take for granted until they're missing, like the slew of incredibly detailed view animation curves and scrolling bounces that aren't there in the web-view based UI. You could toil to reproduce them perfectly, but for that time investment, why not just go native?

A second point to note is that the support community for Phonegap-built iOS applications is drastically smaller than natively developed applications. If you're one to rely on the community during projects, this should also give you pause.

In the end it comes down to the quality of experience you want to deliver. The upper bound is lower with Phonegap. If you're ready to accept a less-than-excellent user experience in exchange for reduced development times and increased portability, than it is a very viable framework.

As subtext for any who are interested, Marco Arment and Dan Benjamin recently discussed this topic. You can listen to it here.

The installation procedure involves a number of packages (Java, Apache Ant, Ruby, iOS SDK, Android SDK and PhoneGap itself), which all have to be correctly installed and set up. This can be a major effort. To be fair, they have something called PhoneGap Build in beta that should make this much easier.

We use it with NS Basic/App Studio to produce apps which qualify for app stores.

Here are all the best Performance guides I've read for PhoneGap... there is alot to be wary of to ensure you have solid, stable performance... but you can pick it all up in just one evening of reading.

Here are the best nuggets:

PhoneGap/Mobile Web Performance Tips

Enabling New Functions

Architecture

Architecting your App in Ext JS 4: http://www.sencha.com/learn/architecting-your-app-in-ext-js-4-part-2

if your are not making a game nor widget, just plain nice-looking app then phonegap is your choice.

But you should take care with your JS, avoid doing anything in JS for example if you want to do any animation avoid setting a timer with small intervals (eg. 100 ms), avoid jquery and alike animations. For example instead of animating fade by setting a short-period timer decreasing opacity at each point step by step (this is how jquery fade work), you should use css3 transitions from opacity 1 to opacity 0.

My advice is to go with something like zeptojs.com, after all phonegap won't run ie6 :-)

Check some tutorial on how to make your JS more light

http://bcksp.blogspot.com/

One "pain" not mentioned when deploying among several different devices: The more devices, the greater the learning curve. To deploy to iOS devices with PhoneGap, you'll need to learn the basics of Xcode on a Mac. To deploy to Android, you'll need to install and learn Eclipse, the Android SDK, etc. The other platforms demand their own SDKs be used. Learning some rudimentary Xcode, Javascript, and Java helps me to understand errors and general syntax.

"Create once, deploy everywhere" leaves out a LOT of steps!