Daily Digest

每日新聞摘要

2026年07月16日

今日總結

內容會跟隨語言切換。

📝 今日焦點:Koog 1.0 以穩定 API、HTTP 解耦、OpenTelemetry 與 Android 本地推論,降低 AI Agent 導入風險;Kotlin 2.5 亦已進入規劃,生態變動值得提前關注。 🔧 效能最佳化:模組化能大幅縮短建置時間,Compose UI 效能討論則延續 recomposition 與 state hoisting,核心都在減少開發與執行成本。 🏗 架構設計:Nimbus Weather、Muffle、Nexo Player 與 KMP 架構文章,分別強調 Clean Architecture、離線優先、模組邊界與資料流設計,提升可維護性與隱私。 ✅ 測試與品質:Duration 與 kotlinx.serialization 的時間字串處理差異提醒團隊需明確區分寬鬆輸入與標準輸出,避免序列化行為失控。

01

Balancing flexibility and strictness with lenient Duration deserialization in Kotlin

Dev.to Kotlin 作者:Enrico Testori 發布:07-16 10:41

以寬鬆的 Duration 反序列化在 Kotlin 中平衡彈性與嚴格性

Duration.parse() 是為了彈性而設計,而 kotlinx.serialization 則刻意保持嚴格以強化標準化。

重點摘要

Duration.parse() 可接受像 "1s" 這類非 ISO 輸入。
kotlinx.serialization 反序列化 Duration 時採用 parseIsoString(),僅接受 ISO-8601。
可自訂 serializer:輸入寬鬆、輸出仍維持 ISO 標準。

Kotlin 的 Duration 與 kotlinx.serialization 對時間字串的處理方式刻意不同。前者的 Duration.parse() 為了方便開發者,可接受像 "1s" 這類較寬鬆的格式;後者在反序列化時則使用 parseIsoString(),嚴格遵守 ISO-8601。文章透過原始碼說明這項設計,並示範如何撰寫自訂的寬鬆 serializer:讀取時用 parse() 接受實務上的多種輸入,輸出時仍以 toIsoString() 產生標準化格式,兼顧相容性與資料交換的一致性。

02

Building Practical AI Agents with Koog 1.0: An Engineer's Perspective

Dev.to Kotlin 作者:Karan Verma 發布:07-16 10:58

以 Koog 1.0 建構實用 AI Agent:工程師視角

Koog 1.0 最重要的里程碑不是炫目的新包裝,而是為長期運作的 Agent 應用提供更穩定的基礎。

重點摘要

穩定模組承諾至少一年不會有破壞性變更。
HTTP 傳輸層解耦,方便接入既有網路與基礎設施。
OpenTelemetry 與 LiteRT 擴展了可觀測性與端上推論場景。

本文從工程實務角度解析 Koog 1.0 的價值,重點不在逐項功能,而在它為 Kotlin 與 Java 開發者提供了更穩定的 AI Agent 基礎。作者指出,對長期專案而言,API 穩定性是最大門檻,而 Koog 對穩定模組提供至少一年不破壞相容的承諾,能降低導入風險。文章進一步介紹三項關鍵架構改進:可與既有網路堆疊整合的 HTTP 傳輸解耦、支援 Kotlin Multiplatform 的 OpenTelemetry 可觀測性,以及可在 Android 本地推論的 LiteRT。最後也提到兩個社群藍圖:邊緣端行動 Agent 與後端 JVM 中介層。

03

Building Nimbus Weather: A Clean Architecture + MVI Case Study in Jetpack Compose

Medium Kotlin 作者:Mohammad Nouri 發布:07-16 08:41

打造 Nimbus Weather:Jetpack Compose 中的 Clean Architecture + MVI 案例研究

我如何用 Ktor、Room、Koin 和手工繪製的 Canvas 動畫,做出一款玻璃擬態 Android 天氣 App。

重點摘要

