Daily Digest

每日新聞摘要

2026年07月17日

今日總結

內容會跟隨語言切換。

📝 今日焦點:Kotlin 15 週年,社群回顧生態成長,也持續透過活動、課程與共創延伸下一章。 🔧 效能最佳化:大型 Android 專案應控制 ABI 暴露,善用 -api/-impl 分層、CI 與測試防線,減少增量編譯失效。 🏗 架構設計:從 Clean Architecture、離線優先的 Muffle,到 AI 功能分階段落地,重點都是降低耦合、提升可維護性與穩定度。 ✅ 測試與品質:以 AOSP 模擬器重現 ActivityNotFoundException,並用 Kotlin 與 Python 評測 harness 量化 LLM 代理,讓除錯與驗證更可重複。 🚀 語言演進:文章補充 backing field、Compose 入門與 Navigation 概念,也以協程系列延伸對 contexts、dispatchers 的理解。

01

From a Site Polygon to Short-Circuit Currents: Building a Substation Generator in Kotlin

Dev.to Kotlin 作者:Aleksandr Savichev 發布:07-17 12:46

從場地多邊形到短路電流:以 Kotlin 打造變電站產生器

軟體能否生成合理的變電站配置、計算短路電流,並說明結果為何符合工程邏輯?

重點摘要

作者以 Kotlin/Spring Boot 開發原型,從場地邊界與電力需求生成變電站概念佈局。
系統結合遺傳演算法、A* 走線、Ybus/Zbus 故障計算與 IEC 61850 SCL 匯出。
LLM 助手只負責解釋確定性程式算出的結果,不自行推算或捏造數值。

本文介紹一個研究型原型,能依使用者繪製的場地多邊形與電力需求,自動生成變電站概念佈局、初步電氣計算與 IEC 61850 匯出。作者以 Kotlin、Spring Boot、JTS、MapLibre 與 deck.gl 實作,先用遺傳演算法配置主設備,再以 A* 規劃電纜溝,並透過 Ybus/Zbus 方法計算短路電流。文中也以人工方式交叉驗證故障案例,加入初步保護設定估算,以及僅負責解釋計算結果的 LLM 助手。整體定位為教學與概念驗證工具,而非正式設計系統。

02

Jetpack Compose Navigation: A Practical Guide for Android Developers

Medium Kotlin 作者:Apoorv Rathore 發布:07-17 07:34

Jetpack Compose 導航:Android 開發者實用指南

一份面向 Android 應用的 Jetpack Compose 導航實作指南。

重點摘要

聚焦於 Android 開發者的 Jetpack Compose 導航
以實用角度介紹應用程式導覽實作
目前可取得的內容僅有標題與簡短摘錄

這篇文章以 Jetpack Compose Navigation 為主題,定位為 Android 開發者可參考的實用指南。就目前提供的內容來看,只能確認文章意在說明 Compose 中的導航觀念與實作方式,但內文摘錄極短,未包含完整段落或具體範例,因此無法據此推斷更多技術細節。

03

Understanding Backing Fields in Kotlin: The Hidden Storage Behind Properties

Medium Kotlin 作者:Nemat 發布:07-17 07:44

理解 Kotlin 的 backing field:屬性背後的隱藏儲存

如果你已經寫了一段時間的 Kotlin,應該會看過特殊識別字 `field`,或聽過擴充屬性不能有 backing field 這件事。

重點摘要

說明 Kotlin backing field 在屬性儲存中的作用。
介紹 Kotlin 何時會自動產生 backing field。
指出擴充屬性不會有 backing field。

這篇文章介紹 Kotlin 的 backing field,說明屬性背後實際使用的隱藏儲存機制。文中提到在 getter 與 setter 中可使用特殊識別字 `field`,以及編譯器何時會自動建立 backing field。同時也點出一項重要限制:擴充屬性沒有 backing field,因為它們並不隸屬於某個物件來保存資料。整體而言,這是一篇幫助讀者理解 Kotlin 屬性底層運作的入門說明。

04

Kotlin Coroutines: Part 2 — Contexts, Dispatchers, and Thread Switching

Medium Kotlin 作者:Fachrizal Mursalin 發布:07-17 10:20

Kotlin 協程:第 2 部分——Contexts、Dispatchers 與執行緒切換

在第 1 部分裡,我們那位孤單的廚師已經到了好很多的處境。

重點摘要

本文是第 1 部分的延續。
主題聚焦於 Kotlin 協程的 contexts、dispatchers 與執行緒切換。
目前提供的內文只有簡短引言,未包含全文。

