Daily Digest

每日新聞摘要

2026年05月27日

今日總結

內容會跟隨語言切換。

📝 今日焦點:ImagePickerKMP 與 ImageSlim 分別強化文件辨識輸入與照片壓縮,讓 OCR、PDF 流程與本機隱私更好用。 🏗 架構設計:Compose 導航應視為狀態機與架構核心;AI native Android 也需以裝置端 Gemini Nano 建立可落地流程。 ✅ 測試與品質:Android 12+ 來電通知應改用 Notification.CallStyle;Koog 1.0 同步補強穩定性、遷移與觀測能力。 🚀 語言演進:Java 24 原生支援 ML-KEM/ML-DSA 抗量子密碼;JNI 與 CMake 仍是 Kotlin/Java 擴充原生能力的實用路徑。

01

From Images to PDFs: OCR Workflows with ImagePickerKMP

Dev.to Kotlin 作者:Ismoy Belizaire 發布:05-27 14:07

從圖片到 PDF:使用 ImagePickerKMP 的 OCR 工作流程

ImagePickerKMP 可協助 OCR 應用取得更清晰的輸入,同時支援圖片與 PDF,並將檔案交給原生 OCR 引擎處理。

重點摘要

同一個選擇器即可支援圖片與 PDF
以 CameraScaleType.FIT_CENTER 提升拍攝構圖精準度
可透過 absolutePath 與 toPath() 交給 OCR 使用

現代行動應用不再只是「顯示」圖片,也要能「理解」圖片。本文說明 ImagePickerKMP 如何支援 OCR 與文件流程:透過統一的相機拍攝與檔案選取機制,讓應用可同時選擇圖片與 PDF。其核心價值在於提供清楚、可預期的輸入,包括用 MIME types 過濾檔案、以 CameraScaleType.FIT_CENTER 強化拍攝構圖,並利用 absolutePath 或 toPath() 將資料傳給 ML Kit、Tesseract 或雲端 AI 服務。這讓文件型 App 的使用體驗更簡潔。

02

Handling Android Image Compression: From OutOfMemory Errors to a Streamlined Utility

Dev.to Kotlin 作者:Getinfo Toyou 發布:05-27 14:30

處理 Android 圖片壓縮:從 OutOfMemory 錯誤到精簡實用工具

我打造 ImageSlim Compress PhotoResize,讓高畫質拍攝與實用檔案大小之間取得平衡。

重點摘要

以原生 Android 技術實作高效圖片壓縮
透過邊界解碼與下採樣避免 OOM
所有處理都在裝置本機完成,兼顧隱私

本文介紹作者如何為 Android 打造 ImageSlim Compress PhotoResize,解決大尺寸照片壓縮的實際痛點。相較於把照片傳到電腦、使用線上轉檔網站或大型修圖 App,這個工具提供更直接的本機流程:以 Kotlin、Jetpack Compose、Bitmap API/ImageDecoder 與 Coroutines 實作,讓壓縮工作在背景執行且維持介面流暢。技術上最大的挑戰是避免 OutOfMemoryError,因此先讀取圖片邊界資訊,再下採樣載入;同時也處理 HEIC、WebP 等格式,並強調批次壓縮與本機隱私保護。

03

Key takeaways

Medium Kotlin 作者:Fora Soft 發布:05-27 08:34

重點整理

在 Android 12 以上請使用 Notification.CallStyle。

重點摘要

Google 將 Notification.CallStyle 視為 Android 12+ 的第一級來電通知範本。
自訂版面配置不是來電通知的建議做法。
文章主旨是採用平台支援的來電樣式。

本文重點是:在 Android 12 以上的來電通知,應使用 Notification.CallStyle。Google 將它列為第一級的來電通知範本,而自訂版面配置並非建議選項。作者提醒開發者採用系統支援的樣式,才能符合 Android 對通知呈現與排序的設計。

04

Compose Navigation Is a State Machine (Treat It Like One)

Medium Kotlin 作者:Dev 175 發布:05-27 09:30

Compose 導航是一個狀態機(請把它當作狀態機來看待)

你的導航圖是架構,而不是管線細節。

重點摘要

