Developing for Android is awesome. It’s a completely open platform with tons of support and a massive community to help you. It’s installed on countless devices and has a brilliant distribution platform that allows anyone to create a potential hit… blah blah blah!
Nothing is perfect and unfortunately, Android development certainly isn’t either. There are countless roadblocks and irritations that face developers and in many ways it’s more fiddly, more complicated and more frustrating than it really should be to get an app up and running.
So let’s lampoon the platform and maybe let of some steam…
1 Setting up
Unfortunately, the first experience most people will have when entering the world of Android development is not going to be a positive one. There’s just so much you need to do, from downloading all the individual components (IDE, SDK, JDK), to setting paths, building virtual machines and more. Best case scenario this is a bit of a slow process that’s kind of annoying and takes up a lot of space on your computer (especially the system images if you’re using the emulator). But in almost every case something won’t work quite as it should the first time around and it will end up taking even longer. In my most recent set-up for instance, I installed into a directory with white spaces, not realizing this would mean I’d forever have to load the SDK as an administrator!
I’m not saying it’s terrible – it’s certainly better than it used to be using Eclipse – but it could also definitely be better than it is.
Once you have everything nicely up and running, it will all be smooth sailing for a while. That’s until you have to update Android Studio, or test on a newer version of Android. And then that’s when new errors and issues come in and you have to spend a good amount of time looking up how to fix them. Again, this isn’t game over, but it eats into your workflow and it takes time which means money.
Testing on Android is a pain and really shouldn’t be as hard as it is. For starters, the emulator that comes packaged with Android Studio is super slow and often seems like it isn’t going to start up at all on older hardware (including my Surface Pro 3). Even if that works or you decide you’re going to test on a physical device, you still have to wait for the really slow build times to finish.
The most irksome bit of all (that’s right, I said irksome!) is when you click ‘Build & Run’ but actually didn’t mean to. Then you have to wait for the build to finish. There’s a ‘cancel’ option right there, sure. But it doesn’t work. I mean, why would it?
You could always use an alternative emulator like Genymotion (www.genymotion.com) but that requires a license if it’s for commercial use and it still isn’t exactly a speed demon. Then there’s the option of using physical devices, which brings us to the next issue.
This is one of the best-known frustrations when it comes to Android development. It’s great that Android is on so many different devices and that there’s such a variety of tablets and phones available for fans. But it’s not great when it comes to creating apps and trying to make sure they look good for every single user out there.
It’s also not good when OEMs like Samsung add their own changes to the OS. And it’s not great when so many people are still running older versions of Android. You’re forced to choose whether you want to add a cool feature to your app and restrict who can use it, or let everyone play but miss out on what could have been a really neat addition.
When I released a launcher with a friend a while back, we first invited a wide selection of people to be beta testers to make sure it worked. We tried really hard to make sure no-one would be left out and tested for months. And as soon as we launched? The error reports came in. Check the reviews of apps in the Google Play Store and you’ll find that even AAA titles with massive budgets have this issue.
5 The layout editor
Just to add insult to injury. The designer in Android Studio is useful to a point but quickly falls apart when you try and create anything a bit more complex. This means you’ll likely end up doing most of your design by writing the XML by hand, or even by building views programmatically (my preferred method). There are huge amounts of documentation online explaining how to add simple UI elements in various configurations, which highlights the problem. I guess we’re lucky we have a designer at all and it’s no problem if you prefer doing things by code like me… but apparently iOS users don’t have this issue and it would be great if you really could just drag and drop your buttons and images into place.
6 Peculiarities of Android programming
There are all sorts of fiddly things I could bring up regarding the actual process of programming for Android. A lot of processes just aren’t as straightforward as they could be but let’s just look at a couple for now.
Threading is a pain because you can’t update UI elements from other threads, meaning that you need to come up with roundabout solutions. View restoration is a pain because you need to remember to save everything and then rebuild it when your app gets rotated. Working with APIs is regularly an uphill struggle. And often when you just want to do something simple, you’ll find that there are multiple ways to go about it and everyone has conflicting opinions about which is best. Generally the learning curve is much harsher than it needs to be.
Often when you just want to do something simple, you'll find that there are multiple ways to go about it and everyone has conflicting opinions about which is best.
This is pretty much the case with programming on any platform (especially mobile). But that doesn’t change the fact that it can be incredibly frustrating. Hence it goes on the list.
7 Outdated information
The peculiarities of Android programming wouldn’t be so challenging if you could quickly bring up useful advice on how to work with them. And often you can. But just as often, you’ll find yourself loading up documentation that is completely outdated and no longer useful. And you won’t always realise that’s the case until you’ve already wasted 20 minutes trying to implement the solution…
Of course it’s great that Android is constantly evolving and I guess this goes with the territory. But still, when Google is constantly changing its best practices and code is regularly depreciated, it can be a nightmare trying to keep up and find useful guidance. It helps if you filter your Google searches to show only pages from the last year, FYI.
To a developer, it can sometimes seem like all users on the Play Store are aggressive morons. I get constant emails demanding refunds for example; which would be fine if there wasn’t a refund system already built in to the Play Store. I also get a ton of bad reviews from people who simply didn’t understand what it was that the app would do (i.e. they didn’t read the description) and now feel cheated. There’s the angry emails from people incensed at the fact that they have to pay for my app or simply asking outright if they can have it free. Then there are the unrealistic demands about features that I should include.
They have to pay $1.60. For an app that I’ve been working on for years. It’s much less than a cup of coffee and don’t worry it’s only my dream to be a self-employed developer/writer. But hey…
Sure, you get some very nice stuff too and that can be a real pleasure to read. But a lot of the reviews and comments will just crush your soul…
Even more soul destroying is finding your app available as a free download on a dodgy website one week after launch. If I search for my best selling app in Google, the second, third, fifth and seventh results are all sites where you can download the APK for free. I guess I could live with that but what’s even more annoying is that my least successful app is also being pirated. I’ve had 15 paid downloads for a game but it’s still being downloaded for free. This is a big problem for Android and one that really hurts developers.
10 (Relatively) low profits
So you’ve fought to install Android Studio, you’ve dealt with the updates and you’ve battled your way through the layout editor and APIs. You’ve suffered the bad reviews, overcome the pirates and dealt with fragmentation. And what do you get at the end of it? Much less profit than you would do from iOS. Or PC software. Or a game on Steam!
Anything I missed? Let me know what you find to be the most frustrating part of developing for Android in the comments below.
But hey, it’s not all bad! In fact, we have it pretty good overall; I’m just being dramatic. Like I said at the start, there are some amazing advantages to Android development and lots of compelling reasons to get started. We’ve got loads of (up-to-date) guides to help you dive in on Android Authority and if you’d like to see something a bit more positive, check out my post on the top perks of being an Android developer.