這篇文章是 Fachrizal Mursalin 撰寫的 Kotlin 協程系列第 2 部分。依目前提供的內容,文章只延續第 1 部分的敘述,提到那位「孤單的廚師」已不再只是盯著沸騰的鍋子,也不需要雇用上千名廚師;但實際關於 contexts、dispatchers 與執行緒切換的細節並未出現在摘錄中,因此無法根據此片段確認完整論述。

05

Jetpack Compose Fundamentals: Understanding Text, Image, Button, TextField, and State Management

Medium Kotlin 作者:Vaibhavi Rana 發布:07-17 10:42

Jetpack Compose 基礎:理解 Text、Image、Button、TextField 與狀態管理

如果你正以 Jetpack Compose 開始 Android 開發之旅,先理解 composable 與狀態管理是第一步。

重點摘要

介紹 Jetpack Compose 的 Android 開發基礎。
聚焦 Text、Image、Button、TextField 等核心 UI 元件。
強調應先掌握 composable 與狀態管理。

這篇文章面向剛接觸 Android 開發的讀者,介紹 Jetpack Compose 的基礎概念。摘要內容指出,理解 composable 與狀態管理是建立現代 Android UI 的起點,並提到 Text、Image、Button 與 TextField 等核心元件,這些都是學習 Compose 時的重要組成部分。根據目前可見內容,本文屬於入門導引,幫助開發者踏出 Jetpack Compose 學習的第一步。

06

Building AI features isn’t scary

Medium Kotlin 作者:Paul Woitaschek 發布:07-17 11:49

打造 AI 功能其實沒那麼可怕

先在 App 內定義介面,用 Koog 在本地反覆迭代,完成後再把邏輯搬到後端。

重點摘要

先在 App 內定義介面。
使用 Koog 進行本地迭代開發。
功能完成後再將邏輯移到後端。

本文指出,打造 AI 功能其實不必令人畏懼,只要採取分階段、漸進式的做法即可。首先在 App 內定義介面,讓使用體驗先成形;接著利用 Koog 在本地反覆迭代,逐步完善功能,而不必一開始就把所有邏輯放進後端。等功能成熟後,再將核心邏輯移到後端。這種流程能降低風險,也讓 AI 功能的開發更彈性、更容易掌握。

07

Clean Architecture: A Blueprint for Scalable Android Apps

Medium Kotlin 作者:Radhika Kapuriya 發布:07-17 14:21

Clean Architecture:可擴展 Android 應用程式的藍圖

告別龐大的 Activity,迎向更易維護、可調整且更穩健的 Android 開發。

重點摘要

聚焦於可擴展的 Android 架構設計
強調程式碼的可維護性與適應性
改善大型 Activity 帶來的結構問題

本文以 Clean Architecture 作為建立可擴展 Android 應用程式的實作藍圖,核心訴求是擺脫龐大且難以管理的 Activity 結構。作者強調,透過更清晰的架構分工,開發者能打造更容易維護、調整與延伸的程式碼,讓 Android 專案在功能持續增加時,仍能保持穩健與可持續發展。

08

Kotlin Turns 15: Celebrate the Kotlin Effect

Kotlin Blog 作者:Viliam Sedliak 發布:07-17 13:29

Kotlin 滿 15 歲:一起慶祝 Kotlin Effect

15 年來,大家一起把 Kotlin 打造成今天的樣子。

重點摘要

Kotlin 迎來 15 週年,官方邀請社群共同慶祝。
可製作數位生日明信片,寫下祝福或對未來的預測。
還有課程、瀏覽器遊戲與主題內容等多種參與方式。

Kotlin 迎來 15 週年,JetBrains 感謝一路以來用 Kotlin 開發、貢獻生態系、分享知識並互相支持的社群成員。官方邀請大家製作數位生日明信片,寫下對 Kotlin 下一篇章的祝福或預測,還可上傳照片個人化卡片,並分享給社群。除了祝賀活動,網站也提供更多參與方式,包括觀看 Kotlin 概念如何化為實際內容、在瀏覽器遊戲中體驗互動,以及在 2026 年 9 月 9 日前免費學習 Hyperskill 上部分 Kotlin 課程。文章最後強調,Kotlin 的成長來自眾人的共同投入,未來仍有更多想法與作品值得一起實現。

09

Architecting for 100% Offline: Handling Android Geofencing Without Play Services

Dev.to Kotlin 作者:Haseeb 發布:07-17 02:51

打造 100% 離線架構:在沒有 Play Services 下處理 Android 地理圍欄

我需要一個完全運行在裝置上的架構,即使在沒有訊號的地下室也能工作,並把使用者資料當成一等公民來尊重。

重點摘要

以 LocationManager 與 ForegroundService 取代 Play Services 地理圍欄
透過距離計算與遲滯機制降低 GPS 漂移造成的抖動
加入開機重啟恢復與本機狀態處理,提升離線可靠性