導航圖應被視為架構的一部分。
不要把導航簡化成畫面目的地清單。
文章將 Compose 導航視為狀態機。

本文主張,Jetpack Compose 的導航不應被看成單純的管線或畫面目的地列表,而應視為應用程式架構的一部分。作者強調,導航圖本質上像一個狀態機,具有結構與設計意圖;因此,如何建模導航會直接影響程式的可維護性與清晰度。開發者應以架構角度思考導航,而非只把它當成低階實作細節。

05

KotlinConf 2026: Kotlin, Bratwurst og Silent Disco

Medium Kotlin 作者:Nazifa Mohyuddin 發布:05-27 13:00

KotlinConf 2026:Kotlin、德式香腸與無聲迪斯可

當六位 Systek 同事前往慕尼黑參加世界首場 Kotlin 會議,而其中一人從未寫過一行 Kotlin,會發生什麼事?

重點摘要

六位 Systek 同事前往慕尼黑參加 KotlinConf 2026。
這場活動被形容為世界首場 Kotlin 會議。
其中一位參與者從未寫過 Kotlin 程式。

六位 Systek 同事前往慕尼黑參加 KotlinConf 2026,文章將其描述為世界首場 Kotlin 會議。內文以輕鬆口吻點出旅程亮點,並提到其中一位同行者過去從未寫過任何 Kotlin。標題中的德式香腸與無聲迪斯可,也讓這趟行程不只是技術活動,更像是一場充滿趣味的團隊經驗。文末則引導讀者前往 Systek 繼續閱讀完整內容。

06

Dive into Rider Plugin Development: Kotlin Frontend, .NET Backend, and RD Protocols

Medium Kotlin 作者:Denys Semko 發布:05-27 13:28

深入 Rider 外掛開發:Kotlin 前端、.NET 後端與 RD 協定

你是否曾經回到一個舊專案——那個你以前已經做過、但這次擁有更多經驗的作品?

重點摘要

文章主題是重新檢視一個舊專案。
聚焦 Rider 外掛開發的整體架構。
提到 Kotlin 前端、.NET 後端與 RD 協定。

本文從作者重返一個舊專案的情境切入,強調這次是帶著更多經驗重新理解與處理既有作品。從標題可知,內容聚焦在 Rider 外掛開發,並涉及 Kotlin 前端、.NET 後端與 RD 協定等技術組合。不過目前提供的內文只有 Medium 預覽片段,未包含完整技術細節;可見部分主要傳達作者準備以更成熟的視角重新探索這個開發主題。

07

Koog 1.0 Is Out: Stable Core, Better Interop, and Multiplatform Observability

Kotlin Blog 作者:Alyona Chernyaeva 發布:05-27 08:53

Koog 1.0 正式推出:穩定核心、更佳互通性與多平台可觀測性

Koog 1.0 標誌著框架邁向穩定的核心 API。

重點摘要

穩定模組至少一年不會有破壞性變更
新增 Android 本地 AI 支援,可執行 LiteRT 模型
OpenTelemetry 擴展到所有 Koog 目標,包括 Kotlin Multiplatform

JetBrains 釋出 Koog 1.0,為以 Kotlin 與 Java 建構 AI agent 的開源框架帶來穩定版本。這次更新最重要的是對穩定模組承諾至少一年不做破壞性變更,讓生產環境有更可靠的基礎。同時新增 Android 本地 AI、重新設計 Java 互通層、解耦 HTTP 傳輸,並支援跨目標的 OpenTelemetry、增強持久化與記憶能力,以及 Anthropic prompt caching。官方也修正多項問題並改善遷移流程,為後續長期演進奠定更穩固的核心。

08

Quantum-Resistant ML-KEM and ML-DSA in Java

Baeldung 作者:Burak Gökmen 發布:05-27 05:34

Java 中的抗量子 ML-KEM 與 ML-DSA

自 Java 24 起,這兩種演算法已成為原生 Java API 的一部分。

重點摘要

ML-KEM 可用於後量子金鑰封裝與共享密鑰交換。
ML-DSA 可用於後量子數位簽章,驗證身分與完整性。
Java 24 透過 JEP 496 與 JEP 497 提供原生支援。

