Daily Digest

每日新聞摘要

2026年09月07日

今日總結

內容會跟隨語言切換。

📝 今日焦點 - Kotlin 2.4.20 發布,補強標準庫、Native/Wasm/JS 與編譯器整合,並改善 coroutine 堆疊、測試斷言與 Swift 匯出。 - Android 與 Compose 仍是主軸:低光錄影、啟動流程、動畫與截圖測試,都在推動更穩定的實作與體驗。 🔧 效能最佳化 - Sharp QR 以幀分析限流、去重與背景產生提升掃描效率,顯示即時視覺處理仍需精準控管。 - Compose 內部最佳化、AI 管線改寫與截圖測試去不確定性,重點都在讓效能與結果可預期。 🏗 架構設計 - Koin in KMP、結構型設計模式與 sealed interface 的討論,皆指向更清楚的狀態與模組邊界。 - GuideKit、CountryCodeKit 與 ContentProvider 啟動技巧,則提供跨平台 UI 與早期初始化的實用方案。 ✅ 測試與品質 - Compose 截圖測試的問題被歸因於動畫、字型與非同步狀態,解法是讓測試流程完全決定性。 - Spring AI 的 MCP logging 與其棄用訊息,也提醒工具鏈需同步跟上協定變動。 🚀 語言演進 - Kotlin 與 Java 在 JVM 上持續競爭,Java 雖快速補強,但 Kotlin 仍保有關鍵優勢。 - Android 18 的前瞻文章與 Compose 深入解析,顯示平台正朝 AI 化、現代化與更高層抽象前進。

01

Optimizing CameraX and ML Kit for Real-World Workflows: Building Sharp QR

Dev.to Kotlin 作者:Getinfo Toyou 發布:09-07 14:31

為真實工作流程優化 CameraX 與 ML Kit:打造 Sharp QR

一款以效能與實用性為核心、乾淨可靠的掃描與產生工具。

重點摘要

面向活動報到、行銷印刷與現場技術人員等專業情境
採用 Kotlin、Jetpack Compose、CameraX、ML Kit、Room 與 ZXing
透過幀處理限制、去重抖動與背景生成提升效能

本文說明即使多數 Android 手機已能用預設相機掃描 QR code,專業工作流程仍需要更專注的工具。作者以 Sharp QR 為例,打造一款乾淨、可靠且重視速度的掃描與產生器,技術堆疊包含 Kotlin、Jetpack Compose、CameraX、ML Kit、Room 與 ZXing。文章重點在於幀分析效能優化、以時間窗避免重複辨識,以及將 QR 生成移至背景執行。作者也指出,內建 ML Kit 模型可離線運作,且加入觸覺回饋能提升高頻掃描效率。

02

Correcting Our Own Low-Light Guide: Brightening Live Video on Android No Longer Has to Leave the Phone

Dev.to Kotlin 作者:Super Funicular 發布:09-07 14:57

更正我們自己的低光指南:Android 上的即時影片增亮不再一定要離開手機

Google 文件已說明兩種可在裝置端提升即時串流亮度的低光增強方案。

重點摘要

Google 提供兩條裝置端低光路徑:Android 15 硬體 AE 模式與 Play 服務軟體模組。
硬體模式可能降低幀率;軟體模式可維持幀率,但無法補回感光元件已丟失的細節。
作者指出其錄影器採無預覽設計,因此是否相容仍未確認。

本文修正先前對 Android 低光影片處理的判斷:即時增亮不一定要把影像送出手機。Google 現在提供兩種裝置端方案:Android 15 的硬體自動曝光模式,以及透過 Google Play services 提供的 Low Light Boost 軟體模組,支援 Pixel 6 到 Pixel 9 與部分 Galaxy Ultra 機型。硬體方案可改善訊噪比,但在極暗環境下可能降幀;軟體方案則能維持幀率,卻受限於感光元件原始輸出的資訊。作者也說明,他們的 Camera2 螢幕關閉錄影設計採固定曝光,且文件中的功能是針對預覽串流,因此是否能直接套用仍未實測。

