Daily Digest

每日新聞摘要

2026年05月24日

今日總結

內容會跟隨語言切換。

📝 今日焦點:AppFunctions 讓 AI 助理可直接呼叫 App 動作,開發需把它視為公開 API,強化權限、驗證與錯誤可機器處理。 🔧 效能最佳化:ImagePickerKMP 1.0.35 加入自動圖片壓縮,降低上傳、儲存與記憶體成本,並可依場景選擇壓縮等級。 🏗 架構設計:Schemify 以 KSP 在編譯期將 data class 轉成 JSON Schema,減少手動維護並讓模型與 schema 同步更新。 🏗 架構設計:以 OpenStreetMap 取代 Google Maps 的討論,凸顯行動地圖整合在成本、控制權與替代方案上的取捨。 ✅ 測試與品質:Compose 中 rememberSaveable、Saver 與 LaunchedEffect、rememberCoroutineScope 的差異,關鍵在狀態持久化與生命週期控制。 🚀 語言演進:Kotlin 初學者系列持續介紹 functions,作為程式結構邁向實作的基礎轉折點。 🚀 語言演進:HTTP Basic Auth 與 Spring request 解碼示範,提醒 Base64 不是加密,明文密碼應盡量避免保存。

01

The Sleeper Announcement from Google I/O 2026 That Will Change How We Think About Apps

Dev.to Kotlin 作者:Vrushali 發布:05-24 11:35

Google I/O 2026 那個被忽略、卻可能重新定義 App 的公告

AppFunctions 讓 App 從被動 UI 變成可由 AI 助理直接呼叫的能力集合。

重點摘要

AppFunctions 可將具名動作直接暴露給 AI 助理。
開發者必須考慮冪等性、結構化錯誤與明確授權。
這項功能也帶來隱私、稽核與能力外洩的新風險。

本文指出,在 Google I/O 2026 的眾多焦點之中,真正可能改變 Android 開發思維的是 AppFunctions。它允許 App 對外暴露可由 Gemini 等 AI 助理直接呼叫的具名動作,讓使用者不必先打開 App、進入頁面或完成點選流程。作者以範例說明整合方式,並強調重點不在註解本身,而在架構:函式要能重試不重複、錯誤要可供機器處理,且必須明確做權限與呼叫者驗證。同時,這也使隱私與安全邊界更重要。

02

Automatic Image Compression for Camera and Gallery in ImagePickerKMP

Dev.to Kotlin 作者:Ismoy Belizaire 發布:05-24 14:04

ImagePickerKMP 的相機與相簿自動圖片壓縮

ImagePickerKMP 1.0.35 為相機與相簿流程加入了自動圖片壓縮。

重點摘要

圖片壓縮已整合進 ImagePickerKMP 的設定。
可在初始化時選擇 NONE、LOW、MEDIUM 或 HIGH。
處理後的暫存檔會透過 PhotoResult 回傳給應用程式。

ImagePickerKMP 1.0.35 為相機與相簿流程加入自動圖片壓縮,協助行動開發者降低上傳時間、儲存成本與記憶體占用,而不必自行撰寫縮放與重新編碼邏輯。壓縮功能可直接在元件設定中指定,支援 NONE、LOW、MEDIUM、HIGH 等層級。函式庫會先解碼原始圖片,再套用指定壓縮並儲存為暫存檔,最後透過 PhotoResult 回傳。這項能力特別適合 Kotlin Multiplatform 專案,因為圖片處理常帶有平台差異;開發者也可依用途選擇合適的壓縮程度。

03

Day 12: Functions — Where Your Code Starts Looking Like a Real Program

Medium Kotlin 作者:Kirubakaran 發布:05-24 07:26

第 12 天:函式——你的程式碼開始像一個真正的程式

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

重點摘要

介紹 Kotlin 初學者系列的第 12 天。
主題聚焦在 Android 開發中的函式。
將函式視為邁向真正程式的關鍵一步。

這篇文章是《Android with Kotlin for Absolute Beginners》系列的第 12 天,主題為函式。從標題與摘要可知,作者把這一課定位為程式碼開始像「真正的程式」的轉折點。不過目前提供的內文只有系列名稱與導讀字樣,沒有更多技術細節,因此只能確認它是延續 Kotlin Android 初學者教學、聚焦函式概念的一篇文章。

04

Jetpack Compose’da rememberSaveable ve Saver nedir ?

Medium Kotlin 作者:deniz baş 發布:05-24 08:29

Jetpack Compose 中的 rememberSaveable 與 Saver 是什麼?

在 Jetpack Compose 中,我們經常使用 remember 來進行狀態管理。

重點摘要

