Daily Digest

每日新聞摘要

2026年07月19日

今日總結

內容會跟隨語言切換。

📝 今日焦點:Kotlin 15 週年與 Kotlin Weekly #520 聚焦 Koog 1.0、Compose Multiplatform、Ktor、Firebase 與多項生態更新,顯示社群與工具鏈持續擴張。 🔧 效能最佳化:Compose Navigation 3 的預測返回以單一可尋址 transition 同步縮放、位移與遮罩,提升手勢流暢度;Compose 洩漏排查也更強調隱性記憶體問題的定位。 🏗 架構設計:Kotools Facet 以領域模型主導多層投影,減少 mapper;Android 可重用架構則強調以韌性設計支撐播放、下載與定位等系統級能力。 ✅ 測試與品質:Hibernate 集合映射錯誤提醒關聯欄位需用 List 或 Set;HEX ROOT SCAN 則以模組化安全工具包整合掃描、報告與 root 支援,提升稽核效率。 🚀 語言演進:Kotlin Native NuGet 讓 KMP 函式庫可發佈到 .NET 生態;實際重建案例顯示生產級 KMP App 仍可達 93% 程式碼共享。

01

Kotlin Weekly #520

Kotlin Weekly 作者: 發布:07-19 13:20

Kotlin Weekly 第 520 期

JetBrains 慶祝 Kotlin 15 週年,並聚焦「Kotlin Effect」社群里程碑。

重點摘要

JetBrains 以數位明信片、瀏覽器遊戲與免費課程慶祝 Kotlin 15 週年。
本期收錄 Koog 1.0、Kotlin 架構測試與 KMP 網路模組等文章。
另有 coroutines 學習資源,以及離線語音、幾何與編輯器相關函式庫。

Kotlin Weekly 第 520 期於 2026 年 7 月 19 日發布,首段介紹 JetBrains 慶祝 Kotlin 15 週年,並以數位明信片、互動瀏覽器遊戲與免費課程呼應「Kotlin Effect」社群成果。內容整理多篇文章,涵蓋 Koog 1.0 的實作、Kotlin 架構測試、Compose Multiplatform 的 Liquid Glass 方案、Firebase 與 Google Plugins、Ktor 網路模組設定,以及 dir-stepper 直播開發工具。期刊也收錄 coroutines 相關贊助資源與多個函式庫更新。

02

Predictive-back Transitions in Jetpack Compose

Dev.to Kotlin 作者:Bruno 發布:07-19 10:13

Jetpack Compose 中的預測返回轉場

手勢驅動的返回互動比想像中更難:動畫必須在慢拖、快甩與不同螢幕邊緣下都保持連續、可逆且正確。

重點摘要

以 Navigation 3 在 Jetpack Compose 實作 predictive back
用單一可尋址 transition 同步卡片、遮罩與底層畫面
處理 RTL、取消與快速甩動,避免視覺破綻

本文示範如何在 Jetpack Compose 中,結合 Navigation 3 打造手勢驅動的預測返回互動。作者先從沒有動畫的導航堆疊開始,再加入一般的水平與垂直轉場,最後把返回動作改成可跟隨手勢的卡片、scrim 與底層畫面效果。整個做法的核心,是讓卡片縮放、位移、遮罩透明度與底層移動都共用同一個可尋址 transition,確保拖曳時連續、放手後自然完成。文中也說明如何處理 RTL、快速甩動、取消手勢,以及在提交轉場時保留離開中的項目,讓互動在各種情境下都穩定一致。

03

🧹 Eliminating mapper boilerplate in Kotlin

Dev.to Kotlin 作者:Kotools 發布:07-19 15:06

在 Kotlin 中消除 mapper 樣板程式碼

讓領域模型成為唯一模型,並由它自行宣告各層應如何看待它。

重點摘要

同一概念常在 HTTP、持久層與服務介面間被拆成多種形狀。
手寫 mapper 會帶來樣板程式、邏輯分散與維護負擔。
Kotools Facet 以領域優先方式,嘗試在編譯期自動產生投影與轉換。