03

Inside Jetpack Compose: Composition, Lifecycle, and How Recomposition Actually Gets Optimized

Medium Kotlin 作者:Ashutosh Kumar 發布:09-07 09:37

深入 Jetpack Compose:組合、生命週期,以及重組如何真正被最佳化

深入探討 SlotTable、Snapshot 狀態系統,以及讓 Compose 保持高速的編譯器技巧。

重點摘要

解析 Jetpack Compose 如何管理組合與生命週期。
說明 SlotTable 與 Snapshot 狀態系統的技術細節。
介紹有助於提升重組效能的編譯器最佳化。

本文深入探討 Jetpack Compose 的內部機制,聚焦於組合、生命週期,以及讓重組保持高效率的各種最佳化手法。文章說明 SlotTable 與 Snapshot 狀態系統在其中扮演的角色,也提到編譯器層級的技巧如何協助提升效能。內容主要面向想理解 Compose 底層運作,而不只是停留在使用層面的工程師。

04

Removing the Default Android Splash Screen in a React Native App

Medium Kotlin 作者:Praveen Karuppusamy 發布:09-07 10:25

在 React Native App 中移除預設的 Android 啟動畫面

我需要移除預設的 Android splash/preview 畫面,讓應用程式能更直接開啟。

重點摘要

主題是移除 React Native 的 Android 預設啟動畫面。
目的是讓 App 開啟時更直接、少一層過渡畫面。
內容源自實際的 Android 開發情境。

這篇文章談的是 React Native Android 開發中的一個實務問題:App 啟動時會先出現預設的 Android splash 或 preview 畫面,作者希望將其移除,讓應用程式能更直接地開啟。根據目前可得內容,文章重點集中在啟動畫面處理與相關設定調整上。

05

