Daily Digest

每日新聞摘要

2026年05月18日

今日總結

內容會跟隨語言切換。

📝 今日焦點:Kotlin 專案從 lambda 轉向可序列化 AST,以便 YAML/JSON 往返、檢視與雲端部署;同時,離線優先、隱私導向的 Android 工具仍具實際價值。 🔧 效能最佳化:Room FTS4、Compose 狀態管理與 SAF 備份被用來提升搜尋速度、介面流暢度與資料可靠性;另有預覽技巧可更早抓出 UI 問題。 🏗 架構設計:Compose Navigation、sealed route、ID 傳遞與 popBackStack 的實作,讓多畫面流程更清楚;Windows 端本地中繼、.part 檔與 SHA-256 也提升跨裝置傳輸穩定性。 ✅ 測試與品質:文章提醒預覽與單元測試無法保證生命週期與狀態還原正確,背景切回空白畫面就是警訊;面試題也常追問 Coroutines 細節與邊界情境。

01

From Closures to an AST in a Kotlin Transform Graph

Dev.to Kotlin 作者:Rasmus Ros 發布:05-18 09:20

從 Kotlin 轉換圖的 Closure 走向 AST

一旦設定必須跨過網路傳輸,線上的格式就成了型別 API 必須對齊的對象。

重點摘要

原本的轉換圖完全以 Kotlin lambda 與 closure 組成。
為了支援 YAML/HTTP 設定傳遞,作者改用可序列化的 AST。
透過運算子多載,API 仍保有接近原本 lambda 的使用體驗。

kumulant 最初以 Kotlin lambda 建構轉換與過濾圖,能在程式內自然地組合各種前處理邏輯。然而當系統要支援透過 HTTP 接收 YAML 設定、部署到雲端監控層時,closure 無法序列化、也無法在另一端執行,成為明顯問題。作者因此把原本的函式槽位改成可序列化的封閉式 AST,分別涵蓋 scalar、bool 與 vector 表達式,並用 Kotlin 的運算子多載保留接近原先的語法。這樣不僅能直接輸出 YAML/JSON,也更容易檢視、比對與演進設定。

02

Building a local Wi-Fi phone transfer tool: what I learned about iOS, NanoHTTPD, and Android MediaStore

Dev.to Kotlin 作者:Павел Павел 發布:05-18 13:26

打造本地 Wi-Fi 手機傳輸工具:我從 iOS、NanoHTTPD 與 Android MediaStore 學到的事

讓同一網路上的 Windows 電腦充當應用層中繼,就能避開雲端與 USB,並繞過 AP 隔離的限制。

重點摘要

在美髮沙龍等商用 Wi-Fi 環境中,WebRTC 因 AP 隔離而無法直接連線。
NanoHTTPD 會觸發反向 DNS 查詢,造成 5 到 8 秒延遲,需改寫處理流程。
iOS、Android、Safari 都有各自限制,因此上傳、下載與聯絡人匯入都要採平台特化方案。

作者開發了 SmenaFon,一款 Windows 桌面程式,可在本地 Wi-Fi 上讓客戶手機之間傳輸照片、影片、聯絡人與檔案,不依賴雲端、USB,也不需要在 iPhone 安裝 App。原本嘗試的 WebRTC 在沙龍環境中因 AP 隔離而失敗,因此改由同網路上的 PC 擔任應用層中繼。文章也分享了 NanoHTTPD 在 Windows 上的反向 DNS 延遲、iOS 無法選資料夾與讀取聯絡人的限制、以 .part 檔與 SHA-256 提升上傳可靠性,以及用 MediaStore 和串流 ZIP 配合各平台規則的實作心得。

03

Building an Offline-First AI Prompt Manager: Tech Stack and Lessons Learned

Dev.to Kotlin 作者:Getinfo Toyou 發布:05-18 14:34

打造離線優先的 AI Prompt 管理工具:技術堆疊與心得

我想要一個能把 prompts 存在本機、立即搜尋並順手複製的專用工具。

重點摘要

作者開發無廣告的 Android App「AI Prompt Vault -AI Helper Pro」,專門管理 AI prompts。
技術堆疊採用 Kotlin、Jetpack Compose、Room Database 與 MVVM。
透過 FTS4 即時搜尋、Compose 狀態最佳化與 SAF 匯入匯出,解決離線應用挑戰。

作者因為常在筆記與聊天紀錄中反覆尋找、重寫 prompts,於是開發了 AI Prompt Vault -AI Helper Pro 這款完全離線、無廣告的 Android 應用。為了兼顧速度與原生體驗,專案採用 Kotlin、Jetpack Compose、Room 與 MVVM。文章分享三個主要技術挑戰:以 Room 的 FTS4 實作即時全文搜尋、在 Compose 中妥善管理複雜狀態以維持流暢度,以及透過 SAF 完成可靠的 JSON 備份與還原。作者也強調,離線優先且重視隱私的工具仍然很有價值。

04

I Had No Idea How My Screens Were Talking to Each Other. Then I Learned Compose Navigation.

Dev.to Kotlin 作者:Aalaa Fahiem 發布:05-18 14:49

當我的畫面彼此開始「對話」後,我才學會 Compose Navigation

這篇文章就是我當時希望有人能對我說明的內容。

重點摘要

以 NavController、NavHost、composable() 建立 Compose Navigation 基礎。
用 sealed class 集中管理路由,避免字串打錯造成執行期錯誤。
畫面間盡量只傳 ID,由目標畫面再去載入完整資料。