後端開發常把同一個領域概念拆成多種資料形狀,分別對應 HTTP、持久化與服務契約,因而產生大量 mapper 與重複資料類別。文章指出,這不只是習慣問題,而是工具限制:當領域端需要 UUID、資料庫端需要 String 時,勢必要有外部轉換層。Kotools Facet 提出以領域模型為唯一模型的做法,讓模型在自身上宣告各層的投影方式,並於編譯期產生對應的資料類別與 extension functions。此功能仍在早期開發階段,但目標很明確:不是把 mapper 藏起來,而是讓你不必手寫它。

04

Java Weekly, Issue 655

Baeldung 作者:baeldung 發布:07-19 12:18

Java Weekly,第 655 期

這篇文章展示了程式助理如何協助探索陌生的程式碼庫、重建其架構,並把零散證據整理成有用文件。

重點摘要

Martin Fowler 探討 AI 協作助手如何協助分析遺留系統。
本期整理 Spring、Quarkus、Micronaut 等主題的文章、演講與版本更新。
Netflix 分享如何從多種資料來源建立大規模服務拓樸平台的經驗。

Java Weekly 第 655 期聚焦 Spring、Java 及更廣泛的技術話題。首篇文章說明,程式助理可透過拼湊分散線索,協助理解陌生的遺留系統、重建架構並產出文件。本期也收錄多篇延伸閱讀,涵蓋虛擬執行緒釘選、ServiceLoader、Quarkus պաշտպան欄、Temporal 與事件驅動架構,以及多場網路講座與 BoxLang、Quarkus、JHipster、Vert.x、Grails、Micronaut、Piranha CMS 等套件更新。另一篇重點文章則介紹 Netflix 如何以多來源資料建構大規模服務拓樸平台。

05

Part 4: Stop Learning Service APIs — Start Designing Systems: Music Players, Uploads, Downloads…

Medium Kotlin 作者:Android Expert 發布:07-19 11:57

第 4 部分:別再學習 Service API——改為設計系統:音樂播放器、上傳、下載……

一套可重用的 Android 架構,適用於音樂播放器、上傳、下載與定位追蹤,且能在程序死亡後仍持續運作

重點摘要

重點在可重用的 Android 架構,而非零散學習 Service API
涵蓋音樂播放、檔案上傳、下載與定位追蹤等情境
設計目標是能在程序死亡後依然可靠運作

本文提出一套可重用的 Android 架構,主張開發者不應只記住各種 Service API,而應把音樂播放、上傳、下載與定位追蹤等常見需求視為系統設計問題來處理。作者強調架構必須具備韌性,能在程序死亡後仍維持可靠運作,讓相關元件更容易重用、維護,也更能應對不同功能場景的擴充需求。

06

Bring your KMP library to NuGet

Medium Kotlin 作者:Isuru Rajapakse 發布:07-19 13:17

將你的 KMP 函式庫帶到 NuGet

透過 kotlin-native-nuget 外掛,你可以用更符合慣例的方式把 Kotlin 帶進 C# 世界。

重點摘要

使用 kotlin-native-nuget 發布 KMP 函式庫到 NuGet
讓 C# 開發者以慣用方式使用 Kotlin
文章介紹了透過 NuGet 分發 Kotlin Native 的做法

本文介紹 kotlin-native-nuget 外掛,可用來將 Kotlin Multiplatform 函式庫發佈到 NuGet。作者指出,這能以較符合 C# / .NET 慣例的方式把 Kotlin 帶入相關生態系,讓 .NET 開發者更容易使用 Kotlin Native 成果。這是一篇簡短的導引文,重點在於 KMP 函式庫的跨生態分發途徑。

07

The Memory Leaks Jetpack Compose Hides From LeakCanary (And How to Actually Find Them)

Medium Kotlin 作者:Naveen Udesh 發布:07-19 13:20

Jetpack Compose 會讓 LeakCanary 看不見的記憶體洩漏,以及如何真正找出它們

