Good bye Android, it was good while it lasted

When I first started this blog, my goal was to document my journey in Android development. beginning-android-day-1 dates back to Sept 2017. It's been 7 years. However I won't work with Android anymore. Here's why.

Android

Back when I learned Android in 2017, it was pretty rough. I had to learn a completely new API — the Android API, make UIs with XML manifests. In order to programmatically interact with the UI elements, I had to reference them using "resource ids". Half the time, if I updated the XML, the resource ids wouldn't get updated, compilation would fail and all the code would turn red. I'd have to close and launch Android Studio again. The whole experience was so tough that I gave up pretty fast.

Electron

Since my background was that of a frontend engineer, I got interested in tools like Electron. Electron lets you write a webapp that runs in Node.js, then package it as an app. The app really is a Chrome browser with your webapp embedded into it. Even though I'm a frontend engineer, I dislike web development because of the fragmentation. Quickly my Electron app went into maintenance mode, and I finally pulled the plug last month when I failed to revive-my-old-electron-app.

Flutter

When Flutter was released, they promised that I could write code once, and it would compile natively in both Android and iOS. This came at a great time, since I had started using both an Android phone and an iPhone. Also compiling natively means that the binaries would be much smaller, and run faster than Electron apps. What's more, Flutter runs in Dart, Google's new language. I immediately loved that language and I still do. See learning-dart (Nov 2018).

But one of the reasons why I loved Flutter so much is that I didn't have to deal with Android directly anymore. No more manifests, resource IDs or having to write in Java or learning Kotlin. Indeed at the time, Android was transitioning from Java to Kotlin. So were it not for Flutter, I'd have to learn two languages just to build on one platform.

In short, here's the reasons why I loved Flutter so much for Android (and iOS):

  1. Dart is a much cleaner language than JavaScript or TypeScript. Easier than Java and Kotlin (to me).
  2. There is one way to do things and only one set of tools (Dart linter, dart pub for dependencies, one Dart compiler).
  3. Compiles natively.
  4. Abstracts away platform specifics like Android manifests or cocoapods.

Play Store experience

The Google Play Store experience wasn't too bad. I actualy liked how easy it was to publish an app. iOS on the other hand, requires stringent reviews. On iOS, publishing in private preview requires testers to install TestFlight. Then it requires the developer to pay $100/yr for a developer license, set up a bunch of invites for TestFlight. Then each version is valid only 90 days, at the end of which the beta test ends and users can't use your anymore, unless you publish a newer version. If I decide to publish a stable version publicy, the review process is so strict that I have never attempted it.

Maintenance

When I first developed my Flutter apps, it was bliss. For any feature I needed, I could find a pub package to do it for me. That pub package would abstract away the Android and iOS specific code.

However over time, I started to feel its limits. Every few months, the Google Play Store would increment the minimum SDK version required to stay on the Play Store. At the same time, packages would increase minimum SDK versions through new major versions. So the only way to stay on the Play Store would be to upgrade major versions every once in a while. Essentially I was being forced to migrate versions every few months, without knowing in advance when it would happen, nor how big the migration would be. The more features my apps have, the more dependencies they have, and the more frequent and painful the migrations are.

SDK version upgrades would also come with other changes. For example one of which was manifest changes and gradle configs. Sometimes even the Android piece of code that runs the Flutter code would change. Flutter would then publish some docs on how to perform the change. But it's busywork and often prone to error:

I'll skip the maintenance related to iOS because that's not the point of the post, but it required similar work.

Non-code maintenance

Sometimes I would have to fill out extra information on the Google Play Store, like in this post: fixing-google-api-error-invalid-request-your-app-targets-android-13-api-33-or-above-you-must-declare-the-use-of-advertising-id-in-play-console.

The final straw

And finally, the straw that broke the camel's back was an email I received 3 days ago that told me I had failed to fill out critical information, and hence my developer account was restricted and all my apps had been pulled from the Play Store.

Email I got 3 days ago

So I went to the Play Console and filled out that form. They required me to state my legal name, address and to explicitly agree to show my legal name on my public developer profile. Also they stated that if any of my apps were paid apps, I would also have to agree to show my legal address in full on my developer profile. Luckily I don't have any paid apps, but if I did, how could I agree to put such private information in the wild? That would be a treasure trove for scammers. Armed with this information they could easily do identity theft or scam me.

Required information to create a Play Console developer account - Play Console Help
When creating your Play Console developer account, you must provide certain information which helps us to verify your identity. This article provides an overview of the information you must provide, w
Google will display your legal name, your country (as per your legal address), and developer email address on Google Play. If you decide to monetize on Google Play then Google will display your full address.

Anyhow, I was still on the fence, so I filled out all that information and checked the box that said I agreed to show my name on my developer profile.

A few hours later, the Console asked me to upload extra documents to verify the information I had just given them.

I can indeed upload that information, but at that point, I've lost all will to continue. Why is that?

Well, I've already explained that maintaining any app on the Play Store (or the App Store) requires an indeterminate amount of work. Furthermore, I do not use my Android phone anymore. My main device is iOS. Finally, no one besides me uses my free, publicly available apps. So I could toil away to keep my Android apps alive, just for the pride of having "apps on the Play Store", but really, it does not help me nor humanity one bit.