Daily Digest

每日新聞摘要

2026年06月24日

今日總結

內容會跟隨語言切換。

📝 今日焦點:動態 OAuth scope、Spring AI Skills、Kotlin Toolchain 與 KMPilot 展現 AI 與工具鏈正加速進入 Kotlin 開發流程,讓授權、自動化與多平台交付更可控。 🔧 效能最佳化:Compose 強力跳過改寫舊效能心智模型,捲動還原需等目標項目建立後再執行,避免失敗與抖動。 🏗 架構設計:Firebase 上傳外掛、可重用 skeleton modifier、offline-first mutation queue 與 Android 14 相機前景服務,讓發布、UI、同步與背景任務更穩定。 ✅ 測試與品質:以規格驅動與端到端測試維持 KMPilot、授權流程、支付冪等性與隱私封鎖的一致性,降低重試與版本漂移風險。

01

Dynamic Authorization Scopes in Spring Authorization Server

Baeldung 作者:Philippe Sevestre 發布:06-24 10:09

Spring Authorization Server 中的動態授權範圍

這讓它能支援更多使用情境,成為處理複雜授權需求的合適選擇。

重點摘要

擴充 Spring Authorization Server 以支援動態 OAuth 2.0 scope。
客製化 scope 驗證、使用者同意判斷與同意頁面。
以適配器與測試將業務驗證邏輯與 Spring Security 分離。

本文說明如何擴充 Spring Authorization Server,以支援動態 OAuth 2.0 scope。作者先解釋動態 scope 的適用情境:當客戶端需要的權限不事先固定,或只針對單一操作申請授權時,就可避免自行實作另一套授權機制。接著示範如何調整授權伺服器的 scope 驗證、同意判斷與可選的 consent 頁面,並透過 DynamicScopeService 與 adapter 將 Spring Security 邏輯和業務驗證分開。文中也補充雙 security filter chain 設定、同意頁控制器與 Thymeleaf 表單,以及端到端測試方法,驗證取得的 access token 確實帶有動態 scope。

02

A Guide to Agent Skills in Spring AI

Baeldung 作者:Hardik Singh Behl 發布:06-24 10:26

Spring AI 中的 Agent Skills 指南

Agent Skills 提供了一種結構化方式,可在本地定義、封裝並向 AI agent 暴露能力。

重點摘要

介紹 Agent Skills 這項開放規範,讓 agent 可重用能力更容易管理。
說明如何在 Spring AI 中加入 OpenAI 與 agent-utils 相依套件。
實作一個文章摘要 skill,並整合到簡單 chatbot 中。

本文說明如何在 Spring AI 中使用 Agent Skills,讓 AI agent 能在不建立完整 MCP 伺服器的情況下,執行輕量且本地化的自動化任務。文章先解釋 Agent Skills 的規格:一個 skill 由 SKILL.md 清單檔、相關腳本與資源組成。接著示範如何設定 Spring AI 專案、配置 OpenAI chat model,並在 .openai/skills 下建立 article-summarizer 自訂 skill。最後透過 SkillsTool、FileSystemTools 與 ShellTools 讓 chatbot 辨識 skill、執行腳本抓取文章內容,並輸出結構化摘要;同時提醒 ShellTools 會直接在本機執行腳本,需謹慎檢查。

03

Stop Switching Tabs to Deploy Your Android App

Dev.to Kotlin 作者:Hardil Undavia 發布:06-24 07:30

別再切換分頁來部署你的 Android App

Firebase Co-Pilot:Build Uploader 只要一鍵,就能在 IDE 內完成整個流程。

重點摘要

獨立 Android 開發者每次發佈都要重複同一套繁瑣流程。
這個外掛把建置、簽署、上傳與發布整合成一步完成。
可免去終端機、分頁切換與手動操作 Firebase Console。

本文指出,獨立 Android 開發者每次發佈版本都得反覆經歷相同流程:產生已簽署的 APK、找到檔案、開啟 Firebase Console、上傳、填寫版本說明並選擇測試群組。作者認為這套流程雖不困難,卻非常耗時,會直接壓縮實際開發功能的時間。為了解決這個問題,文中介紹 Firebase Co-Pilot: Build Uploader 這款免費的 Android Studio 外掛,可在 IDE 內一鍵完成建置、簽署、上傳與發布,省去終端機、分頁切換與手動操作。

04

Design a screen, get a Clean Architecture feature — Spec-Driven Development that keeps AI-generated KMP code from drifting

Dev.to Kotlin 作者:Ali Sadeghi 發布:06-24 08:44

