I started developing mobile Android applications in late 2011. It wasn’t until 2012 that I released my first application to the Android Marketplace, now known as the Google Play Store. Up until early 2014, I only made native Android applications using the official Android SDK. As of now, I have only been using web technologies to create mobile hybrid applications for Android and iOS.
The following will explain why I’ve chosen to develop using modern web technologies rather than native mobile languages.
I’ve managed to develop a small list of native Android applications over the years. A few of these native applications are as follows:
During my early app development adventures, I never released any iOS applications because I already knew Java and didn’t have the time to learn Objective-C. I made several attempts at an iOS application, but they all fell flat because of the time commitment in learning something new.
At the beginning of 2014 I decided to start mobile application development using web technologies. In particular I chose to use Ionic Framework on top of Apache Cordova. A few of the hybrid applications I made are as follows:
All my applications, native and hybrid, have mostly positive reviews and if you visit the apps on Google Play, you’ll see no reviews include mention about how the application was crafted. This is an important thing to notice because many haters will attack developers on the idea that hybrid applications do not perform or look as good as native applications. This is simply not true. Native or hybrid, if the developer or designer is no good, the application will suffer regardless.
After having seen both worlds of mobile application development, I have chosen to stick with the hybrid path for the following reasons.
I’m an independent developer. I come from a Java background and don’t have the time to learn a new language as complex as Objective-C. Even if I did learn Objective-C and was comfortable in developing native Android and iOS applications, I still wouldn’t have the time to be able to support both platforms with updates. It would just take too long and my time could be spent elsewhere.
Imagine having an infinitely complex mobile application. Wouldn’t you rather update a single piece of code and have it work everywhere? Making a change in one place is better than making the change in multiple places (Android, iOS, Windows Phone, ect.).
Are you a company that has a lot of money to throw around and can afford to pay a team of native Android and native iOS developers? Great! If you’re an independent developer or are in a company that would rather spend its money wisely, this native stuff may not be the best choice.
According to Glassdoor, the American national salary average for Software Engineers in 2014 is ~$90,000. Imagine paying this salary to an engineer specializing in each of the available platforms on your team. Sure you can have an engineer be responsible for more than one platform, but is that going to get you the best possible application for the price?
Anyone and their grandma can build a website using HTML. It may not look nice, but the same could be said about someone building a native application. The magic comes in with JavaScript and the fact that hybrid applications can use just about any flavor of it. For example, the hybrid applications I made with Ionic Framework use AngluarJS. There is a good chance you already know JavaScript and even if you don’t, it is a lot easier than learning both Java and Objective-C.
When first making the switch, I thought maybe I would lose out on some of the native device features that I came to know and love. This is not the case as there are many native plugins available that give you access to core device features such as camera or GPS. In OTP Safe I have a barcode reader that makes use of the native camera. I was able to accomplish this in about four lines of code that worked on both Android and iOS platforms. If I were to do the same with native code, I’m sure it would have taken more lines and a longer time.
I have released applications that are native and applications that are hybrid. Both get plenty of downloads and positive reviews, but I was able to make the hybrid applications in a fraction of the time. Native developers might try to use performance or features as an excuse to not develop hybrid, but in reality, these two issues are disappearing every day and are almost non-existent.