以 Jetpack Compose 實作玻璃擬態風格的 Android 天氣 App
採用 Clean Architecture 與 MVI 作為架構設計
結合 Ktor、Room、Koin 與自製 Canvas 動畫

本文以 Nimbus Weather 為案例,介紹作者如何使用 Jetpack Compose 打造一款具有玻璃擬態風格的 Android 天氣應用。文章重點放在架構與技術選型:以 Clean Architecture 與 MVI 建構應用流程,並搭配 Ktor 處理網路請求、Room 儲存本機資料、Koin 管理依賴注入,另加入手工繪製的 Canvas 動畫強化介面表現。由於目前僅提供摘要資訊,文章核心可視為對現代 Android 開發實作與經驗的整理。

04

Guide to Android App Modularization

Medium Kotlin 作者:Davud Davudov 發布:07-16 09:31

Android 應用程式模組化指南

想像一下,你只改了一行程式碼,建置卻要花 5 分鐘。

重點摘要

模組化有助於大幅縮短建置時間。
在大型應用中,微小變更也可能導致漫長建置。
本文以 Android 應用模組化作為解法切入。

本文以開發效率為切入點,說明 Android 應用程式模組化的價值:當你只修改一行程式碼,建置卻要花上 5 分鐘;若架構更合理,則可能縮短到 30 秒。從目前可見內容來看,文章主要在引導讀者理解,透過模組化可改善建置速度與開發流程,讓大型 Android 專案更容易維護與迭代。

05

Android UI Performance (Part 2): Preserving Object Identity via State Hoisting

Medium Kotlin 作者:Bagas Pardana Ilham 發布:07-16 11:35

Android UI 效能(第 2 部分):透過狀態上提保留物件識別性

在上一部分中,我探討了重組,並提到了 Jetpack Compose 中的穩定性。

重點摘要

延續 Android UI 效能系列
回顧 Jetpack Compose 的重組與穩定性
引出以狀態上提保留物件識別性的主題

本文是 Android UI 效能系列的續篇,銜接前一部分對 recomposition 與 Jetpack Compose 穩定性的討論,並預告本篇將聚焦於如何透過 state hoisting 保留物件識別性。不過目前提供的內容僅是文章開頭與導讀,未包含更多技術細節、範例或完整論證,因此只能就現有文字做忠實摘要。

06

แชร์ประสบการณ์ทำ Dynamic app icon บน Android ที่ช่วยให้เปลี่ยนไอคอนตามแคมเปญ โดยไม่ต้องรอแอปอัปเดต

Medium Kotlin 作者:Nuntapong Aoumrod 發布:07-16 11:35

分享在 Android 上實作動態 App 圖示的經驗

可依活動更換圖示,無須等待 App 更新。

重點摘要

依行銷活動切換 App 圖示
不必等待新版本上架
以 Android 實作為實務解法

文章分享作者在 Android 上實作 Dynamic app icon 的經驗,讓 App 能依照不同活動或行銷檔期即時更換圖示,不必等待應用程式更新後才能上線。內容強調這項做法對品牌呈現與活動操作的便利性,能更快配合需求調整視覺。本文出自 LINE MAN Wongnai 的 Android 工程師,屬於實作經驗分享。

07

Preparing for Kotlin 2.5: The Features Already Being Discussed

Medium Kotlin 作者:AndroidLab by Andre 發布:07-16 13:34

迎接 Kotlin 2.5:已經開始討論的功能

JetBrains 正悄悄為 2026 年 12 月做準備,而後端與 Compose 開發者現在就該留意。

重點摘要

JetBrains 據稱正規劃 2026 年 12 月推出 Kotlin 2.5。
文章聚焦於已經開始被討論的功能。
後端與 Compose 開發者被點名為主要關注對象。

