TL;DR – I’d like to start working on this again.
The Story So Far
Over 11 years ago I started a project to port CorsixTH (a fantastic re-implementation of the Theme Hospital engine) to Android. It was the first “real” Android application I had built, and was an opportunity for me to learn what was involved in building an application that contained both native (cross-compiled) and Java sources. It was never meant to be anything other than a learning experience – at the time I was an intern and had a reasonable amount of free time on my hands for learning new skills.
Developing for Android was simple in 2012 – even when trying to cross-compile and bundle C++ code. Architectures were simple, both in terms of hardware and software. If you were running Android, it was on ARM hardware (specifically 32-bit ARMv6 – if you were lucky with VFP!). Android was an inherently open platform too, and that inspired really exciting development albeit at the expense of having to accommodate very specific device quirks.
Fast-forward to 2023 and development for Android is almost unrecognisable. Privacy and security is, rightly, a much larger concern and has played a key part in driving the software architecture. It’s no longer a case of if the hardware is available, it can be used, but rather you are forced to use dedicated Android APIs which restrict access. This puts up many more barriers to deploying and running code that has not been specifically designed for the platform.
A good example of this is accessing storage. With older versions of Android, opening any file on the filesystem was no different to any other platform running Java. You have yourself a file path and you’re free to do whatever you like. These days, it’s really difficult to access anything other than your app’s own data – if you need anything else then you have to rely on the notoriously slow Scoped Storage API.
Not only has the software architecture got more complicated, but so has the hardware. No longer do you have to target ARMv6 and immediately have access to the vast majority of Android devices, but instead you have to also target ARMv8, X86 and X86_64 (you can’t even publish on the Play Store without!). That in turn also means supporting 64-bit, although at this point that’s just a really sensible thing to be doing anyway.
In my personal life, things got busier. Since the early versions of CorsixTH for Android, I’ve graduated from University, changed jobs twice and got married. All of that meant that the overwhelming burden of keeping up to date with the changes imposed by Android as the platform got more and more mature, were just too much to deal with in my spare time. Eventually, I wasn’t able to keep up and Google delisted CorsixTH for Android.
The short version is that I’d like to start working on my port of CorsixTH again.
The long version is that I’m not sure how long it will take to get it into a working state again, if ever. I’ve been inspired by some recent development I’ve completed on another app, Inno Setup Extractor, and I’ve got some great ideas I’d like to get started on.
None of what I mentioned before has changed though. Android is so different to when I last worked on CorsixTH for Android. There’s a monumental amount of work to even get it to compile again, let alone in a runnable state on modern Android and devices.
I’d like to go back to the beginning and take it as a learning experience too. I’ve a much greater appetite for writing code again, now that my day job involves a little less of that, and for once I’m actually excited to deal with all the new components and features that Android offers to both users and developers. I don’t know whether I’ll find that frustrating or stimulating, but either way it will mean that I expect it to take me a while as I explore and find my way around.
As soon as I’ve surpassed the hurdle of getting something compiling, I hope to start producing builds and uploading to the Play Store as a beta / early access. Keep watching for more updates in the future…