As you guys no doubt know, I opted to release Dare the Monkey on iOS first then focus on Android shortly after. Well, that ‘shortly after’ turned out to be a significantly longer period of time than I’d hoped. Here’s why.
I spent a considerable amount of time optimising Dare for iOS. From iPhone X, all the way down to the ageing iPhone 5, the game runs more-or-less identically across all models. It wasn’t easy, but it was well worth the time and effort.
On iOS, the trick was really to get the game running smoothly on the lower-end devices first. I picked the iPhone 5 and iPad mini 2 as my base specifications, and by getting that silky smooth 60fps on those devices, I was pretty much guaranteed that it would run just as well on the more recent models.
It makes sense. Each new model of iPhone and iPad is typically more capable than the previous version. Unfortunately the Android eco system just doesn’t work like that.
You see, there are thousands of Android devices out there in the wild. RAM, storage space, clock speeds, GPU performance, and OS versions vary wildly across them all. Just because an Android device was released this year doesn’t mean it will be better than the majority of handsets released a few years earlier. I found this out the hard way when I started porting Dare.
The first issue was selecting some Android handsets to develop with. I was eager to keep my costs down so started with a few ancient Kindle Fire’s I happened to have access to. If I could get it running on my 4 year-old Kindle then surely it would run on just about any Android device, right? Wrong.
I didn’t realise it at the time but Kindles are quite magical devices. Not only are they fairly inexpensive, they are also extremely capable. Dare was up and running in no time on my test Kindle and it was quite happily splatting pixels onto its screen without even breaking sweat.
The same couldn’t be said for the next few devices I tried. I’d purchased a Samsung Galaxy S6 and also a second-hand Samsung Galaxy Note 5. The S6 was released three years ago, sold well, and still seems to have a decent user base. The Note 5, was a slightly newer device with a bit more RAM, and my hope was that it would be a fair representation of what most Android users had at the moment.
After the early success with the Kindles I was confident Dare would just happily run on both these devices. However to my horror that didn’t turn out to be the case. The frame rate stuttered badly on both handsets with some of the game’s levels being borderline unplayable. Further tests on some really cheap Android phones produced even poorer performance. So what was happening?
Dare the Monkey may seem like a simple 2D platform game, but it does actually throw quite a lot at the GPU. There’s a huge number of parallax layers in use, and I also use alpha transparencies to good effect throughout the levels. While Apple’s GPUs seemed more than capable of handling this type of content, several Android handsets tend to struggle. After quite a lot of trial and error I was able to strip out enough alpha transparencies, and the odd parallax layer here and there to get things running well on my test devices.
It wasn’t just the GPU that was the bottleneck. I make use of physics throughout my levels and several of my test devices just couldn’t cope even with some fairly basic in-game physics. More time was spent tweaking these issues while trying my very best to ensure the average user wouldn’t be able to tell the difference between the original iOS version and the optimised Android one.
There were also a few other quirks about the Android OS that had me scratching my head. After all my optimisations, I was still noticing that the performance of Dare on both the S6 and Note 5 would occasionally just drop off a cliff. It was really odd. The game would be running fine one day, then the next day it’s frame rate would be stuttering all over the place. This turned out to be both these handsets doing downloads of the latest OS update in the background.
It seems that running Dare the Monkey and downloading the latest Android update is too much for some of the older handsets. The only solution was to switch off background updates, something I’m hoping Android users know to do. Not being familiar with Android it was something I just wasn’t aware of.
So all in all, what I originally thought would take about four weeks ended up taking three months! Sure it wasn’t entirely down to my struggles with Android. I was also making frequent updates to the iOS version, which was time consuming in itself.
I still don’t have performance parity with iOS but it really does depend on the Android handset you have. Fragmentation is just the reality of Android development and something you just need to work a little harder to deal with. I’m happy with the performance I’ve managed to squeeze out of my test devices and I’m pretty sure the majority of users will get a decent experience. Those with brand new Android devices should have something that’s more-or-less identical to the iOS version.
So is the Android version ready yet? Yup, just about. I’ll be releasing it on the Google Play store in the coming days. I’ve still to go back and get things working for the Amazon App Store, but that’s something I’ll look at after I’ve pushed the button on the Google Play version.
Thanks for reading.