I am willing to develop a mobile application. I wish to have something working for android, windows mobile, symbian and blackberry.
Which is the best way to do that?
I had read here:
You could aim to wrap the sections of
the platform specific APIs (iPhone SDK
etc.) that you use with your own
interfaces. In doing so you are
effectively hiding the platform
specific libraries and making your
design and code easier to manage when
dealing with differences in the
platforms.
I was hoping there exists a framework that does this for me, but it doesn't exist or I didn't find any.
I feel that sort of things will make my code harder to maintain and perhaps it's better to have one version for each platform.
Anyone with experience in the field?
Another links of interest:
most-promising-mobile-platforms
long-term-potential-of-iphone-windows-mobile-development-platforms
Does Java not count (in various guises)
Java on Symbian
Java for Windows Mobile
Java on Blackberry
Android Java Virtual Machine
It should be simpler to manage API differences in a consistent language/runtime platform where capabilities can be assessed in-code ... and configurations of code made at build-time.
As much as I dislike Java, it is fairly ubiquitous. As for the iPhone ... apart from it being much hyped and locked down ... you can get Java to run on jail-broken phones ...
What happened to Apple's open and friendly appearance? The cynic-inside knows the answer ;)
You might want to look into PhoneGap (http://phonegap.com/). From their own description page:
PhoneGap is an open source development tool for building fast, easy mobile apps with JavaScript.
If you’re a web developer who wants to build mobile applications in HTML and JavaScript while still taking advantage of the core features in the iPhone, Android and Blackberry SDKs, PhoneGap is for you.
In addition to using JavaScript, it supports JavaScript acccess to native controls and features of the phones (GPS, accelerometers etc...).
There really isn't any magic bullet that I'm aware of. Even within just the Blackberry platform, there are tons of different devices with different capabilities, screen resolutions, etc. And that's just from one, single manufacturer; Symbian and Windows Mobile are likely even worse.
The answer is likely that you should focus on relatively new and consistent platforms (accordingly with very few and all pretty much similar devices), like Android and iPhone OS, if you really want to reduce your code forking and maximize your audience.
My advice will almost certainly change within a few years when there are nine different iPhone OS devices and two dozen Android platforms.
The first question to ask yourself is if you need a native application, if you do not then designing a mobile web site solution should give you the most cross compatibility, failing that I would make a iPhone and J2ME solution (the J2ME can then be ported for Android relatively easily) for the greatest coverage of users
Or investigate Movilizer. Supports iOS, Android, WinPhone, WinMobile, Desktop PCs, embedded devices, ... and many more. It uses a design once run anywhere approach.
http://www.movilizer.com
try out different cross platform dev tools,
Developing cross platform mobile application
Related
I have to develop a mobile application that is available on Android and iOS.
I do not have any experience with native development for Android or iOS, so I decided to go with some of the existing platforms like PhoneGap, Titanium or Icenium (these platforms provide me with all necessary requirements).
I saw that Icenium requires an invitation code to go through the documentation.
What I want to ask: Has someone played with Icenium? Any recommendations about this cloud-based platform? What about performance?
I have been working with Icenium and I can say that it is fun so far. It is really just an IDE that allows you to use Cordova (PhoneGap) to build apps. There are two IDEs -- one that is browser based and one that is a Windows desktop app. The native desktop app is more featured and has a better User Experience. There is some poetic justice there, if you are looking for it :)
So far, it is certainly young. Support for things like PhoneGap plugins is non-existent so far. I also can't seem to get the app working on a real device, but these are beta bugs and I expect them to be smoothed out.
Although the cloud-based approach is nice because I don't have to worry about using multiple IDEs, you lose a lot of freedom for how you want to develop. For instance, I like using CoffeeScript and there is no support for building, compiling, creating new CS files, etc. Possibly in the future?
Since it is really just an IDE for developing Cordova (PhoneGap) apps, it isn't a different platform from Cordova. It just makes development a bit more streamlined.
I have to say that from my personal experience , Icenium is slow. They market it as being html5 apps that work like native apps and this is just not the case. You can make it look like a native app and you can develop it with the native ideology as it were, letting the user experience it as if it were native, but its so slow.
Its also really odd how a microsoft technology based company ( that is telerik ) has basically removed itself from the microsoft stack with icenium. I am not saying that is bad , microsoft itself needs to do more to attract developers to its platform. Its just really odd because most of the telerik clients use the mircosoft stack , including , very importantly visual studio. Everyone knows VS they have custom plugins that suit their development style and now we must learn and use a new IDE that is so far , in my opinion not even close to the standards of anything. The one primary advantage is that you can deploy to a device.
Adding Phonegap or any other mobile based framework can be done in anything. It also does not provide support for microsoft devices at all. Which removes completely the whole cross platform environment that it seems this was supposed to be created for.
If you are not developing for microsoft , i guess its fine , but i dont see any other advantage other then it can deploy to the device for testing. If you have clients that work on the MS stack .. i would not recommend this at all. Just fire up VS and develop as you have before and just include those libraries in your file system.
i try for a few time now to make app for mobiles with appmobi XDK phoneGap XDK from appmobi, sencha and appcelerator but except iphone where the app works ok in android mobiles doesn't work well. Any other program except these or any tricks for make it work better in android and in others?
any help it will be very important
thanks
Actually i want to avoid that.I want to build for all mobiles together in the same time.That's why i used that programs. I don't known a lot of thinks and i am looking for a simple way to do that. I want a way which i can read about it on internet and i can find thinks because except jquery mobile i can't find for any other library. So did anyone known how i can find the best way that's my question.
thanks for your time and your answer.
Not sure why you're asking for a "program" and then referring to some technologies/tools (Appcelerator, PhoneGap, etc).
Anyways, I've been developing cross-platform mobile applications in the last few months using Appcelerator for almost everything. However, they technology you'll choose also depends on your needs.
There are three kinds of mobile development these days:
Native Mobile Development: Using Objective-C (language) + X-Code for iOS and Java (language) + Android SDK for Android, etc. You can always choose something like Appcelerator if you're targeting multiple platforms, as you mentioned earlier. Good for: Performance, Native capabilities (using the camera, for example). Recommended Tools: Titanium Appcelerator.
Mobile Web Development: If you have only web skills (HTML/CSS/JavaScript) you can always make your web application mobile-compatible, using tools like jQuery Mobile or Sencha Touch. Recommended Tools: jQuery Mobile, Sencha Touch.
Hybrid Mobile Development: Using web technologies for your application (you'll be loading a web page), but using a native application (a web wrapper) for making the application Native (and distributable) across the Play Market or AppStore. Recommended Tools: PhoneGap, Trigger.io, or you can even use Titanium Appcelerator and use a Web View Component
How you should take a decision?
Do you need native capabilities (use the camera, accelerometer, etc)? If you, you need to go either native or hybrid.
How many platforms do you plan to support? If it's only Android and iOS, then you can use either Appcelerator or make it native. If you're planning to support more platforms PhoneGap or a Web Application sounds more reliable.
Do you plan to deliver your application through the AppStore/Play Market? Then you need to make it native/hybrid.
Note/Recommendation: By reading your question I noticed that you're really confused on mobile and programming stuff. Before going so far, you should take some time in reading more about overall development.
Perhaps not exactly a program but what can be quite convinient(based on your application needs) is to make it a webapplication. Then you can use libraries such as Jquery mobile to adapt the website to the mobile platform as well as incorporate technologies only available on smartphones, such as swipe, orientationchange etc. Then you can make a simple Webviewer for androind and iphone which can be made seperately.
You can look at Kendo UI
kendo UI mobile have support for : iOS 3.0+, Android 2.0+ and BlackBerry touchscreen devices.
What i really liked about it is native-like UI experiences for end users automatically on same code base for different OS.
You can check demo , change OS using OS SIMULATOR MODE
I am not associated with Kendo.
I'm prospecting alternatives to develop for multiple mobile platforms, and have found Codename One, that uses Java as lingua franca, instead of HTML/CSS/JS or scripting languages.
What I couldn't find is how does it work. Does it bundle a JVM with the application for iOS and Win7, and uses Dalvik in Android? Does it translates source code to native, and do we have access to this source code? Is there other magic, considering they promise "no compromise"? What limitations should I be aware while coding agnostic Java?
Preemptive strike: this is a question about Codename One, not about which cross-platform should I choose or if I should go native or if I should go web.
Codename One has an optional SaaS approach so this might (and probably will) change in the future to accommodate improved architectures. Notice that Codename One also provides an option to build offline which means corporations that have policies forbidding such cloud architectures can still use Codename One with some additional overhead/complexity. It also means you can use it for free without ever working with the build servers.
Currently on Android the standard Java code is executed as is. Java 8 syntax is translated using retrolambda for all platforms when its used. This allows it to be compatible to all Android versions as well as other ports.
On iOS Codename One built & open sourced ParparVM which is a very conservative VM. ParparVM features a concurrent (non-blocking) GC and it is written entirely in Java/C. This effectively means that an xcode project is generated and compiled on the build servers so its effectively as if you handcoded a native app and thus "future proof" for changes made by Apple. E.g. with recent 64bit and bitcode changes to iOS builds ParparVM needed no modifications to comply with those changes.
In the past Codename One used XMLVM to generate native code in a very similar way but the XMLVM solution was too generic for the needs of Codename One.
iOS builds are compiled and signed on Macs in the cloud using xcode (the official Apple build tool). This makes them compatible with current/future changes from Apple and allows developers to use Windows/Linux while targeting iOS. You can read more about the compatibility of ParparVM to iOS here.
In the past Codename One supported Windows Phone using a C# translator that relied on XMLVM but it was not an ideal approach. Notice that the XMLVM backend that translates to C# is very different from the one that was formerly used to translates to iOS. Codename One chose to discontinue that old backend as it wasn't as powerful as the new UWP backend and doesn't match Microsofts goals moving forward and focusing on UWP (Universal Windows Platform).
For Windows 10 desktop and Mobile support Codename One uses iKVM to target UWP (Universal Windows Platform) and has open sourced the changes to the original iKVM code in the Codename One github repository.
Notice that UWP builds are done on a Windows 10 machines in the cloud thus allowing developers to use Mac/Linux or older versions of Windows when building native windows apps...
JavaScript build targets which are available on the enterprise level subscribers use TeaVM to do the translation statically. TeaVM provides support for threading using JavaScript by breaking the app down in a rather elaborate way. To support the complex UI Codename One uses the HTML5 Canvas API which allows absolute flexibility for building applications.
For desktop builds Codename One uses javafxpackager, since both Macs and Windows machines are available in the cloud the platform specific nature of javafxpackager is not a problem.
What makes Codename One stand out is the approach it takes to UI where it uses a "lightweight architecture" to allow the UI to work seamlessly across all platforms and be developed almost entirely in Java. It is augmented by the ability to embed "heavyweight" widgets into place among the "lightweights". You can learn more about this in this blog post. Notice that at this time peering is undergoing some improvements and now supports more elaborate usages such as layering.
A lightweight component is written entirely in Java, this allows developers to preview the application accurately in the simulators & GUI builder.
Codename One achieves fast performance by drawing using the native gaming API's of most platforms e.g. OpenGL ES on iOS.
The core technologies behind Codename One are all open source including most of the stuff developed by Codename One itself e.g. ParparVM but also the full library, platform ports, designer tool, device skins etc. You can learn more about using the Codename One sources here.
FYI Shai Almog, the author of this answer, is the CEO of Codename One.
Codename one took very balanced approach to portability. I would like to add a pragmatic comment.
From the user interface side, CN1 does paint all its UI on platform-provided canvas. It tries to mimic platform native look and feel, if you choose it, but has as much success as Swing had with its "native platform look and feel", because native platform constantly changes, and "native l&f" always lacks behind and in most cases feels not quite right.
But, if you choose platform-independent look and feel (which is the sort of the trend today), you are not restricted by Codenameone's default component set set in any way: it's just like Swing with its cross-platform look and feel ("Metal" etc.). Which is good.
From the language side: on iOS it is java compiled to C which is then tied to hand-written Objective-C, and it does not bundle VM, only portability layer. Most important here is the fact that java is compiled to C and not Objective-C, which make it faster then idiomatic Objective-C code, because it does virtual or, more often, direct method invocations instead of slow Objective C message dispatch. Which is good.
It also may seem little faster on Android, because, while using Dalvik/Art, it does not use Android native UI which is bulky compared to CN1's. This can make dynamic UI creation faster in runtime, which is good.
One of the strongest points of CN1 approach is its emulator (implemented over desktop JavaFX canvas) which you use to develop software. Emulator makes use of same UI code and portability APIs as on mobile platforms and lets you use IDE of choice for debugging. It restarts quickly, and edit-compile-run cycle is very sustainable compared to android. Which is good.
Second very strong point (main one!) is open nature of their UI library, all native code and bytecode-to-C translator. If you spend some effort, you can avoid building Android/iOS ports on their farms and untie yourself from their particular revision of product (but not from quite a few value-added services they offer, which are not open source!). Depending on your situation, this may (or may not!) be quite good for you!
Weak point of Codenameone is its less-then-ideal maturity, which means you can easily shoot yourself in the foot using basic UI components, if you use them the way they were not indended to be used. Also it means that its java portability layer is not big enough (and has holes in it) to cover everyone's need, and you may have to use native in some places, and port other pure java libraries, too.
Also, current state of graphics performance is sub-optimal; if you get bunch of text on screen, you'll easily miss 16msec fluid animation/repaint time limit, this can be worked around by double-buffering, but it also has its limits. Luckily, there is still room for optimization in implementation on both main platforms, hopefully they will improve it.
Overall, Codenameone has good niche as a cross-platform framework for several classes of applications; you may find a value in their services, too.
This question may not directly relate to programming. I have noticed that the technology of today has gone mobile. I want to go mobile with it. What is the most popular mobile OS?(excluding iPhone OS. Sorry, I don't have a Mac to develop on) Some choices could be BlackBerry OS, Windows Phone, Symbian OS, Android OS, etc. I want to make and sell applications for a mobile OS.
If you have Java experience, learn Android. It's becoming widely popular next to the iPhone. Although, I cannot prove that it is the most popular mobile platform to develop on, but it's popularity is increasing.
If you are interested in publishing an applcation for Android you would need to signup on the Android Market.
It would also be wise to read the Android Market Developer Distribution Agreement so you can learn about processing payments, fees, and any other aspect when publishing paid apps.
One thing to throw in the mix while deciding this is the percentage of handsets having a given platform in your target market. Iphone and Android seems to be the platforms for the future, their adoption is going to increase. But if your target market, say India has a significant number of J2ME supporting handsets, then it would make sense to start on J2ME. This aspect needs to be researched and factored in while making your decision.
Also if you design carefully it possible to support multiple platforms, say, Android and BlackBerry since both are Java based.
Difficult question.
While Blackberry detains the biggest share on mobile market, Android is surely coming out fast. I think Windows Mobile isn't at the level of the others, so my choices are BlackBerry and Android. If I have to choose, for the future, Android.
I agree with Anthony, Android is the way to go if you have Java experience. If you have more Microsoft experience, then take a look at Windows Phone 7. It's totally different than all previous Microsoft phone systems and everybody is starting from scratch. It's anybody's guess how successful it's going to be but it does have a big company behind it, and what you learn there will be applicable to many non-mobile scenarios as well whether you choose Silverlight or XNA as your development environment.
A survey by Admob http://metrics.admob.com/2010/03/admob-publisher-survey/
Pretty much explains what you are asking :)
I need to develop some programs for mobile devices but haven't decided the platform to build upon. I'm looking for Palm or Pocket PC devices that have Touch screen and Wi-Fi connection and are cheep because I'll need to buy several of them.
I don't really need camera, mp3 players, video players, pdf readers or anything else since the apps are going to be simple data collection to feed via wireless to a server database.
I'm proficient with C and C#. I could learn Java if I had to.
What devices do you recommend? Linux devices maybe?
PS: Changed the title because I don't want a flamewar between platforms. Please, don't answer with Windows Mobile sucks/rules. I'm looking for devices instead.
Thanks
Windows Mobile
It supports C#, and Visual Studio comes with the mobile SDK. So if you know C# you probably already have the tools you need. And in spite of the iPhone/iPodTouch buzz, the Windows Mobile deployment is still 10X greater.
In order of preference
Neo Freerunner
Maemo & the N800 (cheap)
Beagleboard
If you are comfortable with Visual Studio then programming for windows mobile is extremely easy. The SDK for mobile comes with emulators for all the latest and popular versions of windows mobile- and you can even debug on teh device itself using a USB cable.
On windows mobile you have a choice: Develop a .Net application or develop native (likely MFC based). Either one gives you a great development environment.
As far as iPhone development goes- you would need an apple computer to install and use iPhone SDK- and you can't run an iPhone app on your phone. You would have to go through the process of getting it registered with iTunes for you to install your own apps on your own phone!
When I first started playing with mobile development I had a few questions:
Can I develop using my favorite IDE- Visual Studio. Will it be as easy as developing a desktop app: yes.
Will I be able to access the internet from my application without 'unlocking' or in some other way enabling the phone that was not intended by the service provider? yes.
Will I be able to access device specific functionality such as GPS easily? Is there good support for doing so within the API? Yes.
You should probably target the Windows Mobile platform. The Palm platform is rather archaic and no longer widely used. The development environment is also rather spartan, while Microsoft has full IDEs available for Windows Mobile development. You might also consider the iPhone/iPod touch platform - I have a feeling the number of devices will multiply at an exponential rate and I've heard that developing applications is much easier due to the completeness of the system stack.
You should probably at least evaluate the Apple iPod Touch. It certainly meets your basic "touch screen + WiFi" spec, and your users presumably won't object to all the the other nice features that will come along for the ride.
I don't know what your cutoff for "cheap" is, but $299 for the base model seems pretty reasonable for a high-quality touch screen and WiFi in a pocketable device.
Windows Mobile and CE used to suck, really, really badly. These days however it's definitely passable and worth checking out, especially if you code C#.
Just remember that it is the baby brother of the full framework and has nowhere near enough toys and throws a lot of NotImplementedExceptions. :)
Blackberry publishes its SDK on its web site. Its apps run J2ME, so with some Java experience it shouldn't be too difficult to get started. They also give you an emulator. Disclaimer: I have no experience in writing Blackberry apps, but I looked into it once.
I would not recommend a PalmOS based handset. I have written code for PalmOS and it's about as painful as writing raw Win32 code in C. Since Palm has switched its high end handsets to Windows Mobile, PalmOS will just remain stagnant and only run on the slower, less capable hardware.
If I were to write a mobile app, I'd agree that Windows Mobile is worth checking out.
It all depends on the users who you are targeting at, If you are looking for a wide market then you should be fine with J2ME/Blackberry . However most of them lack the touchscreen and wifi features ( The HTC range of phones [WIFI/TouchScreen/Windows Mobile] have a JVM built with it),so it would work on most of the Windows devices also.
If you are making a more niche product, moving with the current buzz 'iphone' will be good . Windows Mobile is also worth checking out
The best option here would be the Neo Freerunner, with that device you can build a dedicated unit were every aspect is made especially for you're needs. The Freerunner is WiFi enabled, and has a touch interface. If you use the Qt SDK, a lot of the work is already done for you. It comes complete with emulator, as a Live linux cd. You can run in a WM, such as wmplayer. Everything is included.
I'm not gonna lie, it will take tweaking. But the final product would be really nice and intuitive.
Looking at Windows Mobile devices, your requirement of touchscreen pretty much sets your pricing at the higher end of the spectrum. You'll get those things you say you don't need just because of that.
Here's expansys's selection of touchscreens.
Mobdeal is a handy one too as that effectively filters all phones by features.
I've developed against the HTC TYTN 2, HTC Touch Diamond and randomly a PSION Teklogix Ikon
There's generally very little difference between these models, some manufacturers have SDKs that can help sometimes.
I think your cheapest option will probably be something like getting HTC TYTN 2s on ebay. They're pretty old now (hence cheap) but have Wifi, camera, touchscreen, qwerty keypad all the things you seem to be after.
you can target iPhone "touch" platform with Apple's iPhone SDK. the development environment requires a Mac, but you can get the entire IDE + tool chain + excellent debugging and profiling tools for free. And the free documentation is top notch.
As a registered iPhone developer, it is free (no cost) to target the simulator, which is sufficient for most learning and development you'll likely need to up front.
To target the actual hardware device (and up to and including release/selling your app on the Apple's AppStore) is only $99/yr. If you got an iPod Touch for your hardware target, most of the SDK applies and you are not tied into a service contract for an iPhone.
iPhone app development environment is in Objective-C, but it is a really productive, object-oriented environment so do not concerned that that may be a language you are unfamiliar with.
If you decide that your mobile app(s) would be better suited as webapps, the iPhone/iPod touch platform again is an industry leader in this space, and you have the additional benefit or being able to target other mobile platforms (and not necessarily be tied to one mobile SDK).