KDE Android 新闻 (2026年6月)

Lobsters Hottest 新闻

摘要

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 发布

Lobsters Hottest

KDE Plasma 6.7 已发布,引入了按屏幕虚拟桌面、麦克风音量测试、长按特殊字符、浅色/深色模式切换、越南农历、系统托盘中的后台应用、打印改进以及各种可用性增强。

KDE迎来30周年

Hacker News Top

KDE迎来30周年,庆祝社区驱动的自由软件开发,并邀请用户参加活动、捐款以及参与环保倡议。