Can anyone give a comparative information between developing Android mobile applications using Eclipse SDK and Adobe AIR?
Kindly share your opinion, anyone who has already having any experience on developing Android mobile applications using Adobe AIR.
I have gone through articles on developing Adobe AIR but wanted to know if anyone found it useful. I am aware that Android mobile applications developed using Adobe AIR is supported for Android 2.1 and 2.2.
Thanks in advance.
I will do my best to answer your question, though it's a little broad (if you could provide specifics on the information you need, I'd be happy to add more detail).
Firstly, there's a ton of information both from Adobe and from the Flash/Flex community on developing for AIR for Android. You can develop for AIR for Android using Flash and the Flash IDE or using Flex and the Flash Builder IDE currently in public preview on Adobe Labs (you can do straight ActionScript as well if you like).
One of the benefits of using AIR is that you can leverage your existing skillset in Flash/Flex/ActionScript rather than having to learn a new language. Another benefit is that yu can reuse code for existing Flash/Flex/AIR applications you may have built. Another benefit, and the one Sheikh mentions above is that Adobe is working on making AIR a cross-platform mobile runtime. If you search you will already find articles from Adobe and the community about people running AIR applications on the Playbook (the simulator anyway, since the device isn't released yet) and even using the preview Packager for iPhone to compile their applications to iPhone.
Although I haven't worked with AIR, but what I feel AIR is for, is cross compatibility.
Its like you're not building for Android, you're building for AIR. and since Android supports AIR, your applications will run on Android device.
In future more Mobile OS will start supporting AIR, so if you code an app for AIR, there will be a huge possibility that your same code runs on different platforms like Android, Windows Phone 7, iPhone (perhaps :-P). Thus, it will be saving a lot of coding effort for coders.
I have discovered that the cross-platform compatibility for AIR applications is quite good except for a few caveats:
1) User input boxes. They are generally not handled well in AIR applications. The popup keyboard can hide the input box, which it generally does not do with native JAVA apps for Android.
2) Real-time games. AIR for Mobile is SLOW. You may be disappointed if you try to develop any sort of real-time software.
3) Socket communication. This is my current peeve. I created a simple chat application in Flash and did some speed tests. This is in preparation for creating multi-player games for mobile devices. On the PC, the application can run over 200 messages per second to the server and get responses. On the AIR for Mobile, both on the iPhone and Android, it is about 11 messages per second max - and the app is doing nothing BUT sending and receiving the data strings. Add a layer of game play and the speed limitations could be crippling. This means real-time games may suffer if you need faster communications. It's plenty fast enough for turn-based or games that don't require lots of updates.
Basically, the cross-platform compatibility is nice. Just think about whether your particular project might be harmed by the speed issues as well as potentially poor handling of user input boxes. Do some testing.
Related
I searched for alternatives to restart my android application, but the only way I found to reboot is build with Flex.
Can i restart my android adobe air app with as3 flash? How i do it?
You can't do it with anything built into Adobe AIR on mobile. The capabilities of AIR are extremely limited compared to native applications. You would have to build an AIR Native Extension (ANE) to handle it. Worth noting that I don't think this is possible at all on iOS (natively or otherwise), so if you are deploying to both you would need to account for this. This would likely also be the reason why you can't do it in AIR for Android, as AIR for mobile tends to appeal to the lowest common denominator. If one can't do it natively, it is likely Adobe didn't include it for the other.
See this question on how to do it natively:
how to programmatically "restart" android app?
I am currently thinking about the best multi-platform language to build a multiplayer app with, and I was just wondering if anyone knows if AIR supports multiplayer locally between devices i.e over a LAN or bluetooth? Would I need to run some aspects of the game via a server?
Not to give too much away (of the game idea) but it would be similar to a "Simon" type game, with the only info being passed to each device either a score/amount of moves to beat or other simple piece of data.
Thanks
Adobe AIR supports the ServerSocket class so yes it's more than possible.
Edit
As #davivid accurately pointed out, ServerSocket doesn't seem to be implemented on mobile devices. You're not SOL here though, you can use Native Extensions or AIR and still accomplish your end goal. See this official adobe page for more info and a ton of downloadable examples.
Multiplayer on devices connected to the same local network is supported in Adobe AIR including iOS and Android. You use NetConnection.connect().
Example with source code.
If you are developing on iOS. It is best to use GameKit that came with iOS. GameKit is also connected to GameCenter. So, players can challenge their friends close to them or play against someone over the Internet. This is all handled for you by the API, so you don't need to worry about matchmaking or even low level socket communications.
AIR doesn't support GameKit out of the box, but there are some Native Extensions that support Multiplayer Gameplay. The one I use is at: http://airextensions.net/shop/extensions/game-kit-by-vitapoly/
Adobe AIR is pretty heavy. So is it necessary to be installed on my phone? Are there any alternatives to it..something lightweight.
Start out by reading this pdf, it will give you all the information you need. http://help.adobe.com/en_US/flex/mobileapps/developing_mobile_apps_flex.pdf
Short answer:
If a user who doesn't have Adobe AIR
on his or her Android phone tries to
install Adobe AIR application he or
she will be presented a dialog asking
the user to install AIR and would be
taken to Android Market Place from
where the user can install AIR.
Another claim in this matter:
Right now, there is no dependency
model for Android, thus users must
fulfill the dependencies of an
application manually.
Taken from this thread: http://www.quora.com/Do-Android-end-users-need-to-install-Adobe-AIR-manually-to-use-AIR-apps-on-the-platform
Yes, if you want to use Flex or Flash, you need Air.
Alternatives?
Well, you can use another cross-platform tool, like Phonegap.
But if you want small, lean apps, with maximum device compatibility, nothing compares with using Java and the stock Android SDK.
Edit:
P.S. "Heavy" is the word: requires ARMv7-A, FPU, Android 2.2
Many phones still being sold (as of 6/2011), such as LG Optimus V, do not meet these requirements.
http://www.adobe.com/products/air/systemreqs/
You may find these links useful
http://www.adobe.com/devnet/devices/android.html
See also Plastic Sturgeon's comment here: Choosing flash/openGL/other animation for an android app?
I have been developing for Android since some time now and I found Java as proper way of doing development in it. But, now there are number of options available for developing in Android such as Titanium, PhoneGap and Adobe AIR.
The question is who will come as a winner for Android development. I have read lot of comparisons between Titanium, PhoneGap and native Android development. Now, with Adobe entering into it too, what is the future of Android Developers who develop with Java as the programming language.
Since, if one can develop for Iphone and Android with Titanium and Adobe AIR then why will one want to waste time and money for separate development.
The biggest reason I can think of is that using the native language/libraries of the platform (in this case iPhone or Android) is that it will allow you to provide a user interface/experience that is more in line with what the system designers intended over what will likely be possible with something like Adobe AIR.
That doesn't necessarily mean that AIR is bad, or that you might not be able to develop a good application, but since you'd be targeting multiple platforms with the same application code, and each platform has it's own subtle (or major) differences that you can't always account for, you will inevitably be forced to take a "least common denominator" approach to building an application that will run on all of your target platforms and behave consistently across them as well. This might not sit well with some users who expect a certain level of capability as you may not give them a consistent user experience compared to other native applications.
This is a long-standing issue with cross-platform application development -- the design philosophies and behavior of each system are intentionally different (otherwise why would anyone use them?), so your bound to run into problems making an application work 100% the same across them all.
As someone that has done cross-platform development in the past, I can say that while you can do it well in some cases, and using something like Adobe AIR might be a good avenue towards getting more familiar with a particular platform, but a lot of times it's just more prudent to buckle down and build an app using a system's native libraries/languages over a cross-platform solution.
It is quite simple actually. Developing an Android application using Java (the normal APIs) will allow you to a) target possibly all Android devices as all share the same base API and b) it won't put limitations on your application (or at least no limitations with the only limitation being the API).
Now PhoneGap, Titanium and Senza are all web-based frameworks which have certain limitations. You can't access certain functions of your phone as they simply are not some kind of replacement API it's just a framework.
Now Adobe AIR is another story. I'm not sure what functional limitations Adobe AIR will have but I know that there is quite a limitation when it comes to what devices you can target. There are some minimum requirements for Adobe AIR to operate which are
Android Device Requirements for Adobe
AIR
Google Android 2.2 Operating system
ARMv7-A Processor OpenGL ES2.0 H.264 &
AAC H/W Decoders 256 MB of RAM
Which means you can target devices with earlier API versions.
Titanium compiles to native platform controls, but you must to use web languages like HTML and js to develop your application.
With special version for each platform you can design UI following system guidelines.
There seems to be an overall confusion regarding what Titanium is... It compiles to native platform controls.
The majority of the respondents have incorrectly stated that it is web based and that is not true.
However, that is true when it comes to phoneGap
Has anybody blogged about this comparison, or does anyone want to give it a shot here? Would be nice to see some reasoned thoughts on Adobe AIR on Android vs. the "native" Android SDK (in Java).
Edit: Despite few views and no answers, I'm leaving this question up here since it's a topic that needs to be covered at some point... but if it gets no attention I'll delete it in a few days.
I think it's ultimately very similar to the question of whether to use AIR or Java for a desktop application. Ultimately it comes down to three points:
Does AIR do everything you need? Obviously the android SDK gives you complete access to device capabilities, but AIR purposely doesn't, in order to stay portable. For example, AIR may not support intents, at least initially (I don't think Adobe has announced yet one way or the other). Also, AIR requires Android 2.2. If those limitations are troublesome, regular android SDK may be best.
Are you looking to make something that would be well-suited to doing in Flash? If you're planning a design-heavy app with animations, video, sound, or the like, then building it in Flash may be significantly easier than using Java. On the other hand, if your app will be pure code using only standard visual components, then it might not make a lick of difference which platform you use. Or on the gripping hand, if you'd have existing Flash animations or the like, then trying to shoehorn them into a Java app will be bothersome.
Are you targeting other platforms besides Android? If so, AIR may be a big win, as the same app content should run on windows, mac, linux, and later on, other devices that plan to support AIR, like Blackberry, some TVs, blu-ray disc players, etc. If you are only targeting Android, AIR may lose some of its appeal.
I hope that helps some. Realistically, unless you're effectively locked out of using AIR because you need something it doesn't give you, or effectively locked into using AIR because you're doing design-heavy work and you need the tooling, then I think the pros and cons of the two SDKs are largely questions of convenience. Either platform will work, so it's merely which will get you to the finish line the fastest and most reliably.
One issue to consider is compatibility with Android devices. Both fancy smart phones and cheap phones run in Android, but they don't have the same capabilities. Even if you application is simple or can be done beautifully in AIR, its relevant to mention that AIR is not compatible to all Android devices.
Some very popular devices currently sold (such as Samsung ACE and other "cheap" devices) use ArmV6 chips, and AIR or Flash are not compatible to this architectures, even when running on Android 2.2 or so.
AIR is interesting because same development works in different technologies, but consider that AIR doesn't run on "old" iPhones either, its only guarantied to work on new technology with big processors.
Check this Adobe link http://www.adobe.com/flashplatform/certified_devices/
AIR should be ruled out in your decision of technology if in your requirements you are targeting as much phones as possible, including those that are not so fancy or new.
I have experience with AIR mostly and little with Android SDK when I was building a native extension to AIR. My biggest hurdle with AIR is it's immaturity, it's bugs, and it's inconsistent behavior. Yes, you can go to the shiny page at adobe.com and see how cool is the AIR... All bright with tons of features which seems to cover all your needs. Yet, once you start building your app you'll find many ugly surprises:
Stage text in not working appropriately. link besides this bug StageText has few other bugs, like behavior in Scroller for instance.
Sound() object doesn't play the stream (it does on emulator only). link
Lack of features like AEC makes AIR useless to whole list of chat applications, as you'll will hear echo and screaming noise. link
Overloaded (and immature for mobile) Flex SDK (I hope folks at Apache will rewrite it from 0 and make it more manageable).
No H264 support on iOS devices: link (yes, I know it's Apple problem, that they want to control HD delivery on their platform, still it's Adobe problem too, as they couldn't fight right to bring their technology to forefront).
Sound object doesn't take variable bidrate (only 44.1KHz is possible). Flash "second generation" Speex codec samples at 16Khz. Now, try playing this back through Sound and you'll enjoy a funny circus. At the end you will need to write your own upsample algorithm.
I'm sure people will add more to this list. So, my answer would be native SDK is more preferable for anything serious. You won't work like a QA person with it - testing countless little examples trying to understand why an AIR feature not working, shuffling internet for answers and looking at AIR bug database... only to find that critical bugs are sitting there from release to release. That is my experience with AIR. Going native SDK makes your application not really "cross-platform", but AIR SDK can't claim this title anyway for anything more serious then couple of "Employee directory" examples. And if you will need to build for the other platform, you will just use native tools for it.
GL.