JetBrains 據稱正在悄悄規劃於 2026 年 12 月推出 Kotlin 2.5,文章指出後端與 Compose 開發者都應該及早留意。雖然目前可見內容相當簡短,但核心訊息很明確:Kotlin 的下一個主要版本已在討論中,未來可能帶來的變動,將影響生態系統中的不同開發場景。

08

Material 3 Just Got a Serious Upgrade

Medium Kotlin 作者:AndroidLab by Andre 發布:07-16 13:43

Material 3 剛迎來一次重大升級

新增元件、更聰明的預設值與更具表現力的動態效果,讓 Google 的設計系統更像是為真實應用而打造。

重點摘要

Material 3 新增多種元件
預設行為更聰明
動態效果更具表現力

Google 的 Material 3 設計系統被形容為迎來一次重大升級,重點包括新增元件、更聰明的預設值,以及更具表現力的動態效果。這些更新讓整體體驗更貼近實際應用需求,不再只是展示性質的設計規範,而是更適合用在真正的產品中。

09

Pure Functions, Impure Functions, and Side Effects in Kotlin: A Complete Guide

Medium Kotlin 作者:Nemat 發布:07-16 14:52

Kotlin 中的純函式、非純函式與副作用:完整指南

如果你學過 Kotlin、Android、Jetpack Compose 或函數式程式設計,很可能已經看過純函式、非純函式與副作用等名詞。

重點摘要

介紹 Kotlin 與函數式程式設計的核心概念
說明純函式與非純函式的差異
聚焦副作用在實務開發中的意義

本文旨在釐清 Kotlin 開發者在學習 Android、Jetpack Compose 或函數式程式設計時常會遇到的幾個核心概念,包括純函式、非純函式與副作用。作者以完整指南為定位,幫助讀者理解這些名詞的差異及其重要性。不過目前可取得的內容只有開頭一句,因此無法根據摘錄確認全文涵蓋的細節與範圍。

10

The Best Architecture for KMP Apps, and When Not to Use It. Part 2

Medium Kotlin 作者:Pavel Pristalov 發布:07-16 15:10

KMP 應用程式的最佳架構,以及何時不該使用它:第 2 部分

在第一部分中,我們探討了 KMP 的哲學、架構如何隨專案成長而演進,並說明了為什麼你……

重點摘要

承接第一部分的討論
著重於 KMP 架構如何隨專案成長而演變
也說明這種架構何時不適合使用

這篇文章是 Kotlin Multiplatform(KMP)應用程式架構系列的第二部分。文中先回顧第一部分的內容,包括 KMP 的設計理念、架構如何隨專案規模成長而演進,以及某些設計選擇的重要性。根據目前可見的摘要,本文將延續這個脈絡,進一步討論某種架構何時適合 KMP 專案、何時又不該採用。

11

Building Reliable Geofencing Without a Backend Dependency

Dev.to Kotlin 作者:Haseeb 發布:07-16 00:37

打造不依賴後端的可靠地理圍欄

把邏輯留在本機,就能避開延遲帶來的問題。

重點摘要

Muffle 完全離線運作,將地理圍欄與祈禱時間邏輯都放在裝置端。
作者結合 AlarmManager、GeofencingClient 與 PendingIntent,讓靜音切換更穩定省電。
定位誤差、勿擾權限與緊急通話例外,都是實作中必須處理的關鍵問題。

本文分享作者打造 Android 應用 Muffle 的經驗,目標是在不依賴後端或持續網路連線的前提下,自動管理手機音量模式。作者因清真寺內一支手機突然響鈴而受到啟發,認為這類功能必須即時且本機化,不能受限於網路延遲。於是他把祈禱時間計算與地理圍欄邏輯都放到裝置上,並透過 AlarmManager、GeofencingClient 和 PendingIntent 觸發 AudioManager 狀態切換,同時兼顧省電與可靠性。文章也提到定位精準度不足、地理圍欄半徑需調大、需加入 dwell time 防止反覆切換,以及要透過 NotificationManager.Policy 支援緊急來電例外。核心觀念是尊重平台限制、保持離線、重視隱私與穩定性。

