Here’s the real reason third-party camera apps are so bad on Android

In 2020, Moment abandoned its Android camera app. At the time, co-founder Marc Barros wrote in an email to users that the company lacked the “engineering bandwidth” to keep up with an ever-growing selection of Android devices, each with different camera nuances. Rather than sinking resources into half-baked software with varying levels of functionality from device to device, Moment decided to shutter development for the Android version and focus exclusively on iOS.

Camera access in third-party apps has a history of being … less than ideal on Android. Sure, the default camera app on your phone may be fine – but if you want to take photos inside an app built by anyone who didn’t manufacture your phone, it’s kind of a crapshoot. You’ll be able to take photos with your primary camera, but they may not look as good, and you may not be able to access your phone’s fancy periscope telephoto lens or use your camera’s great low-light mode. There’s a simple reason: for app developers, ensuring broad compatibility for camera features is a pain in the ass.


Developing camera features for iOS apps – indeed, developing iOS apps in general – is simpler in part because there are so few iPhones. If you can make sure your app works right on the three or four new models each year, you’ve done your iOS due diligence. On Android, there are tons of new devices every year, each with different camera hardware and software. This fragmentation makes Android development a major headache: why should Moment figure out how to, say, get the wide-angle camera on every new Sony and OnePlus phone working? Opting out of Android development entirely instead isn’t unreasonable.

Android actually has frameworks for dealing with this. The Camera2 API, introduced way back in Android 5, provides a way for apps to probe a phone’s camera features – provided OEMs “expose” those features to the API. There’s also CameraX, a Jetpack support library that makes it easier for developers to implement those camera features in their own apps in several ways. Chiefly, it allows device manufacturers to provide vendor extensions for their different camera features – things like low-light and portrait modes – that make implementing those features in third-party apps much less complicated.

So what’s the problem? Well, support for Camera2 and CameraX is not mandatory – OEMs are neither required to expose camera features to Camera2, nor provide CameraX extensions for app developers to use. If you’re curious, there’s an app that’ll tell you which camera features your phone exposes to Camera2, and Google maintains a list of devices for which CameraX vendor extensions are supported. That list shows that while Samsung and Motorola are doing an admirable job, other OEMs seemingly just can’t be bothered – including, frustratingly, Google itself.

The complexity of the situation can manifest in other ways, too. In December, OnePlus fans were indignant when an update to OxygenOS 12 nerfed camera access in third-party apps – including popular ports of Google’s camera app. Before the update, these GCam ports could access the phones’ non-primary sensors – their ultra-wide, macro, and telephoto cameras. After, only the primary camera worked. However, according to a Twitter thread by Esper senior technical editor and former XDA Developers editor-in-chief Mishaal Rahman, the change was likely incidental. It’s a bit technical, but the broad strokes are that OxygenOS 12 is based on Oppo’s ColorOS, which doesn’t support the package name loophole GCam apps used to access camera features exposed to the Camera2 API. (For what it’s worth, OnePlus has acknowledged this and says it plans to address the issue in an update.)

It’s all a mess, and there’s not any indication it’ll improve in the near future. Google could try to persuade OEMs to better utilize Camera2 and CameraX, but given it hasn’t prioritized CameraX extensions for its own phones, it’s not exactly leading by example. There’s not much reason to – phones don’t live or die by third-party photo app performance, and only a subset of a subset of customers knows or cares about any of this. Business-wise, it’s more or less a non-issue.

As it stands, the burden of ensuring camera features in third-party apps work correctly across a wide selection of Android devices rests largely on app developers, and the return on that investment of resources isn’t worth it for most of them. As Barros said, it just eats up too much engineering bandwidth. There may be an abundance of choice on Android – but all that freedom is not without its drawbacks.


Google Chrome Beta 102 is out now, here’s everything that’s new

Read Next

About The Author

Leave a Comment