The Evolution of a Side Project: How I Built My Own Russian Strava Alternative («My Bicycle» in…

Medium Kotlin 作者:Pavel Pavlov 發布:09-07 10:26

副業專案的演進:我如何打造自己的俄羅斯版 Strava 替代品《My Bicycle》

幾個月前,我把 Android 應用程式《My Bicycle》發布到 RuStore 上。

重點摘要

Android 應用程式《My Bicycle》已上架 RuStore。
文章將這個專案描述為持續演進的副業作品。
目前可見內容僅是 Medium 的導讀摘要。

這篇文章以《My Bicycle》這款 Android 應用程式為主題,說明作者在數個月前已將其發布到 RuStore。文章定位為一個副業專案的演進故事,並把它描述成俄羅斯版的 Strava 替代品。不過目前提供的內容只有簡短導讀,沒有進一步揭露功能、技術細節或開發歷程,因此更像是正式長文的入口與公告。

06

Setting Up Koin in real project: A Step-by-Step Guide

Medium Kotlin 作者:Gabriel Bronzatti Moro 發布:09-07 12:01

在真實專案中設定 Koin:逐步指南

以實作為主、逐步帶你在真實世界的 Kotlin Multiplatform(KMP)專案中設定 Koin。

重點摘要

聚焦真實專案中的 Koin 建置
以 Kotlin Multiplatform(KMP)為應用場景
採逐步實作方式說明

本文以實務導向的方式,介紹如何在真實世界的 Kotlin Multiplatform(KMP)專案中逐步設定 Koin。內容強調實際導入流程,而非僅停留在概念說明,讓開發者能更容易理解 Koin 在 KMP 專案中的應用情境與配置方式,並將設定步驟轉化為可直接參考的操作指南。

07

From Boolean Flags to Sealed Interfaces in Compose: How to Eliminate Invalid Combinations by…

Medium Kotlin 作者:manuel cabezas caldero 發布:09-07 12:11

在 Compose 中從布林旗標走向密封介面:消除無效組合

有一個訊號幾乎總能預告 Compose 畫面出問題:太多旗標在描述正在發生什麼事。

重點摘要

Compose 畫面裡過多旗標,往往代表設計有問題。
布林值組合可能形成無效狀態,難以推理。
密封介面能更安全、清楚地表達 UI 狀態。

文章指出,Compose 畫面若充滿布林旗標,通常意味著狀態設計出了問題,因為這些旗標很容易拼出無效或令人困惑的組合。作者建議以密封介面來建模互斥的 UI 狀態,避免不可能的情況發生。核心觀點是把狀態明確結構化,讓畫面邏輯更容易理解、維護與推理。

08

Kotlin vs. Java: What the JVM’s Younger Sibling Still Does Better

Medium Kotlin 作者:Wagner Franchin 發布:09-07 12:13

Kotlin 與 Java:JVM 年輕一代仍然更勝一籌的地方

Records、sealed classes、virtual threads——Java 正在追上,但還沒完全到位

重點摘要

Java 正以新語言特性快速補齊差距。
Kotlin 在 JVM 上仍保有一些優勢。
文章比較兩者目前各自較強的面向。

本文比較 Kotlin 與 Java 在 JVM 上的表現,指出 Java 雖然已透過 records、sealed classes 與 virtual threads 等新特性逐步追趕,但仍未完全補上與 Kotlin 之間的差距。Kotlin 在某些方面依然更具優勢,因此在特定 JVM 開發情境下仍是強勢選擇。文章重點不在於判定絕對勝負,而是說明兩種語言持續演進、彼此競爭的現況。

09

Android 18 Is Coming: Eight Features That Will Bring Mobile Development into the Future

Medium Kotlin 作者:AndroidLab by Andre 發布:09-07 12:28

Android 18 即將到來:將把行動開發帶向未來的八項功能

一位 Kotlin 開發者對 Android 下一步走向的誠實解析——AI、Compose,以及你今天就該做出的架構決策。

重點摘要

展望 Android 在行動開發上的下一步方向
聚焦 AI、Jetpack Compose 與架構選擇
以 Kotlin 開發者可採行的實務視角切入

本文以 Kotlin 開發者的視角,整理 Android 接下來的發展方向,重點放在 AI、Jetpack Compose,以及開發者現在就應開始思考的架構決策。文章不只是描述版本變化,而是把 Android 18 視為行動開發趨勢轉向的訊號,凸顯平台未來將持續朝更智慧、更現代化的應用架構前進。整體來說,這是一篇給開發者閱讀的前瞻性解析,協助讀者為即將到來的變化做好準備。

10

Advanced Compose Animations: The Techniques That Separate Good Android Apps From Great Ones

Medium Kotlin 作者:AndroidLab by Andre 發布:09-07 12:39

進階 Compose 動畫:讓優秀 Android 應用脫穎而出的技術

不只是 AnimatedVisibility——真正的 Android 開發者如何打造有靈魂的動畫

重點摘要

聚焦 Jetpack Compose 的進階動畫技巧。
強調動畫能提升 App 的表現力與情感感受。
主張不要只停留在 AnimatedVisibility。

本文介紹進階的 Jetpack Compose 動畫技巧,指出真正出色的 Android 應用不會只依賴基礎效果。作者強調,實務開發者會透過動畫替介面注入個性與情感,而不是把動態效果當作純裝飾。核心觀點是:超越單一的 AnimatedVisibility 等工具,能讓 Android App 更精緻、更有表現力,也更令人印象深刻。

11

From Spring Boot to Swift: The Business Logic Was the Cheap Part

Medium Kotlin 作者:Leonhard Solbach 發布:09-07 13:25

從 Spring Boot 到 Swift:商業邏輯其實是最便宜的部分

我們用 server-side Swift 重建了一條正式運作的 AI 資料 पाइpline。

重點摘要

重建後的系統已投入正式生產環境。
每月可處理 5,200 萬筆任務。
每日可處理 30 億個 token。

本文介紹一個正式上線的 AI 資料管線,從原本的 Spring Boot 架構重建為 server-side Swift。重寫六個月後,系統已能在生產環境中運作,每月處理 5,200 萬筆任務、每天處理 30 億個 token。作者強調,真正便宜的其實是商業邏輯本身;相較之下,周邊的基礎設施、效能與營運複雜度才是更大的挑戰。

12

Kotlin 2.4.20 Released

Kotlin Blog 作者:Daniel Csorba 發布:09-07 11:30

Kotlin 2.4.20 釋出

Kotlin 2.4.20 版本已發布,以下是主要亮點:

重點摘要

標準函式庫新增 coroutine 堆疊追蹤還原與集合工具函式。
Kotlin/Native、Kotlin/Wasm、Kotlin/JS 都有多項平台改進。
支援 Gradle 9.7.0,並擴充 Build tools API 與編譯器功能。

Kotlin 2.4.20 已正式發布,更新涵蓋標準函式庫、Kotlin/Native、Kotlin/Wasm、Kotlin/JS、Gradle 整合、Build tools API 與編譯器。重點包括 coroutine 堆疊追蹤還原、集合元素相等與唯一性檢查工具、kotlin.test 新增多個斷言重載,以及 Swift 匯出、增量編譯、瀏覽器測試 DSL、suspend lambda 轉為 async 函式等改進。此版同時支援 Gradle 9.7.0、新的 Build tools API 目標,並加入 kotlinr runner 與獨立 native image。可透過最新版 IDE 或 GitHub 釋出頁更新。

13

MCP Logging in Spring AI

Baeldung 作者:Burak Gökmen 發布:09-06 23:19

Spring AI 中的 MCP 日誌記錄

MCP 日誌提供伺服器一種標準化方式,將帶有嚴重等級的結構化訊息傳送給用戶端。

重點摘要

MCP 以 JSON-RPC notification 傳送伺服器日誌到用戶端。
Spring AI 可在伺服器端透過 McpSyncRequestContext 記錄,也可在用戶端用 @McpLogging 接收。
文章指出 MCP logging 已在 2026-07 規格修訂中正式棄用,改採 stderr 與 OpenTelemetry。

本文介紹 Spring AI 中的 MCP 日誌記錄,涵蓋伺服器與用戶端兩端的處理方式。MCP 是一種基於 JSON-RPC 的協定,可讓 AI 應用連接外部工具、服務與資料來源,而日誌機制則讓伺服器以具嚴重等級的結構化通知傳送訊息給用戶端。文章以密碼強度檢查工具為例,示範如何在伺服器端透過 McpSyncRequestContext 依不同嚴重程度輸出日誌,並在用戶端使用 @McpLogging 接收通知與調整 log level。文末也提醒,MCP logging 已在 2026 年 7 月規格修訂中正式棄用。

14

Why Your Compose Screenshot Tests Are Flaky (And the Fix Isn't "Add Sleep")

Dev.to Kotlin 作者:YADNYESH RANA 發布:09-07 03:42

為什麼你的 Compose 截圖測試總是時好時壞,以及真正的修正不是「加上睡眠」

只要測試中存在任何非決定性,它就不是在測試,而是在進行一場多了幾步驟的擲硬幣。

重點摘要

關閉自動前進的動畫時鐘,等動畫完全穩定後再截圖。
截圖測試改用內建字型,避免 CI 與本機字型回退差異。
以容忍度進行像素比對,並在截圖前等待真實的完成狀態。

Compose 截圖測試常常在本機通過,到了 CI 卻不穩定失敗,根本原因通常不是需要加睡眠或重試,而是測試本身存在非決定性。文章歸納出四個最常見來源:動畫尚未結束就截圖、CI 與本機字型不同造成字形渲染差異、逐像素完全比對把無害的抗鋸齒視為失敗,以及非同步狀態尚未進入 Compose 就先截圖。對應的修正是:手動控制測試時鐘、為截圖測試固定打包字型、採用容忍度較低的圖片差異比對,以及在可見的完成狀態出現後再擷取畫面。重點是把測試做成可重現,而不是用延遲掩蓋問題。

15

24/28: Code Runs Before Your Application.onCreate: Here’s What

Medium Kotlin 作者:Pramod Patel 發布:09-07 00:31

24/28:程式碼會在你的 Application.onCreate 之前執行:原因如下

ContentProvider 的啟動技巧

重點摘要

說明有些程式碼會早於 Application.onCreate() 執行
重點在於利用 ContentProvider 的啟動技巧
完整內容需前往 Medium 繼續閱讀

本文以簡短提示介紹一種利用 ContentProvider 的啟動技巧,重點在於 Android 中某些程式碼可以先於 Application.onCreate() 執行。由於目前提供的內文只有標題與導語,未包含完整論證與實作細節,但可確定文章主旨是在說明應用程式啟動流程中的早期初始化時機。若要了解完整做法與背景,需前往 Medium 繼續閱讀。

16

7 Structural Design Patterns Every Mobile Engineer Should Know

Medium Kotlin 作者:Satish Nada 發布:09-07 03:56

每位行動工程師都該知道的 7 種結構型設計模式

以實用的 Kotlin 範例說明如何整合 SDK、平台、儲存、快取、BLE 與跨平台程式碼,同時避免不必要的耦合。

重點摘要

聚焦於行動開發中的結構型設計模式
以 Kotlin 範例示範實際整合情境
涵蓋 SDK、平台、儲存、快取、BLE 與跨平台程式碼

本文介紹行動工程師應該了解的 7 種結構型設計模式,並以實用的 Kotlin 範例說明如何在真實專案中運用。內容重點放在整合 SDK、平台、儲存、快取、BLE 與跨平台程式碼,同時避免不必要的耦合。文章強調可維護的架構設計,說明結構型模式如何協助行動團隊更清楚、彈性地組織程式碼。

17

Introducing GuideKit Compose: Beautiful Product Tours for Compose Multiplatform

Medium Kotlin 作者:Tharuka Chathura 發布:09-07 06:37

介紹 GuideKit Compose:為 Compose Multiplatform 打造精美的產品導覽

一個開源 Kotlin 函式庫,可在 Android 與 iOS 上建立 coach marks、聚光燈遮罩與新手引導流程。

重點摘要

適用於 Compose Multiplatform 的開源 Kotlin 函式庫
可建立 coach marks 與 spotlight overlays
支援 Android 與 iOS 的 onboarding 流程

本文介紹 GuideKit Compose,一個用於 Compose Multiplatform 應用的開源 Kotlin 函式庫。它可協助開發者建立 coach marks、spotlight overlays 與新手引導流程,讓產品導覽更具美感與一致性。此工具同時支援 Android 與 iOS,適合需要跨平台使用者引導體驗的專案。

18

Introducing CountryCodeKit Compose: A Flexible Country Code Picker for Compose Multiplatform

Medium Kotlin 作者:Tharuka Chathura 發布:09-07 06:56

介紹 CountryCodeKit Compose:一款適用於 Compose Multiplatform 的彈性國碼選擇器

這是一個開源 Kotlin 函式庫,可用來選擇國碼、顯示旗幟、格式化電話號碼並驗證輸入。

重點摘要

適用於 Compose Multiplatform 的開源 Kotlin 函式庫
可選擇國家電話國碼並顯示旗幟
支援電話號碼格式化與輸入驗證

CountryCodeKit Compose 被介紹為一個適用於 Compose Multiplatform 的開源 Kotlin 函式庫,目標是協助開發者建立彈性的國碼選擇器。它提供選擇國家電話國碼、顯示旗幟、格式化電話號碼與驗證輸入等功能,特別適合需要電話相關流程的跨平台 Compose 專案。文章重點在於它能作為實用的 UI 與輸入處理工具。