作者坦承自己一開始只是照著 Claude 複製 Jetpack Compose 導航程式碼,並不理解 NavHost、NavController 與 Back Stack 的意義;直到畫面數量增加、還要處理資料傳遞時,才真正開始學習。文章以商品列表、商品詳情與購物車為例,逐步說明 Navigation 的概念、建立 NavHost 與路由的方式,並建議用 sealed class 集中管理路由字串。最後也示範如何只傳遞 ID,再由 ViewModel 取回完整資料,以及使用 popBackStack 處理返回行為。

05

Compose Previews Without the Boilerplate

Medium Kotlin 作者:Tomislav Tkalčević 發布:05-18 07:19

不寫樣板程式也能做 Compose 預覽

以實用的預覽模式,在 QA 看到之前就先抓出 UI 錯誤。

重點摘要

以更少的重複設定簡化 Jetpack Compose 預覽。
透過實用的預覽模式及早發現 UI 問題。
降低樣板程式,讓預覽更容易維護。

本文介紹一系列實用的 Jetpack Compose 預覽做法,目的是在 QA 介入前就先找出 UI 問題。作者強調不必依賴大量重複的設定程式碼,而是透過更乾淨的預覽方式來降低樣板程式,讓預覽更容易建立與維護。重點在於把 Compose 預覽當作開發階段的快速回饋工具,提早提升介面品質。

06

Kotlin Coroutines Interview Grill: Concepts, Edge Cases & Follow-ups Explained

Medium Kotlin 作者:Neeraja Gandla 發布:05-18 07:33

Kotlin Coroutines 面試考題:概念、邊界情況與追問解析

Kotlin Coroutines 是 Android 面試中最常被問到的主題之一。

重點摘要

Android 面試常見題目
不只考定義,還會追問深入細節
聚焦概念與邊界情況

本文指出,Kotlin Coroutines 是 Android 面試中經常出現的熱門題目,而面試通常不會只停留在基本定義,還會延伸到更深入的追問。根據現有內容,文章旨在引導讀者準備 Coroutine 的核心概念、可能遇到的邊界情況,以及面試官常見的後續問題,協助讀者更全面地應對相關面試情境。

07

3 Compose State Bugs Your Tests Will Never Catch

Medium Kotlin 作者:Dev 175 發布:05-18 09:45

3 個你的測試永遠抓不到的 Compose 狀態錯誤

你的預覽通過了,測試也通過了,但使用者在將 App 切到背景後卻看到空白畫面。

重點摘要

預覽與測試通過,不代表狀態問題不存在。
Compose 應用在切到背景後可能出現空白畫面。
自動化檢查可能漏掉真實執行時的錯誤。

這篇文章指出,Jetpack Compose 中的狀態問題,常常會在預覽與測試都通過的情況下仍然潛伏著。作者提到,應用在切到背景再返回時,使用者可能只看到空白畫面,顯示測試未能捕捉到某些與生命週期和狀態還原相關的錯誤。文章強調,除了預覽與單元測試之外,還需要進一步檢查實際執行時的狀態行為。

08

Day 5: Offline First Arch in Android

Medium Kotlin 作者:Kamaldeep Kakkar 發布:05-18 13:31

第 5 天:Android 的離線優先架構

對 Android 開發者來說,這是一個非常重要的系統設計主題。

重點摘要

介紹 Android 應用的離線優先架構。
將離線支援視為重要的系統設計議題。
原文內容可在 DroidStack 上繼續閱讀。

這篇文章是 Kamaldeep Kakkar 在 DroidStack 系列中的一則短文,標題為〈Day 5: Offline First Arch in Android〉。目前可見內容只指出,對 Android 開發者而言,離線優先是非常重要的系統設計主題,並引導讀者前往 DroidStack 繼續閱讀。雖然摘要內容未提供具體技術細節,但標題已清楚表明主軸是打造在沒有網路連線時仍能正常使用的 Android 應用。

09

I’ve Built Android Apps for 10 Years -Here’s What GenAI Actually Changes (and What It Doesn’t)

Medium Kotlin 作者:Pramod Patel 發布:05-18 00:31

我做了 10 年 Android App:GenAI 真正改變了什麼,以及沒有改變什麼

熱潮很喧鬧,現實其實更有意思。

重點摘要

探討 GenAI 熱潮與實際影響之間的落差
聚焦 GenAI 在 Android 開發中帶來的改變
也指出 GenAI 沒有改變的部分

這篇文章以一位擁有 10 年 Android 開發經驗的作者視角,從務實角度檢視 GenAI,而不是只跟隨市場熱度。根據目前可見內容,作者想傳達的是:外界對 GenAI 的期待往往過於誇大,但其實它對 Android app 開發確實帶來了一些改變,只是並非全面翻轉所有工作。文章重點在於區分真正有助於效率與流程的部分,以及那些仍需依賴工程判斷、無法被 GenAI 取代的環節。

10

Day 6: if / else — Teaching Your Program to Make Decisions

Medium Kotlin 作者:Kirubakaran 發布:05-18 04:54

第 6 天:if / else——教你的程式做出判斷

《Android with Kotlin for Absolute Beginners》系列第 6 天

重點摘要

屬於 Android Kotlin 初學者系列文章
主題是 if / else 的條件判斷
目前提供的內容僅是導向 Medium 正文

這篇文章是《Android with Kotlin for Absolute Beginners》系列的第 6 天,標題顯示本次重點在 if / else 條件式,以及它如何讓程式根據不同情況做出判斷。由於提供的內文非常簡短,只有系列標示與「Continue reading on Medium」的連結提示,因此無法從這段文字取得更多技術細節。