本文介紹如何在 Java 中使用抗量子密碼演算法 ML-KEM 與 ML-DSA。Java 24 之前,開發者必須依賴外部函式庫;現在標準 JDK 已原生支援這兩種演算法。文章示範 ML-KEM 如何產生金鑰對、以接收者公鑰封裝共享秘密,並由私鑰解封裝以讓雙方得到相同金鑰;也說明 ML-DSA 如何產生金鑰對、用私鑰對訊息簽章,再以對應公鑰驗證簽章。兩者都被描述為可抵抗傳統與量子攻擊。

09

Day 15: Collection Operations — Where Kotlin Starts Feeling Magical

Medium Kotlin 作者:Kirubakaran 發布:05-27 02:01

第 15 天:集合操作——Kotlin 開始讓人感到神奇的地方

Android with Kotlin for Absolute Beginners——系列第 15 天

重點摘要

屬於 Kotlin 安卓入門系列
主題聚焦集合操作
為第 15 天的內容延續

這篇文章是「Android with Kotlin for Absolute Beginners」系列的第 15 天,主題是集合操作。由於提供的內文只有標題與系列資訊,未包含正文,因此只能根據現有資訊整理。從標題可看出,文章應是介紹 Kotlin 的集合 API 如何讓常見的資料處理更直覺、更具魔法感;若要了解完整教學內容,仍需前往原始 Medium 文章閱讀。

10

Integrate C/C++ with Android Java/Kotlin

Medium Kotlin 作者:Atul Sharma 發布:05-27 02:56

在 Android Java/Kotlin 中整合 C/C++

了解如何使用 JNI 與 CMake 將原生 C/C++ 程式碼整合進 Android Java/Kotlin 應用,以提升效能、安全性與 OS 層級能力。

重點摘要

使用 JNI 連接原生程式碼與 Android 應用
透過 CMake 建置與管理原生元件
目標是提升效能、安全性與作業系統層級能力

本文介紹如何在以 Java 或 Kotlin 開發的 Android 應用中整合原生 C/C++ 程式碼。內容重點在於使用 JNI 連接受管層與原生層,並以 CMake 進行原生程式碼的編譯與組織。作者指出,這種做法可帶來更好的效能、較高的安全性,以及更接近作業系統層級的能力,適合作為想為 Android App 擴充原生功能的入門參考。

11

Why Most Compose Apps Become Slow Over Time

Medium Kotlin 作者:YADNYESH RANA 發布:05-27 05:31

為什麼大多數 Compose 應用會隨時間變慢

當 Jetpack Compose 初次進入程式碼庫時,一切都顯得更順暢。

重點摘要

Jetpack Compose 一開始常讓人感覺流暢
文章主題聚焦於應用程式隨時間變慢
目前可見內容只有 Medium 文章的開頭

這篇文章從標題可看出,作者想探討為何多數 Jetpack Compose 應用在專案成長後會逐漸變慢。可惜目前提供的內文只有開頭一句,表示 Compose 初次導入程式碼庫時,一切都會顯得更順暢。由於缺少後續段落,無法進一步確認作者提出的原因、案例或建議,只能判斷文章意在展開一段關於 Compose 效能隨時間變化的討論。

12

I Built an AI-Native Android Architecture with Real On-Device Gemini Nano — Here’s the Blueprint

Medium Kotlin 作者:Vikas Soni 發布:05-27 05:37

我打造了具備 AI 原生能力的 Android 架構,並實際使用裝置端 Gemini Nano——這就是藍圖

不再只是聊天機器人示範,而是把 Android 推向可上線的代理式工作流程。

重點摘要

聚焦可上線的 Android 代理式工作流程
實際採用裝置端 Gemini Nano 能力
提出超越聊天機器人示範的架構藍圖

本文介紹一套面向 Android 的 AI 原生架構,重點不在於聊天機器人的概念展示,而是如何支援可部署、可落地的代理式工作流程。文章以實際裝置端 Gemini Nano 為核心,說明如何把 AI 能力直接整合進 Android 應用,而不只依賴遠端服務。透過藍圖式的整理,作者希望讓開發者理解如何建立更貼近實務需求的 AI 原生 Android 架構。