KDE Android News (September 2025)
KDE’s Android builds as well as CI/CD and development containers and VM images have finally been switched to Android SDK 35 a few weeks ago. That was about time, with Google requiring this at least for Play Store updates starting from September 1st. Here’s why this took so long.
SDK 35 and Qt 6.9
Starting with SDK 35 applications are drawing the entire screen, with the system status and navigation bars transparently overlaying the app content. This was possible in older SDKs already but generally wasn’t used by us. Now it’s the default and cannot be disabled anymore.
Not taking that into account would lead to parts of the application toolbar being inaccessible as the Android status bar handles input events there, as well as parts of the app UI being overdrawn by system controls, or ending up behind round screen corners, rounded screen edges or cameras placed in holes in the display.
To address that, Qt 6.9 introduced a new SafeArea API to tell the application which parts of the screen are safe to use for its content
(see Qt’s blog post).
So as a first step just adding appropriate margins to an application window solves the worst problems, even if it might not look pretty. There were a few challenges with just that already though:
- While the
SafeAreaAPI was added in Qt 6.9.0 it didn’t actually work there yet on Android. This was initially fixed by CR 635234 for 6.9.1 but reverted again before 6.9.1 was even released, CR 655735 reapplied the fix 6.9.2, which then was released on August 26th. - The module needing most changes for this is Kirigami, which as part of
KDE Frameworks still has to support Qt 6.7. And since this is QML, version-based compile-time
conditionals are not an option. So we ended up adding a polyfill QML module
that adds a
SafeAreaAPI stub for older Qt versions. That’s good enough as on all platforms where we actually need it to report correct values we fortunately also have full control over the Qt version. - While that works and allows us to gradually implement support for safe areas across libraries, the Breeze style and in applications as needed,
it requires at least Kirigami 6.15. That’s generally not a problem, however due to unrelated events partly outside of our control the
KDE Flatpak SDK was stuck at KF 6.13, and thus any use of the
SafeAreapolyfill API would have broken Flatpak builds. This was eventually resolved on September 12th with an updated Flatpak runtime being published.
Qt 6.9.2
Besides a working SafeArea API, Qt 6.9.2 also sets sensible window margins by default on Android, so most of our apps will no longer
totally break when built against SDK 35 fortunately. Nevertheless there’s a steadily growing list of changes to handle this properly. Examples:
- Kirigami navigation bar (MR 1800)
- Kirigami global and context drawers (MR 1792, MR 1801)
- Kirigami headers (MR 1794, MR 1907)
- Kirigami page paddings (MR 1909)
- Kirigami Addons bottom drawer (MR 389, MR 390)
- Breeze style comboboxes (MR 137)
- KWeather dynamic page spacing (MR 148)
- Itinerary floating buttons (commit 4fe45ec155)
- Tokodon sidebar (MR770)
- Kongress sidebar (MR 83) - review pending
- Kirigami Addons full screen image component (MR 396)
There’s a bunch more similar changes needed before we get to a point when we can remove the default safe margins on application windows. That then gives us prettier results, in particular for apps that don’t just have gray toolbar at the top and bottom, such as KWeather.

If you still spot content being drawn behind the status or navigation bars or screen cutouts somewhere, get in touch in the #kde-android Matrix channel!
Plasma Mobile
Rounded screen corners and screen cutouts aren’t just a thing on Android, we’ll need to deal with all of that on Linux as well eventually.
This was a topic during the Plasma Sprint in Graz
earlier this year. Most of the work is on the compositor and Wayland protocol side of this, from an application perspective this will
eventually look the same as on Android, with the Qt platform integration plugin filling the the SafeArea margins accordingly.
So all the work on this for Android will also benefit Plasma Mobile.
Outlook
Google gives us no time to rest unfortunately, by November 1st support for 16kB page sizes becomes mandatory. That “only” affects native code, which is just what practically all our apps and our entire dependency chain consists of…