如果你曾經在以 View 為基礎的 Android App 中除錯記憶體,就知道流程:LeakCanary 會標出被保留的 Activity,接著你一路追查……

重點摘要

LeakCanary 可能漏掉 Jetpack Compose 引入的洩漏。
Compose 的物件保留方式比 View-based App 更難追查。
文章重點在於如何找出這些被隱藏的記憶體洩漏。

本文討論 Jetpack Compose 應用中的記憶體洩漏除錯難題,特別是 LeakCanary 不一定能直接指出的隱藏洩漏。作者先對照傳統 View-based Android App 的除錯流程:通常只要看到被保留的 Activity,就能順藤摸瓜找出問題;但在 Compose 中,物件保留與生命週期關係更不直觀,因此更容易把洩漏藏起來。文章主旨是說明如何更可靠地發現這類隱性記憶體洩漏。

08

Solving org.hibernate.AnnotationException: Illegal Attempt to Map a Non Collection

Baeldung 作者:Andrei Branza 發布:07-19 01:30

解決 org.hibernate.AnnotationException:非法嘗試將非集合映射為集合

問題的根源在於註解與欄位型別不相符。

重點摘要

@OneToMany、@ManyToMany、@ElementCollection 需要宣告為集合介面。
若使用 ArrayList 這類具體類別,Hibernate 會在啟動時失敗。
單一值關聯應改用 @ManyToOne 或 @OneToOne。

本文說明 Hibernate 為何會拋出 org.hibernate.AnnotationException: Illegal attempt to map a non collection 這個錯誤。重點在於,凡是標註 @OneToMany、@ManyToMany 或 @ElementCollection 的欄位,都必須以 List、Set 等集合介面宣告,而不能直接使用 ArrayList 這類具體類別,因為 Hibernate 需要以自身的代理實作來管理延遲載入與 dirty checking。文章以 Post 與 Comment 的範例重現問題,接著示範將欄位型別改為介面即可修正。另也提醒:若欄位其實只代表單一引用,應改用 @ManyToOne 或 @OneToOne。

09

# 🚀 Introducing HEX ROOT SCAN: A Mobile Security Toolkit for Android ## A modern security workspace built for Android researchers and developers

Dev.to Kotlin 作者:Jaypsmall 發布:07-19 03:26

介紹 HEX ROOT SCAN:面向 Android 的行動安全工具包

為 Android 研究人員與開發者打造的現代化安全工作環境

重點摘要

模組化 Android 安全套件,支援行動端分析
整合 root 權限、API 介接與報告輸出
以單一介面集中管理安全結果與文件

HEX ROOT SCAN 是一套 Android 安全工具包,目標是把進階分析能力直接帶到行動裝置上。此專案希望為需要超越基礎掃描器的使用者,提供乾淨、強大且可攜的安全工作環境。它採模組化設計,整合網路分析、安全資訊蒐集、root 支援、API 介接與報告產生,並以集中式介面取代多環境與手動設定。專案目前持續開發中,預計加入更多模組、改善報告、效能、整合與使用體驗,適合研究人員、開發者與經授權的測試者使用。

10

We Called Our App Multiplatform. 848 Lines Actually Were.

Medium Kotlin 作者:Shiva Thapa 發布:07-19 05:25

我們稱這個 App 為多平台;實際上共有 848 行程式碼

一個正式上線的 KMP App 重建後,量測出的共享程式碼比例達到 93%,並以兩個程式碼庫的真實數據佐證。

重點摘要

正式上線的 KMP App 重建後,共享程式碼比例達 93%
文章以兩個程式碼庫的實際數據進行比較
結果顯示多平台開發在實務上可共享大量邏輯

本文介紹一個正式上線的 Kotlin Multiplatform App 重建案例,量測結果顯示共有 93% 的程式碼可共享。作者沒有停留在概念宣稱,而是以共享與平台專屬兩個程式碼庫的真實數字來驗證成果,呈現多平台開發在實務中的可行性。文章重點在於以數據說明:在生產環境的 App 中,仍有相當高比例的邏輯能夠整合與重用。