Battleheart Developer Drops Android As 'Unsustainable'
mr100percent writes with this excerpt from Electronista: "Battleheart's creator Mika Mobile in an update explained that it was dropping Android support. Google's platform was losing money for the company, since it spent about 20 percent of its time supporting the platform but only ever made five percent or less of the company's revenue. Much of the effort was spent on issues specific to Android, where the diversity was only creating problems rather than helping.
'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,' one half of the husband and wife duo said. 'We spent thousands on various test hardware. These are the unsung necessities of offering our apps on Android.'"
Just spent the week at the Game Developers Conference in SF and this seemed to be a bit of a recurring theme from having conversations with a couple mobile developers. The cost of supporting Android is too high in many cases and not worth the effort.
Once of the sessions I sat in on (can't remember who it was now, embarrassingly - I think it was PopCap talking about Bejeweled - not a bit player) pointed out that Android has many many variants on many different handsets. Even though the market size is roughly the same as iOS (his numbers were around ~250m each), iOS has way fewer variants to deal with, whereas Android had many. So you get to spend a lot of time messing around trying to make sure it's working on all platforms.
I've noticed from flicking through app reviews in the Market, it's not uncommon to see people with complaints about it not working on their particular handset. I haven't had this problem with anything I've tried so it's hard to tell how big a deal it is, but I don't use many apps.
The general feeling I got from speaking to a few indie developers was that they wouldn't bother doing an Android version unless their title turned out to be a big hit on iPhone.
For these devices (mobile devices) though the problem is that
1) you have to go pretty deep into the guts of these devices to get the performance required. I would compare it to some of the tricks that were used in the first 3D shooters like Doom etc. in order to render properly.
2) Not all device support the whole subset of whatever environment you may want to use. I think that was the main problem here is that you program a specific shader through eg. the OpenGL interface (is that even available on Android?) and then device x comes along and the manufacturer decided to either drop or not implement that feature in their GPU in order to save costs, brainpower etc.
Custom electronics and digital signage for your business: www.evcircuits.com
You don't get free markets with 800lb gorillas like Apple and Google in the room. Stop kidding yourself.
Seven puppies were harmed during the making of this post.
So they've done the right thing. They're not interested in sympathy; they found that a particular product on a particular platform was unprofitable, so they dropped it.
Quidnam Latine loqui modo coepi?
Which is why they're making good money on the Apple market, right?
Justice is the sheep getting arrested while an impartial judge declares the vote void.
Development isn't a test of machismo or stoicism. The Android version wasn't making any profit for them. Time is money, and when you're having to do more more work than the sales you are making, it's a business decision to stop doing it.
iPhone is less work for much bigger sales.
If only your lack of knowledge meant the problem didn't exist.
How about "sales are significantly lower"? They say they're making about 5% of their income from Android with the remaining 95% presumably from iOS (I doubt that Windows Phone is a factor). That would mean iOS gets 19 sales for every 1 sale Android gets. If this applies to more than this developer then it's a real reason to make iOS software instead of Android software.
Justice is the sheep getting arrested while an impartial judge declares the vote void.
That's not the real problem, if the GPU doesn't support a feature you can fall back to another implementation. The problem arises when they don't properly advertise what features are available. OpenGL has this in the API, but most mobile drivers say they support features they actually don't have.
App development for any mobile platform is a lottery. Most developers make very little from it. A few make tons of cash. Even on Android.
Android has what, four versions in the wild? iOS has 3, 4 and 5 taking up something like 15, 20, and 65% roughly. Not a great deal of difference there.
You've conveniently ignored the hardware diversity.
This sounds like a complaint from a guy who is basically saying "Development is hard, and I don't want to work to make things good". Just as well he's calling it quits, shape up or ship out I say.
Yeah, fuck him for having limited resources and wanting to make a living out of a small business.
Apparently, a whole range of devs can't release a quality product on Android while they do just fine products on iOS. Coincidentally, it's all the devs that needs 3D Rendering.
Go figure. It cannot be that Apple's platform is much more leveled. Nah. Can't be.
Write boring code, not shiny code!
Angry Birds is a bad example. When Angry Birds first came out, there was an official list of 20 Android phones that it wouldn't support, including some then current phones.
Right now they claim there are some Android phones that it doesn't support.
http://www.rovio.com/en/support/faq&support_device=Android
Have you looked at the specs of modern smartphones? Dual core CPUs are increasingly commonplace, with quad core on the way - in fact, already here in some of the high-end tablets. We're talking about Android devices here, not sub-£50 "feature phones". Comparing the tricks needed on this sort of hardware with what was required to squeeze performance out of DOOM-era PCs is an insult to the ingenuity of the programmers behind the early ground-breaking titles. OpenGL ES 1.0 has been available since API level 4 (Android 1.6), and 2.0 available since API level 8 (Android 2.2).
The primary language for Android development is Java. You *can't* go "pretty deep into the guts" from so high up; that's the very reason you can run the same bytecode on x86 and ARM devices. Yes, there's always the NDK if you really want to use C/C++, but if you stray outside the realm of the supported libraries then you deserve everything you get.
MASSIVE DISCLAIMER: I'm only just getting started with Android development myself. Still, I have to wonder how many of the problems lie with the platform, and how many lie with developers not really understanding what they're working with, assuming that the size and nature of the audience automatically turns mobile game development into some sort of free lunch.
* We all know that GPUs have driver issues, but don't rule out the possibility that issues are really to do with your own code: in my limited experience with OpenGL on the desktop, it's easy to write something that only works on certain hardware because you have unintentionally violated the spec, for example by setting something outside its officially specified range of values, or assuming some default piece of state which the standards don't mandate. Unless you're writing the next Unreal, this is more likely than uncovering driver issues with your 2.5D platformer or simplistic first-person engine. Keep your rendering pipeline as simple as it can be.
* Apps published on the marketplace had (until very recently) a size limit of 50mb. Anything above that had to be installed via a follow-up download within the app itself, which adds complexity, and increases the chances of failure. This limit has now been raised to 4GB, but before that, any developer blowing the limit ought to have thought long and hard about whether they really needed to before going down that route. Even if you get it right, there will still be scores of complaints from users who just don't understand that trying to download several hundred megabytes (non-resumable) over a patchy GPRS connection is just not going to end well, no matter how much care you take to warn them up front.
* I could be missing something here, but it appears to me that Android doesn't hand-hold your application through state management, especially if you're using OpenGL. This isn't just about saving basic state such as high scores, but the much lower-level business of simply writing something which is robust in the face of how Android handles multi-tasking. Read up on what events can and cannot cause an app's EGL context to get trashed, and what exactly you need to do when that happens. Remember the bad old days not so long ago, when alt-tabbing was a good way to crash full-screen games on Windows? Well, those days are still with us, just not on the same platform.
* Another good thing to understand is how to use the manifest. Declare what screen sizes and orientations you support, what texture format support you expect from the hardware, and so on. I have no evidence of this, but it wouldn't surprise me if some devices claim support for texture formats which they can't actually handle (those pesky GPU vendors), but hey, sometimes issues are out of the developer's hands - that's what trial versions are for, right?
I'm not saying it's easy. I don't fully understand how to navigate my way around most of the above issues myself, but rather than le
Which is why they're making good money on the Apple market, right?
Of course, other developers have had the opposite experience. For example, Angry Birds makes more money from Android than iOS:
http://news.softpedia.com/news/Angry-Birds-Makes-More-Money-from-the-Free-Android-Version-than-from-Paid-Ones-170596.shtml
While their business model may work fine on Apple market, sometimes it takes changes to make money in a different environment.
It's not Android that's unsustainable, it's their business model on Android that appears to be unsustainable.
I was about to ask if you were thinking of the TabHost bug where clearAllTabs() will randomly provoke a crash. But a quick DuckDuckGo search turned up a bunch of other mysterious bugs with the Android tab bits. My favorite was issue #12359 where the fix is a couple of lines, and it would be an easy fix were Google to not mark their classes as final (thus preventing you from subclassing them). Unfortunately the proper fix is to roll your own copies. The official Google response was to ignore the problem and tell everyone to stop using ActivityGroups (which are useful in tabs) and start using Fragments (introduced in Android 3.0).
Google applies their hands off approach to updates and support to both hardware (as evidenced by all the fairly new phones that don't ever get updates) and software. I'm pretty sure Google never fixed the broken widgets in Android 2.3, leaving developers to completely reinvent even rudimentary pieces of the Android framework.
QA in Android is a freaking mess, I'm not surprised that the Battleheart team gave up on it.
The revolution will be mocked
All of you who are saying this developer and their code just sucks, you've never written any significant mobile apps, have you ?
I work with IOS, Android, Blackberry, WinPhone7. IOS and Win7 are a walk in the park, compared to the other two. IOS, specifically, has stellar compatibility across all devices. I only encounted a single issue with one of my apps, when upgrading to IOS 5, and it had to do with some marginal code I was using, whose undocumented functionality had finally been obsoleted. The fix took all of 15 minutes to research and implement. Most importantly, I only need to design for two sizes: phone, and tablet. If I'm lazy, I can skip the tablet, and let it scale things proportionally. This isn't optimal, but for some apps it's sufficient.
On Android and BB, there are as many display sizes and feature sets as there are devices. Your app might look fine on your emulator and personal device, but be completely out of whack on another, so you end up having to collect numerous devices and installing a dozen emulators to cover any significant portion of the user base. Let's not forget that these emulators are horribly slow and unstable, so if I have to test and debug a build in 10+ different environments, there goes my afternoon. That's for one build! It's quite simple: for Android or BB, I typically take the IOS budget and double it. If I were writing 3D games, I would probably quadruple it because now there are countless GPUs to target and no good middleware available to abstract away those differences. Android and BB development is at least 10 years behind, in terms of comfort and convenience. It often reminds me of writing DOS software.
Windows Phone 7 is actually not too bad. For anyone experienced with Visual Studio, it's a very familiar workflow and has much commonality with IOS development. It's extremely fast to work with, and you can get a good sense of how your app will scale, just by resizing the workspace as you're designing it. I don't care much for the platform itself, but I don't mind developing for it - I find the toolset quite pleasant.
-Billco, Fnarg.com
I know OpenGL isn't made of magic, but isn't the idea of OpenGL that it's supposed to work over multiple platforms?
The point (and it was a good one) is that for iPhone he only has to do his shaders once. Bam, done. For Android, not only is he doing them again, but multiple times for different devices. His development cost to bring his app to iPhone is one set of shaders for a great return. What do you think his return is after he spends the time to fix his shaders for an obscure device that a few dozen people will likely purchase his game on? He either fixes it and takes a loss. Or he doesn't fix it, let the people deal with a buggy implementation, and then have people like you come along accusing his app of being buggy. It's a lose/lose, which is exactly why he said he's leaving Android.
Not only that, but a mature platform doesn't have issues like shader disparities. If you're a game developer, that's a huge problem you should not have to deal with across the same platform. Desktop games got over that years ago with standardized shaders for each platform. I'd forgive Android if Android had it's own shader platform, but shader differences per device? Not cool.
Battleheart's Google Play page indicates that it's been downloaded 50,000 - 100,000 times. It has an average rating of 4.7/5 stars, based on 5,374 user ratings, and the overwhelming majority of those reviews are 5-star reviews.
And if you sort reviews by latest, you can see that at least a couple dozen of those 1-star ratings were given today, in an apparent fit of "sour grapes" where users are giving the app a 1-star review with comments like, "The developer will no longer update this app. They stated that Android development is too hard for them and will no longer update their apps. Since when is objective C easier to write than java? Disgusting and Lazy!"
Yep, sounds like a poorly written, buggy piece of shit to me. I'm sure the developer is just lazy, incompetent, and shilling for Apple. It couldn't be that Android has legitimate shortcomings that Android device manufacturers could learn from to improve their platform.
I bought the game last year, and this article got me to thinking. I cannot recall when I last saw an update in the market for it. So, I pulled up AppBrain page for it, and see updates were coming in from May to July 2011. Then there has been nothing since. So, I have to wonder how many tweaks to the shaders and whatever they say they really did? I mean, they gave up on the game a long time ago. It hit 50k purchases in August, so there's $150,000 in sales made. Google takes what, 30%? So that's $105,000 minimum.
I know I've seen some nasty comments in the user reviews on the market, so I pull up their page there. I see 4991 four or five star reviews, and 383 one to three star reviews. That's just 7% of the reviews are bad. That looks quite good to me. Looking at the recent ratings, there have been many of the 196 one-star reviews posted just in the last couple of days. Since March 1, people have been giving it one star for not having updates like IOS has (Did that version just get an update?), which is an understandable sentiment.
Now, that's considered a failure for small-time developers? They really put in more time/effort on this than to make it a losing venture?
As usual, the summary distorts TFA, but TFA clearly states that the developer's main complaint is a 50Mb limit to the download cache for Market apps. They then state that they don't want to commit resources to making game data a separate download.
Think about that for a scond.
This is not a challenging task, even for a moderately skilled coder - it's a solved problem. Now I have no doubt there's good reasons why this one developer can't support Android, despite 250,000 apps making it there, but the reason given in TFA is not the real reason.
In reality, what's happened is that Google, recognising the need for larger apps and data, has increased the size of downloads from the Market as Expansion files. They did this so they could track when large in-game downloads were completing, because unscrupulous dvelopers were using large/slow downloads to make sure the user had no opportunity to finish the download before the refund period expired. Now the Market tracks that the user has completely finished downloading large applications, then starts the refund period. Most newer devices should download expansion files automatically, but older ones download them when you first run the application.
I'm not suggesting that a developer with a poor quality port from a different platform might want to deny users the opportunity for a refund. Though, if they are really having trouble implimenting something as simple as in-game downloads, I might question the quality of their other work...
"I've got more toys than Teruhisa Kitahara."
I am the author of projectM, a much more complex graphical application that the game in question here. Android fragmentation is an issue for me, but ONLY because of live wallpapers. The "standalone" version of my app is amazingly consistent across the different Android GPUs. I suspect their developers are not very experienced with OpenGL and shaders. The entire point of OpenGL is to abstract the GPU away from the developer. It works. projectM is profitable. What I take from this article is that an iOS port could bring me to Apple levels of profitability!
Here is exactly where your theory went 'splat': You're operating under the assumption that the iOS version of Angry Birds is only available as a paid app (hint: your assumption is bad - the numbers presented bear me out on that). There is zero mention of the revenue made in ad revenue from the iOS ad-supported version (if you assume that the purported $1m/mo. is all from Android ad-supported apps - any other alternative doesn't help you either).
The author's theory is that ad-supported makes more money than paid versions, but makes zero distinctions as to whether the Android version of the ad-supported app makes more money than the iOS version of the ad-supported app.
QED: You screwed up in choosing your cite, because it doesn't support your conclusion at all.
Quo usque tandem abutere, Nimbus, patientia nostra?
In my experience new developers are very bad at adapting to new ways of doing things and very good at blaming the system for their own problems. They'll do something that is not the right way to do it on this system, hasn't been for a long time, is documented on how to do it, and then blame the system.
Two of my favourite examples of developer laziness:
1) Lack of 64-bit apps for Windows. While I realize most apps don't need to be 64-bit, and 64-bit Windows provides flawless 32-bit support, you should still have 64-bit version available. They do run a tiny bit faster and it is just the right way of doing things. Let's start getting rid of the legacy stuff. What's more, it isn't hard to do, at least according to the developers I hang out with. You set the compile target for 64-bit and go. Maybe a couple things to correct but all in all the compiler takes care of the details. However most don't. The reason is they were doing shit in the code they never should have, like casting pointers in to 4 byte integers and so on. They write bad code, and it makes 32/64-bit porting a problem.
2) Drivers. Back when Windows 2000 came out, it introduced a whole new audio driver model, a much better one, called WDM. It supported the old NT drivers for legacy, but WDM was the way to go. Well the pro sound card I had wasn't getting WDM driers. They claimed WDM couldn't work for pro software because of a built in delay. That sounded wrong so I checked the docs and sure enough, there was a mode (KS) that bypassed it. Finally the driver came out and supported only 2 of the 8 channels. They claimed it was a limitation of WDM. Again checking the docs revealed that wasn't true. Eventually they got a fully working WDM driver but it took a long time, over a year, and much blaming the new format.
So I could see it often being the case for Android too. Developers know one way of doing things, it asks you to do things a different way. Developers ignore that and do it their way, and it leads to problems.
While I'm not saying Android is 100% blameless here, you need to make sure you are doing things the way the platform wants, regardless of if that is the way you like to do things.
Finally there's just the fact that people need to accept that maybe mobile phones aren't as profitable as they want them to be. Yes I know, Angry Birds made eleventy kajillion dollars. You aren't angry birds, you aren't going to make so much. Some people have the right combination of luck, timing, and talent to make a shitload. Many others will not make a ton. That's life.