畫出一個畫面,交付一個符合 Clean Architecture 的功能:以規格驅動穩定的 AI 生成 KMP 程式碼

一份活的規格、幾道護欄,以及一個模型不能打破的架構。

重點摘要

AI 逐步生成功能時,若沒有架構約束,程式碼很容易漂移。
KMPilot 透過設計稿、spec.md 與 Clean Architecture,把規則固定下來。
功能會經由設計、建置、測試與審查的分段技能與代理完成。

本文指出,當 Kotlin Multiplatform 功能一次只靠一個提示詞生成時,AI 程式碼很容易出現模式不一致、層級互相滲透、測試流失與畫面偏離設計等問題。作者因此打造 KMPilot,以規格驅動流程把 Clean Architecture 當成硬性約束,並以核准的 mockup 作為輸入,再用版本化的 spec.md 保存每個功能的契約與決策。實作時,設計先由 Stitch 擷取成藍圖,接著再交給不同技能與代理分工處理資料層、UI、整合與平台程式碼;後續修改、驗證與測試也都依同一份規格進行,避免程式與規格分離。

05

Building a Fast AI Chatbot in Android with OpenAI API and Jetpack Compose

Medium Kotlin 作者:sagar jaulaniya 發布:06-24 07:37

在 Android 中結合 OpenAI API 與 Jetpack Compose 打造快速 AI 聊天機器人

AI 驅動的聊天機器人正逐漸成為 Android 應用中的常見功能。

重點摘要

Android 應用越來越常加入 AI 聊天機器人。
文章聚焦 OpenAI API 與現代 Android 工具的結合。
Jetpack Compose 被用來作為實作方式之一。

本文簡介 Android 應用中 AI 聊天機器人的普及趨勢,並指出可透過 OpenAI API 與 Jetpack Compose 等現代 Android 工具來建構快速的對話體驗。從現有內容來看,這篇文章應是介紹如何在 Android 上整合生成式 AI 的概覽或教學,重點放在實作思路與現代化開發流程。

06

Strong Skipping Mode, Explained

Medium Kotlin 作者:Christophy Barth 發布:06-24 10:51

強力跳過模式解析

強力跳過模式改變了規則;你幾年前記住的部分 Compose 效能觀念已經過時。

重點摘要

幾年前學到的 Compose 效能建議可能已不再適用。
強力跳過模式改變了 Compose 的跳過機制。
文章說明為何需要更新舊有的效能理解。

這篇文章回顧 Compose 效能最佳化的相關觀念,指出幾年前學到的部分內容如今已不正確。作者強調,強力跳過模式改變了跳過機制的規則,因此開發者需要重新理解 Compose 的效能行為。整體來說,文章是在說明這項變更,以及為何舊有的心智模型需要更新。

07

Scroll Restoration Fails When the Item Doesn’t Exist Yet in Compose

Medium Kotlin 作者:chanzmao 發布:06-24 11:45

在 Compose 中,當項目尚未存在時,Scroll Restoration 會失敗

不要猜測何時呼叫 scrollToItem(),而是等目標項目出現。

重點摘要

若目標項目尚未被建立,還原捲動可能會失敗。
過早呼叫 scrollToItem() 可能找不到預期的位置。
更可靠的做法是先等待目標項目存在,再還原捲動狀態。

本文說明 Jetpack Compose 中常見的捲動還原問題:如果在目標項目尚未建立前就嘗試恢復位置,scrollToItem() 可能會失敗或出現非預期行為。作者建議不要猜測呼叫時機,而是等待目標項目真正出現在清單中,再執行還原。這樣可以避免過早恢復,讓捲動狀態重建更穩定可靠。

08

Boilerplate Code in Android Development: Examples, Problems, and Modern Solutions

Medium Kotlin 作者:Halil Özel 發布:06-24 12:56

Android 開發中的樣板程式碼:範例、問題與現代解法

如果你在 Android 專案中工作夠久,你大概聽過有人這麼說:

重點摘要

文章先引出 Android 開發中的樣板程式碼。
內容聚焦重複程式帶來的常見困擾。
並以現代化解法作為改善方向。

本文以 Android 開發中的樣板程式碼為主題,先點出長期存在的重複撰寫問題,接著預告將從範例、困境到現代解法逐步說明。雖然提供的內文很短,但可看出文章核心在於討論開發者常遇到的重複性負擔,以及如何透過較新的做法減少樣板程式碼、提升開發效率與可維護性。

09

