I wish Google would take the problems of cross phone compatibility more seriously. Without it the entire purpose of Android is compromised, and yet, they don't seem to put much effort into ensuring compatibility or motivating manufacturers to ensure it.
For example, while I support Google's decision to keep the Android market open, I don't see why apps that simply crash upon launch should be allowed allowed to be sold and downloaded to people's phones. Google can easily detect / track this kind of thing and automatically flag phones not supported as incompatible, refund users and notify the developers. On the developers side, they should have access to an extensive database of compatibility information so that manufacturers are shamed into seeing devices that are hard to support getting black banned in the market and crossed off support lists by developers.
I don't think you need an authoritarian approach like Apple's to make things better, but you need to do more than Google is right now.
I work for an app company and can verify his comments.
Apple has done a great job at getting its users to pay for apps. They've done this via:
1) Encouraging Developers to not price free apps (this happens sometimes in review, in their literature, etc.)
2) Capturing device owner's credit card info at the start (so buying an app is frictionless)
3) Removing low-quality, buggy, copycat, and junk apps from the store via their review process
Google, on the other hand, has done just about everything wrong if you want to make money from paid apps. I suspect this is because Google wants to make money via in-app ad impressions and with free apps that's the only way you can make any money (in-app purchasing notwithstanding).
1) No review encourages spyware, copycat apps, buggy or broken apps, etc.
2) Android's "return policy" (which has since been tweaked) encourages people to pirate apps anyway (it's super easy to do so)
3) Initially (I'm not sure if this is still the case) you could sign up for a market account without a credit card, thus leading to a lot of friction when it came to paying for an app (entering your CC information was a royal pain).
Also, I share the frustration with the internal v. external/removable storage problem. Our apps are traditionally larger (content-centric, with lots of high quality images, audio, video) and have always ran into problems with Android devices' limited on-board storage.
This was purely a cost decision by Google and a profit decision by vendors/carriers as vendors wanted to produce devices as cheaply as possible and make a killing on SD cards - sell a device with xxxMB storage and no SD card, then force the consumer to go out and buy an overpriced SD card (usually at point of sale).
This all makes Android a developer-hostile environment; yes it's easier to initially get setup on Android (no provisioning profile, etc.) but it's all pain after that. If I had a choice, and didn't make cross-platform apps w/ PhoneGap, I'd write iOS apps first/only.
I _bought_ it for the Kindle Fire. It's actually my son's preferred gaming platform (compared to Wii, 3ds and Leapster Explorer) probably because the game are so accessible/easy to use.
I've often considered getting into game development on the android. However, it doesn't look like a profitable venture.
If the makers of a fantastic (highly rated, almost 5 stars on the amazon app store) game aren't making money on the Android platform...what hope is there for the rest of us.
I've been doing iOS dev for a while now and I'm considering expanding to Android as well but stories like this give me pause. I guess I've been spoiled by an environment that's homogeneous enough that I don't have to worry about things like GL shaders mysteriously failing on some devices etc.
Can more experienced devs comment on how common these kinds of problems are in practice? If I do some Android ports for my clients do I really need to buy 10+ devices and debug on each of them?
Your instincts are correct here I think. If you're writing games then I suspect this is pretty accurate. You'd likely have to purchase a lot of test devices and do a lot of tuning to keep up with the hardware. Android vs. iOS game dev strikes me as a lot like the difference between windows and console game development.
If, however, you're writing basic apps like I am and using the standard development tools then it's a lot less of a hassle. I primarily write appwidgets (apps that run on the home screen). Theoretically these have could run into more fragmentation issues since various manufacturers have built their own home screen replacements and improved appwidget capabilities have been a focus in 3.x, 4.x. Yet in about 2 years since I started I've rarely hit a device specific issue and I'm supporting 2.1 - 4.x. I have about 3000 active users so not exactly large scale, but enough that if it were a serious issue I think I'd be hearing about it more.
I have two devices - a nexus one to test on 2.x/phone and a transformer prime to test on 4.x/tablet. Other versions I spot test in the emulator (admittedly this is awful). That's been sufficient for me.
I'm sympathetic to the technical difficulties of developing and maintaining a high quality game for the platform, but that shouldn't scare anyone off from developing regular apps.
Interesting. The apps my clients have asked me to write so far are pretty straightforward so maybe I could also get by with only a few devices. I'm certainly not doing anything that pushes the hardware as hard as a game.
For those who may not know, and because it's not mentioned in the blog post, Mika Mobile develops their games in Unity.
It's a testament to the challenge of developing games to work on all Android devices that even with Unity's support they still have to spend so much development effort on shaders and debugging device specific issues.
What the hell are you talking about? Aside from admob integration on games that developers add themselves, what ads are you seeing on the platform outside of websites?
Google wants the Android platform to move away from SD Cards, their Nexus series really shows this. The Nexus S, their second Nexus phone, had no SD card. However, due to the requirements of a separate filesystem for USB Mass Storage, they partitioned the internal storage into two.
Then you get the Galaxy Nexus, with only one partition. It features Ice Cream Sandwich, with MTP (Mass Transport Protocol). MTP allows access to a filesystem without unmounting it, so the phone can continue to use the filesystem. The only real disadvantage of MTP is that OSX and Linux support is limited, since it is developed by Microsoft. It should also be said that ICS still supports USB Mass Storage, but the Galaxy Nexus cannot.
The Asus Transformer also does this, using a large internal storage with no SD card. More phones might switch to this model, but for now the SD card is not going away.
From what I understand, its because there is always 'wasted' space. If you have lots of movies and music, you might have a full SD card but empty internal; lots of applications and the opposite might be true. With a single internal space, all this goes away. Personally, I never want to remove my SD card because it houses so many applications and files I use on my phone.
I would be interested to find out how MikaMobile did sales wise with their Kindle Fire version of Battleheart. It would be a good gauge to base what the total potential a developer has for supporting the Fire and ignoring the general Android market. I remember (back in the day) when they first announced Zombieville USA on iPhoneDevSDK, they have grown a great deal since then and I wish them all the best.
Seems fine to me. No money being made, no money to pay for development. I don't blame this on Android phones or users, however.
(Bandwidth is, sadly, becoming a big issue these days, because nobody offers unlimited plans anymore. 5GB per month means one max-size app and maybe a few text messages before you start paying one billion dollars per nanobyte in overages. It's like 1980s long distance all over again.)
"I don't blame this on Android phones or users, however."
You might not, but Mika Mobile sure sounds like it does.
"I would have preferred spending that time on more content for you, but instead I was thanklessly modifying shaders and texture formats to work on different GPUs, or pushing out patches to support new devices without crashing, or walking someone through how to fix an installation that wouldn't go through. We spent thousands on various test hardware. These are the unsung necessities of offering our apps on Android. Meanwhile, Android sales amounted to around 5% of our revenue for the year, and continues to shrink."
"I don't blame this on Android phones or users, however."
I am forced to call you out on this misinformation. It is the Android _phones_ and _users_. Android based platforms like the Nook Color and Amazon Fire both have good app revenue in my experience. Android phone revenue is at the bottom for the apps I sell. Of course, iOS is at the top.
I'm willing to listen to any counter-points you may have to back up your claim that it's not the Android ecosystem. Fire away.
Cross out phones (which I read as phone makers not "android") and users and you have Google left.
Which makes sense since many of the cited disadvantages ultimately lie with Android and Marketplace implementation decisions made by Google.
I'm not sure Andy Rubin would disagree much either but what he might say candidly is Google takes the long view. And the long view is that Google Play today is far ahead of the Marketplace two years ago and in 2 years it will be ahead of where they are now by an even larger margin. And the same thing with development tools. And the userbase advantage will be even larger.
Apple caps 3g app downloads at 30mb I think. Any bigger than that and you need to use wifi or sync via iTunes.
It would be nice if Google would implement something like this for Android. I didn't even know about this limitation until today ( I'm an iPhone user/developer).
Android App store warns you that you are about to start a large download via 3G and asks if you're sure you want to do so. Personally I find that a much better approach. Apple doesn't know the details of my contract and if I want to download 70 (or 170)MB over 3G, surely that's my prerogative and why should my phone stop me?
I have unlimited 3G data plan on my iPad and it always hated that Apple won't let me update some apps until I'm near WiFi spot... until I bought Galaxy Nexus inserted SIM from my phone with limited data plan and it exceeded my capped data plan in the first hour (OS updates).
Perhaps Mika Mobile's problem is that they are trying to provide support like a large company without the resources to do so. I certainly applaud their effort, but would it have been more economical to simply tell people that they can give a refund and that's it?
It seems a shame that they're giving up their position in the Android market and abandoning some hard-won experience.
If only people spent as much time working on a decent platform like Andengine (which works on most devices with little effort) instead of porting ios code and ending up with apps that only work on devices they were tested on (or complained from).
It makes sense they have to deal with problems all the time since they clearly don't have a thorough understanding of the Android platform itself and what it takes to actually support the range of devices. Buying $1,000+ of test hardware will also not fix your problem if the problem is not doing things properly. You certainly won't get it by patching ios-based code every time a customer complains.
How do you anticipate problems like buggy GL drivers with inconsistent shader implementations? At the rate new devices are coming out it seems impossible for any framework to cover them all.
Fair point, but like I said, if everyone works in bubbles they will all have to deal with this over and over again in different ways. Since these game companies are not actually doing anything for the platform itself, like sharing their libraries for dealing with the issues, they of course will find it painful.
This reminded me completely of the pre-jquery era where if you wanted some advanced JS functionality you'd have to reinvent the wheel over and over in dealing with browser inconsistencies. After years of bitching and moaning people finally released libraries to deal with the issue.
These companies have the right to complain, but complaining will not actually help solve anything except give them a way out avoiding the the complexities of porting platform-specific code to another platform.
For example, while I support Google's decision to keep the Android market open, I don't see why apps that simply crash upon launch should be allowed allowed to be sold and downloaded to people's phones. Google can easily detect / track this kind of thing and automatically flag phones not supported as incompatible, refund users and notify the developers. On the developers side, they should have access to an extensive database of compatibility information so that manufacturers are shamed into seeing devices that are hard to support getting black banned in the market and crossed off support lists by developers.
I don't think you need an authoritarian approach like Apple's to make things better, but you need to do more than Google is right now.