12

Building Nexo Player: An Offline-First Android Media App with PDF-to-Audiobook Support

Dev.to Kotlin 作者:Chandrakanta Behera 發布:07-16 06:41

打造 Nexo Player:支援 PDF 轉有聲書的離線優先 Android 多媒體 App

這就是我打造 Nexo Player 的原因:一款離線優先的 Android 多媒體應用,將本機播放、文件閱讀、有聲書生成、文字轉語音與私密儲存整合在同一體驗中。

重點摘要

整合影片、音訊、PDF/EPUB 閱讀、朗讀與安全保險庫。
以 local-first 為原則,檔案預設留在裝置上。
將背景有聲書生成、進度與復原視為核心體驗。

文章介紹作者以 Kotlin、Jetpack Compose 與 Media3 打造的 Nexo Player,目標是把本機影音播放、PDF/EPUB 閱讀、文字轉語音、有聲書生成與私密保險庫整合成單一 Android 體驗。其核心理念是離線優先:除非使用者主動選擇,否則檔案都應保留在裝置上。文中說明了播放續播、文件轉語音處理、背景工作進度回報、配音員選擇與安全保險庫設計等挑戰,並總結出隱私、節制功能與清楚流程的重要性。

13

As we celebrate the 15th anniversary of Kotlin, let’s not forget its Scala roots

Medium Kotlin 作者:Alonso Del Arte 發布:07-15 23:27

在慶祝 Kotlin 15 週年之際,也別忘了它的 Scala 淵源

在慶祝 Kotlin 15 週年之際,也別忘了它的 Scala 淵源

重點摘要

Kotlin 迎來 15 週年。
文章回顧 Kotlin 與 Scala 之間的淵源。
目前可見內容僅有圖片來源與前往 Medium 繼續閱讀的提示。

從提供的內容可知,這篇文章的標題與作者資訊完整,但內文僅顯示圖片出處與「Continue reading on Medium」的提示。依標題判斷,文章主軸是在慶祝 Kotlin 15 週年的同時,提醒讀者不要忽略 Scala 對 Kotlin 起源的影響。由於缺少完整正文,無法從現有文字再確認更多細節。

14

Android System Design: How Data Flows Through Your Application

Medium Kotlin 作者:Nemat 發布:07-16 02:44

Android 系統設計:資料如何在你的應用程式中流動

在這個 Android System Design 系列的前幾篇文章中,我們討論了:

重點摘要

延續 Android System Design 系列內容。
主題聚焦於資料在應用程式中的流動方式。
目前提供的摘錄未包含文章的具體技術內容。

這篇文章出自 Nemat 的 Android System Design 系列。摘錄內容僅提到前幾篇文章已討論過相關主題,並引導讀者前往 Medium 繼續閱讀,因此沒有提供具體的技術細節。依目前可見文字來看,本文應是系列中的延伸篇章,主題聚焦於資料如何在 Android 應用程式中流動,但實際說明並未出現在這段摘錄中。

15

Jetpack Compose Setup: A Beginner’s Guide to Creating Your First Compose Project

Medium Kotlin 作者:Vaibhavi Rana 發布:07-16 05:40

Jetpack Compose 設定:建立第一個 Compose 專案的初學者指南

了解如何建立第一個 Jetpack Compose 專案、認識專案結構、預覽 composable,並將 Compose 整合進既有應用程式。

重點摘要

建立第一個 Jetpack Compose 專案
了解基本的專案結構
預覽 composable 並整合到既有應用程式

本文以初學者為對象,帶領讀者完成 Jetpack Compose 的基本設定與第一個專案建立流程。內容涵蓋如何理解專案結構、使用 composable 預覽,以及將 Compose 整合到既有 Android 應用中。整體而言,這是一篇適合作為入門起點的實作導引,幫助開發者開始用 Compose 建立現代化的 Android 介面。