KDE Android 新闻 (2026年6月)
摘要
KDE Android 应用已更新至 Qt 6.11,改进了安全区域处理,增强了通知功能,并修复了各种问题。
<p><a href="https://lobste.rs/s/eli97m/kde_android_news_june_2026">评论</a></p>
查看缓存全文
缓存时间: 2026/06/16 13:33
# KDE Android 资讯(2026年6月)
来源:https://www.volkerkrause.eu/2026/06/13/kde-android-news-june-2026.html
近几个月来,围绕 KDE 应用程序的 Android 平台支持发生了不少变化,是时候再次更新了。
### Qt 6.11
如之前所述,我们已将 Qt 版本更新至 6.11。这一变化带来了一个遗憾:停止支持 Android 8 及更早版本。因此我们也移除了 ARM32 构建,因为运行 Android 9 或更高版本的设备基本都能使用 ARM64 构建,这使 CI 成本降低了三分之一。此前输入焦点与虚拟键盘之间经常出现的烦人交互问题,在 Qt 6.11 中似乎有所改善。但返回键/手势的处理方式变化也导致了一些退化,例如在嵌套较深的应用程序中出现双击返回页面的问题(Kirigami MR 2100 (https://invent.kde.org/frameworks/kirigami/-/merge_requests/2100))。
### SafeArea 支持
之前我们关注的重点 (https://www.volkerkrause.eu/2025/09/27/kde-android-news-september-2025.html) 是处理“安全”屏幕区域(即应用程序窗口中不被屏幕缺口或系统控件如 Android 状态栏和导航栏遮挡的部分),避免因 Android 默认行为改变而导致严重问题。现在我们已着手打磨,使其外观更佳。
- 修复了抽屉把手错位问题(Kirigami MR 2102 (https://invent.kde.org/frameworks/kirigami/-/merge_requests/2102))。
- 修复了 NeoChat (https://apps.kde.org/neochat) 的聊天栏被底部导航栏遮挡的问题(NeoChat MR 2893 (https://invent.kde.org/network/neochat/-/merge_requests/2893))。
- 修复了 NeoChat 中底部边距重复的问题(Kirigami MR 2107 (https://invent.kde.org/frameworks/kirigami/-/merge_requests/2107))。
- 修复了 Itinerary (https://apps.kde.org/itinerary) 中浮动按钮位置错乱的问题(Kirigami MR 2105 (https://invent.kde.org/frameworks/kirigami/-/merge_requests/2105))。
- 修复了 Alligator (https://apps.kde.org/alligator) 全局抽屉扩展到状态栏的问题(Alligator MR 172 (https://invent.kde.org/network/alligator/-/merge_requests/172))。
- 修复了 Tokodon (https://apps.kde.org/tokodon) 在计算安全边距时的运行时警告(Kirigami MR 2110 (https://invent.kde.org/frameworks/kirigami/-/merge_requests/2110))。
如果发现仍有问题的地方,请在 #kde-android Matrix 频道 (https://matrix.to/#/#kde-android:kde.org) 告知我们!
### 通知
通知处理方面也有若干改进和扩展:
- 修复了点击通知操作或通知本身无反应的问题(MR 200 (https://invent.kde.org/frameworks/knotifications/-/merge_requests/200))。
- 实现了确认内联回复的功能(MR 202 (https://invent.kde.org/frameworks/knotifications/-/merge_requests/202))。这修复了提交内联回复后通知无限显示加载动画的问题。
- 改进了图标处理。现在我们能正确区分 Android 所谓的“小”和“大”通知图标、符号应用图标以及聊天头像等图片。应用程序需做少量调整才能获得最佳效果,但在大多数情况下,提供符号应用图标就已足够(MR 201 (https://invent.kde.org/frameworks/knotifications/-/merge_requests/201))。
- 一个跨平台通知配置的新 API 正在审查中(MR 203 (https://invent.kde.org/frameworks/knotifications/-/merge_requests/203))。该 API 也将惠及 Flatpak 应用程序。
NeoChat 聊天通知截图,显示发件人和房间头像与消息文本并列。
包含头像图片的 NeoChat 通知。
### 安全的 JNI 使用
我们的 C++ 代码与 Android 的 Java 平台 API 之间的交互通过所谓的 Java 原生接口(JNI)(https://en.wikipedia.org/wiki/Java_Native_Interface) 进行。这是一个相当底层的 C 接口,几乎没有类型安全,并且需要容易出错的手写神秘签名字符串。早在 Qt 5 时代,我就在 KAndroidExtras (https://invent.kde.org/pim/itinerary/-/tree/master/src/kandroidextras) 中编写了一些辅助工具,以实现更类型安全的使用。如今,Qt 6 已提供了许多类似功能,其中最新的新增项是 Qt 6.9 中的 JNI 数组支持。相较于原始 JNI 使用,这已是巨大的改进,例如 KNotifications 中的 MR 204 (https://invent.kde.org/frameworks/knotifications/-/merge_requests/204) 就使用了这些功能。它几乎避免了所有手写 JNI 签名和大量手动类型转换。但还有一部分缺失:类型安全的包装器,以便在编译时检查函数参数和属性类型。这部分已被提取并基于 Qt 的 JNI 代码重构,现在位于 KJniExtras (https://invent.kde.org/pim/itinerary/-/tree/master/src/kjniextras) 中。代码量仅为原来的 10%,而且大部分复杂的模板魔法已经消失。一个小小的缺点是,我们失去了在 Linux 上测试 JNI 代码的能力,因为旧方法在非 Android 构建时提供了模拟实现。
### 日历访问
由于类型安全的 JNI 包装器现在足够小,可以复制为单个头文件,这最终扫清了将 Android 平台日历后端从 Itinerary 上游移至 KCalendarCore (https://api.kde.org/kcalendarcore-index.html) 的障碍(MR 242 (https://invent.kde.org/frameworks/kcalendarcore/-/merge_requests/242))。结合 Qt 中已有的日历运行时权限 API,现在可以为 Kongress (https://apps.kde.org/kongress) 或 KTrip (https://apps.kde.org/ktrip) 轻松添加“添加到日历”功能。
### 文件对话框与远程文件
我们的多个应用程序经常收到一个报告:通过平台文件对话框打开文件时,似乎没有任何反应。问题出在云共享文件上——Qt Quick 文件对话框会静默丢弃这些文件,因为它们不是本地文件,使得应用程序误以为用户取消了对话框。因此没有任何反应,也不显示错误消息。有趣的是,这个问题在 KDE Plasma 上也会出现——原生文件对话框也可以选择远程文件,只不过在 Plasma 上这种情况更少见。但由于我们可以让 Plasma 文件对话框仅允许选择本地文件,这个问题很容易修复(CR 742273 (https://codereview.qt-project.org/c/qt/qtdeclarative/+/742273),适用于 Qt 6.12)。在 Android 上我们无法选择这种方式,而且这也不是令人满意的解决方案——从云共享打开文件是非常合理的用例。因此,现在有一个针对 Qt Quick 文件对话框的变更提案,允许选择任意 URL,类似于其 Qt Widgets 版本已经支持的功能(CR 743681 (https://codereview.qt-project.org/c/qt/qtdeclarative/+/743681))。这不会自动解决问题,但至少给了应用程序处理此问题的机会。
### 区域感知排序
Android 上的 Qt 至今未能正确处理区域感知排序(至少在不捆绑数十 MB 大小的 ICU 库时)。使用英语时可能不会注意到,但在许多其他语言中,这会导致列表排序混乱。例如,在德语中,字母“Ä”在排序时应视为“A”,但在 Android 上它一直被排在“Z”之后。现在有一个 Qt 补丁提案(CR 741548 (https://codereview.qt-project.org/c/qt/qtbase/+/741548)),利用 Android 平台基础设施实现了 `QCollator` 后端。该后端在可用时使用 Android 原生的 ICU 变体,否则回退到效率较低、功能较弱的 Java API。
KTrip 国家选择器截图,德语中奥地利(Österreich)正确排序在阿曼(Oman)和波兰(Poland)之间。
使用德语区域设置时,奥地利不再位于列表末尾。
### 崩溃报告
虽然我们在 Linux 上已有自动崩溃报告一段时间(参见 Harald 在 LAS 上的演讲 (https://conf.linuxappsummit.org/event/9/contributions/234/) 了解更多详情),但我们的应用程序在 Android 上之前完全没有处理崩溃。基于四月份格拉茨冲刺 (https://www.volkerkrause.eu/2026/04/18/kde-sprint-linuxtage-graz-2026.html) 的讨论,现在情况已经改变:KCrash (https://api.kde.org/kcrash-index.html) 现在能在启动应用程序时检测到之前的崩溃,并提供自动向 KDE 的 Sentry 实例提交崩溃报告的功能。这些报告在 Linux 上已经非常有帮助,提供了关于问题的重要信息,并允许优先处理影响最大的问题。但关键在于,未经用户同意我们绝不会提交任何内容。
Android 消息框,询问是否提交崩溃报告。
下次应用程序启动时的崩溃报告对话框。
大部分实现位于 KCrash MR 101 (https://invent.kde.org/frameworks/kcrash/-/merge_requests/101) 中,但应用程序也需要做一些更改才能集成。在你的 `build.gradle` 中添加 `sentry-android-core` 依赖项:
```
dependencies {
...
implementation 'io.sentry:sentry-android-core:8.43.0'
}
```
在你的 `AndroidManifest.xml` 中添加一个 meta-data 条目,配置应用程序的 Sentry DSN:
```
<meta-data android:name="io.sentry.dsn" android:value="your_dsn_here" />
```
最后,移除构建系统和预处理条件中排除 Android 上 KCrash 使用的部分。注意,验证这一部分至关重要——没有 KCrash,你将得到 Sentry 的激进默认行为,即未经用户同意直接上传。
### 抑制
今年早些时候,KGuiAddons (https://api.kde.org/kguiaddons-index.html) 获得了一个新的 API,用于抑制系统操作 (https://api.kde.org/ksysteminhibitor.html),例如锁定屏幕。显而易见的用例是视频播放器,但例如 Itinerary 也使用此功能,确保在显示检票二维码时屏幕保持常亮。Android 平台支持也已添加 (MR 203 (https://invent.kde.org/frameworks/kguiaddons/-/merge_requests/203)),从而允许删除应用程序中的相应代码。
### 展望
虽然这些都是良好的进展,但情况可能即将发生变化。今年晚些时候,Google 计划推出一些措施,使得在 Android 上提供和安装应用程序变得更加困难。
Keep Android Open 活动 (https://keepandroidopen.org/) 的 Logo
更多信息请查看 Keep Android Open (https://keepandroidopen.org/),这是一个由 KDE e.V. (https://ev.kde.org/) 以及许多其他组织支持的活动。无论这些措施最终如何实现,方向是明确的:Android 不再是 FOSS 软件的长期可行平台,即使是没有 Google 服务的版本也不再可行。我此前一直将其视为权宜之计,等待 Linux 手机就绪,因此这也是加大力度向该方向努力的另一理由。
相似文章
KDE Plasma 6.7 发布
KDE Plasma 6.7 已发布,引入了按屏幕虚拟桌面、麦克风音量测试、长按特殊字符、浅色/深色模式切换、越南农历、系统托盘中的后台应用、打印改进以及各种可用性增强。
本周 Plasma 更新:每个屏幕的虚拟桌面与 Wayland 会话恢复
KDE Plasma 6.7 引入了每个屏幕的虚拟桌面、Wayland 会话恢复以及大量 UI 改进,这些改进是在格拉茨举行的年度 KDE 大冲刺之后实现的,包括日历应用配置、Alt+Tab 定位选项和应用操作收藏。
KDE迎来30周年
KDE迎来30周年,庆祝社区驱动的自由软件开发,并邀请用户参加活动、捐款以及参与环保倡议。
Oxygen 6.7 发布:为 KDE 经典主题带来清新气息
Oxygen 6.7 为 KDE 的经典 Oxygen 主题带来了重要的修复和图标更新,通过社区协作以及原设计师 Nuno Pinheiro 的参与使其焕然一新。
为KDE Plasma最后一个支持X11的版本做准备
KDE宣布Plasma 6.8将放弃X11会话支持,在经历15年开发后完全过渡到Wayland。这一变化仅影响Plasma桌面本身;XWayland支持仍保留用于传统应用程序。