介紹 Jetpack Compose 的狀態管理。
說明在 Android Kotlin 中常用 remember。
文章主題聚焦於 rememberSaveable 與 Saver。

本文以 Jetpack Compose 的狀態管理為起點,指出在 Android Kotlin 中,開發者多半會先使用 remember 來保存狀態。從目前提供的內容來看,文章主題聚焦在 rememberSaveable 與 Saver 的用途與概念,應是延伸說明 Compose 如何處理更持久的狀態保存。不過,摘要中未提供進一步技術細節或程式範例,因此只能忠實概括其導讀性質。

05

The One Compose Side Effect You Probably Misuse

Medium Kotlin 作者:Dev 175 發布:05-24 10:50

你可能用錯的那個 Compose Side Effect

在你的 composable 離開畫面之前,LaunchedEffect 和 rememberCoroutineScope 看起來像是在做同一件事。

重點摘要

LaunchedEffect 與 rememberCoroutineScope 初看之下很相似。
差異會在 composable 離開畫面時顯現。
選對 side effect 對 Compose 的生命週期處理很重要。

這篇文章指出 Jetpack Compose 中一個常見誤用:LaunchedEffect 和 rememberCoroutineScope 一開始看起來像是在做同樣的事,但當 composable 離開畫面後,兩者的行為就會分歧。關鍵差異在於生命週期與取消機制,會影響 coroutine 是否繼續執行。作者強調,理解這個界線有助於寫出正確的 Compose 程式,避免隱晦的副作用問題。

06

Getting HTTP Basic Authentication from HttpServletRequest

Baeldung 作者:Hamid Reza Sharifi 發布:05-23 23:11

從 HttpServletRequest 取得 HTTP Basic Authentication

本文說明 HTTP Basic Authentication 的運作方式,以及如何在 Spring 應用中從請求中擷取原始密碼。

重點摘要

Basic Authentication 會在 Authorization 標頭中以 Base64 傳送帳密。
可透過 HttpServletRequest 手動解碼標頭取得 username 與 password。
也可用自訂 Servlet Filter 將原始密碼保存為 request attribute。

本文介紹 HTTP Basic Authentication 的基本原理,說明客戶端如何在 Authorization 標頭中以 Base64 編碼送出 username 與 password,並強調 Base64 只是編碼不是加密,因此必須搭配 HTTPS 使用。文章接著示範如何在 Spring 應用中,直接從 HttpServletRequest 讀取並解碼標頭,取得帳號與密碼;也提供一個自訂 OncePerRequestFilter,將原始密碼存入 request attribute 供後續使用。最後還補充測試方式,並提醒除非必要,否則應避免擷取明文密碼。

07

¿Qué pasa cuando cambias Google Maps por OpenStreetMap en una aplicación móvil desarrollada con…

Medium Kotlin 作者:Jose A. P. 發布:05-24 01:53

在以……開發的行動應用中,將 Google Maps 改為 OpenStreetMap 會發生什麼事?

當你在以……開發的行動應用中,將 Google Maps 換成 OpenStreetMap 時,會發生什麼事?

重點摘要

文章比較了在行動應用中使用 Google Maps 與 OpenStreetMap 的差異。
內容脈絡與 Kotlin 行動開發相關。
目前提供的文字只有導讀與連結,未包含完整正文。

這篇文章看起來是在探討:在以 Kotlin 開發的行動應用中,若將地圖服務從 Google Maps 換成 OpenStreetMap,會帶來哪些實際影響。不過,現有內容只提供標題、作者資訊與外部連結,沒有完整內文,因此無法得知具體的實作方式、效能表現或作者結論。就標題判斷,文章應聚焦於行動開發中的地圖整合選擇,以及從商用地圖服務轉向開放式替代方案時可能面臨的取捨。

08

Schemify — Generate JSON Schema from Kotlin Data Classes at Compile Time

Medium Kotlin 作者:Sahil Thakar 發布:05-24 04:53

Schemify:在編譯期從 Kotlin Data Class 產生 JSON Schema

一個由 KSP 驅動的小型 SDK,可將 Kotlin data classes 轉成 JSON Schema(Draft 2020–12)。

重點摘要

透過 KSP 在編譯期間生成 JSON Schema。
可將 Kotlin data classes 轉換為 Draft 2020–12 規格。
定位為輕量化的 schema 產生工具。

Schemify 是一個由 Kotlin Symbol Processing(KSP)驅動的小型 SDK,可在編譯期將 Kotlin data classes 轉換成 JSON Schema。文章指出,它支援 JSON Schema Draft 2020–12,讓開發者能以自動化方式維持資料模型與 schema 定義的一致性,而不必手動撰寫或更新 schema。這種做法將產生流程整合進建置階段,降低維護成本,也更容易隨 data class 的變動同步更新。