本文分享作者打造 Muffle 的經驗:這是一款可依位置、時間與祈禱排程自動調整音量的 Android 工具,且完全不依賴 Google Play Services 或雲端服務。為了兼顧隱私與自動化,作者改用 LocationManager 搭配 ForegroundService,自行處理定位更新、距離判斷與重啟後恢復。實作過程中也面對 GPS 漂移、裝置廠商的省電限制,以及服務被系統終止等問題,因此加入遲滯緩衝與狀態復原機制。作者強調,離線優先不是限制,而是能簡化架構、提升穩定性的設計約束。

10

Multi-Module Build Economics: Designing API vs. Implementation Boundaries to Survive 50+ Dev Teams

ProAndroidDev 作者:Sarveshwar Maheshwari 發布:07-17 00:15

多模組建置經濟學:如何設計 API 與實作邊界,支撐 50+ 開發團隊

問題不在模組數量,而在於 bytecode ABI 的暴露程度。

重點摘要

透過 api/impl 拆分隱藏內部細節,可降低下游模組失效範圍
只有在多方消費、跨 squad 擁有、高變動或測試需求下才值得拆分
以 CI 規則與穩定 API 演進,避免過度模組化造成額外負擔

本文指出,大型 Android 專案的建置效率,關鍵不在模組越多越好,而在 compile classpath 上的 ABI 暴露是否過大。若濫用 api 依賴,任何內部改動都可能擴散到大量下游模組,拖慢增量編譯;相對地,將穩定介面放在 -api、把私有邏輯封裝於 -impl,可有效隔離變更。作者也整理出何時該拆分模組的判斷準則,提醒避免對低耦合功能做「模組化表演」,並說明 Hilt/Dagger、測試替身、Konsist 與 CI 防線如何共同提升大型團隊的開發速度。

11

I Built a Jelly-Like FAB Menu for Jetpack Compose

ProAndroidDev 作者:Prashant Panwar 發布:07-17 00:16

我用 Jetpack Compose 做出一個果凍感 FAB 選單

真正的挑戰,是讓一個剛硬的 UI 元件看起來柔軟有彈性。

重點摘要

以 Jetpack Compose Canvas 與 Animatable 實作 JellyFab,未使用 shader
用可點擊的 Box、弧形排列與錯位動畫建立主、次層 FAB 選單
將圓形拆成取樣點並配合高斯衰減變形,陰影也同步反應

本文介紹作者如何依據 Dribbble 動畫,從零打造 JellyFab 這個開源的 Jetpack Compose FAB 選單。與一般只動畫化按鈕不同,作者讓主觸發按鈕本身變形:先用可點擊的 Box 與自訂 Canvas 承載介面,再以弧形與階段式動畫展開主、次兩層動作按鈕。核心技巧是把圓形視為一圈取樣點,依與展開方向的距離,以高斯衰減將附近點推開,形成果凍般的鼓起效果;陰影也會隨同一組變形狀態縮放、變深與位移,讓整體更可信。

12

ActivityNotFoundException in Android: How to Reproduce and Fix It

Medium Kotlin 作者:Dilipchandar 發布:07-17 00:19

Android 中的 ActivityNotFoundException:如何重現與修正

使用 AOSP 模擬器進行的實戰除錯技巧。

重點摘要

說明如何在 Android 中重現 ActivityNotFoundException。
透過 AOSP 模擬器輔助排查問題。
聚焦於實際步驟來找出並修正錯誤。

本文介紹一種用於診斷與修正 Android 中 ActivityNotFoundException 的實戰除錯技巧。作者透過 AOSP 模擬器,在可控環境中重現問題,再逐步分析並尋找修正方法。雖然目前提供的內文摘錄很短,但文章重點明顯放在實務操作而非理論說明,適合需要直接理解活動啟動失敗原因、並以動手方式排查問題的開發者參考。

13

Testing an LLM Agent Like I Test Kotlin Code

Medium Kotlin 作者:Gabor Berenyi 發布:07-17 00:24

像測試 Kotlin 程式碼一樣測試 LLM 代理

我不再只靠肉眼看 LLM 輸出,而是像單元測試一樣為它打分。

重點摘要

以 Kotlin/JVM 建立代理主機
用 Python 評測工具為輸出打分
測試過程中發現一個 bug

本文說明作者如何用測試 Kotlin 程式碼的方式,來更嚴謹地評估 LLM 代理。作者不再只憑肉眼判斷模型輸出,而是結合 Kotlin/JVM 的 agent host 與 Python 評測 harness,將結果量化成可重複的分數,讓評估更接近單元測試。文章也提到,這套測試流程進一步揭露了一個值得追查的 bug。