Build a Reusable Skeleton Modifier in 40 Lines of Compose

Medium Kotlin 作者:The Android Blacksmith 發布:06-24 13:13

用 40 行 Compose 打造可重用的 Skeleton Modifier

設計師交付 loading 狀態後,你往往得建立 `SkeletonUserCard`、`SkeletonProductRow`、`SkeletonSettingsPage`……

重點摘要

問題:每個畫面各做一個 skeleton 元件太重複
目標:用一個可重用的 Compose modifier 解決
文章主打約 40 行的精簡實作

文章指出,當設計師交付 loading 狀態時,開發者常會為不同頁面各自建立 skeleton 元件,例如 `SkeletonUserCard`、`SkeletonProductRow`、`SkeletonSettingsPage`,結果造成大量重複。作者主張改用一個可重用的 Jetpack Compose skeleton modifier,以更精簡的方式統一處理載入佔位。全文重點在於用約 40 行程式碼完成這個做法,降低維護成本並減少重複實作。

10

Mastering Kotlin Annotations: Metadata, Magic, and Code Generation

Medium Kotlin 作者:Android Expert 發布:06-24 13:42

精通 Kotlin 註解:中繼資料、魔法與程式碼生成

@ 符號如何在幕後驅動 Jetpack Compose、Room 與 KSP,消除樣板程式碼。

重點摘要

註解可攜帶供編譯期與執行期使用的中繼資料。
它們支援 Jetpack Compose、Room 與 KSP 等框架運作。
核心價值在於透過程式碼生成減少樣板程式碼。

本文介紹 Kotlin 註解在 Jetpack Compose、Room 與 KSP 等工具中的核心作用。作者指出,@ 符號不只是語法裝飾,註解其實會附加中繼資料,供函式庫在編譯或執行時讀取,進而驅動行為、產生程式碼並減少重複樣板。文章以 Android 開發情境說明註解如何讓程式更精簡、更具表達力,也更容易維護。

11

Migration from XML to Jetpack Compose: A Practical Guide for Android Developers

Medium Kotlin 作者:Apoorv Rathore 發布:06-24 13:54

從 XML 遷移到 Jetpack Compose:Android 開發者的實用指南

請在 Medium 上繼續閱讀 »

重點摘要

原文僅提供標題、作者與連結。
內文未包含實際段落內容,只有繼續閱讀提示。
缺乏完整文章,無法忠實整理遷移重點。

本次提供的資料只有文章標題、作者、連結,以及「Continue reading on Medium」的提示,沒有實際內文,因此無法可靠判斷文章中對 XML 遷移到 Jetpack Compose 的具體步驟、做法或建議。若要產出忠於原文的摘要,需補充完整文章內容或更多節錄段落。

12

Kotlin Toolchain 0.11: The Next Step for Amper

Kotlin Blog 作者:Joffrey Bion 發布:06-24 13:04

Kotlin Toolchain 0.11:Amper 的下一步

Amper 已演進為 Kotlin Toolchain,並進入 Alpha 階段。

重點摘要

Amper 正式更名為 Kotlin Toolchain,並以 Alpha 版本推出。
新增全域 kotlin CLI 安裝與自動對應專案 wrapper 的能力。
支援 JVM 函式庫發布、Cinterop、外掛自訂檢查與指令。

Amper 0.11.0 宣告產品品牌轉向 Kotlin Toolchain,並以 Alpha 版本登場,目標是成為 Kotlin 生態系的統一入口。新版加入可全域安裝的 kotlin CLI,且會自動對應專案中的 wrapper;同時預覽支援 JVM 函式庫發布到一般 Maven 倉庫與 Maven Central。除此之外,還包含 Cinterop 綁定生成、外掛開發 API、客製化檢查與指令、生成檔案註冊,以及 IDE、終端輸出與預設版本等多項改進。

13

The Big Lie in Mobile Privacy (And How We Fixed It)

Dev.to Kotlin 作者:Samir Moukhliss 發布:06-24 00:35

行動隱私的最大謊言(以及我們如何修正它)

傳統工具像是事後才去搶走竊賊的筆記本;CookiePrime 則是先把門鎖上。

重點摘要

Android 的同意視窗不一定真的阻止追蹤。
CookiePrime 在追蹤器醒來前就先行凍結它們。
其裝置內掃描可在 93 毫秒內找出隱藏的追蹤腳本。

文章指出,行動裝置隱私常給人一種被保護的錯覺:使用者按下「拒絕全部」後,隱藏的 SDK 可能早已把裝置 ID、位置與使用習慣寫入本機記憶體。CookiePrime 強調,真正的隱私應在裝置端直接執行,而不是只攔截外送流量。其 Android 引擎會快速掃描 App,當使用者選擇不追蹤時立即凍結相關追蹤器,避免資料被收集或外洩。文章也提到整合速度與多種偵測方式,展示 CookiePrime 想重新定義隱私防護標準。

14

Stop Losing Offline User Updates: Build a Room Mutation Queue

Dev.to Kotlin 作者:YADNYESH RANA 發布:06-24 07:07

別再遺失離線使用者更新:打造 Room Mutation Queue

要建立真正的 offline-first App,就需要一個本機交易寫入佇列。

重點摘要

在 Room 中建立待處理 mutation 表,記錄操作類型、目標表與 payload。
離線更新先寫入本機資料表,再在同一交易中排入同步佇列。
以 WorkManager 搭配網路條件與重試機制,依序同步所有變更。

多數 Android App 會用 Room 處理離線讀取,但離線寫入常會失敗、卡住 UI,或根本無法可靠保存。本文提出一套以 Room、Ktor 與 WorkManager 實作的 offline-first mutation queue。使用者在離線時的變更會先寫入本機快取資料表,並在同一個資料庫交易中加入待同步佇列,讓畫面立即更新且資料不遺失。之後由 CoroutineWorker 依序讀取佇列、送往伺服器、刪除成功項目,失敗則以指數退避重試,達成連線恢復後自動同步。

15

FOREGROUND_SERVICE_TYPE_CAMERA: Keeping a Camera Alive With the Screen Off on Android 14+

Dev.to Kotlin 作者:Super Funicular 發布:06-24 07:11

FOREGROUND_SERVICE_TYPE_CAMERA:在 Android 14+ 讓螢幕熄滅時仍能保持相機運作

Android 14 的前景服務類型,本質上是對啟動時機與方式的契約。

重點摘要

Android 14 的相機前景服務必須同時滿足權限、服務類型與啟動時機三項條件。
由於 CAMERA 是 while-in-use 權限,相機前景服務不能在背景直接啟動。
同一個前景服務可同時承載相機、喚醒鎖與本機網頁伺服器,並由使用者主動開始。

本文說明如何在 Android 14 以上於螢幕關閉時持續使用相機,且不觸發 SecurityException。關鍵是三部分契約:除了基礎 FOREGROUND_SERVICE 外,還要加入 FOREGROUND_SERVICE_CAMERA;在 service 上標明 android:foregroundServiceType="camera";並且只能在可見、由使用者觸發的狀態下啟動。因為 CAMERA 屬於 while-in-use 權限,從開機接收器、鬧鐘或背景工作直接啟動都會失敗。作者也展示可行流程:先從 Activity 呼叫 startForegroundService,再立即升級為前景服務、取得 partial wake lock,最後開啟 Camera2;同一個服務也可承載本機 Ktor 伺服器與 Play Console 所需說明。

16

Idempotency in Android: Building Payment Systems That Survive the Network

Medium Kotlin 作者:Ian Nthuli Mutuku 發布:06-24 02:51

Android 中的冪等性:打造能在網路故障下存活的支付系統

你的使用者剛在轉帳畫面按下了「Pay」。

重點摘要

請求可能已在伺服器成功處理,但 App 端卻逾時。
若缺乏冪等性,重試可能造成重複轉帳。
透過冪等設計,支付系統可在不穩定網路下保持安全。

文章以行動支付常見情境開場:使用者按下 Pay 後,伺服器已完成轉帳,但 App 的網路請求卻逾時。作者藉此說明 Android 支付流程中「冪等性」的重要性。當請求可安全重複執行時,客戶端即使在網路失敗後重試,也能避免重複扣款或重複轉帳,讓支付系統在不穩定連線下仍更可靠。

17

Looks fine, but…

Medium Kotlin 作者:Marcin Moskala 發布:06-24 06:16

看起來沒問題,但……

Hello [[firstname]], Continue reading on kt.academy »

重點摘要

本文內容僅是一段簡短的導流訊息。
開頭使用了帶有占位符姓名的問候語。
訊息引導讀者前往 kt.academy 繼續閱讀。

這份內容並不是完整文章,而是來自 Medium 的一段簡短預告。內文先以個人化占位符「Hello [[firstname]]」開場,接著提示讀者前往 kt.academy 繼續閱讀。除標題、作者、連結與這段導流訊息外,沒有提供其他可驗證的文章正文。