Daily Digest

每日新聞摘要

2026年03月19日

今日總結

內容會跟隨語言切換。

📝今日焦點:Kotlin 多平台、遠端 Compose、SwiftImport 與 Nav3 帶來採用驅動、減少重複並加速介面迭代,需評估穩定性、相依與學習成本與測試,並可監控。 🔧效能最佳化:Rust 以最佳吞吐與低記憶體勝出,Go 冷啟最快,Kotlin JVM 吞吐靠 JIT 但記憶體與 p99 較高,生產選擇需平衡成本與團隊速度。 🏗架構設計:採用 Nav3、Compose 布局與多裝置自適應需分步遷移,KMP 框架、SQLDelight、Coil、Koin 與 finally 行為須特別處理,深鏈、返回結果與檢查清單要預留時間。 🚀語言演進:語法特性如 infix、集合與空值安全成熟,Google 對 Flutter 的戰略調整與 Compose 成熟改變技術選擇,並重視生態與工具成本。

01

WTF is Kotlin Multiplatform?

Dev.to Kotlin 作者:Daily Bugle 發布:03-19 09:05

WTF 是 Kotlin Multiplatform?

Kotlin Multiplatform 讓開發者以 Kotlin 撰寫可在 Android、iOS、桌面與 Web 執行的共用程式碼,透過 common module 共享相同邏輯,並以平台專屬模組處理差異化實作。

重點摘要

用 Kotlin 一次撰寫,可在 Android、iOS、桌面與 Web 執行
將共用邏輯放在 common module,平台特有實作放專屬模組
越來越多人採用,但非萬靈藥,需良好架構與設計

Kotlin Multiplatform 讓開發者以 Kotlin 撰寫可跨平台執行的程式碼:把相同的商業邏輯放在「common module」,將平台差異部分放在 Android、iOS 或桌面的專屬模組中,藉此減少重複、降低錯誤並簡化維護。近年因跨平台需求增加與 Kotlin 語法現代易學而受到關注,像 Trello 與 JetBrains 等公司已有採用。常見應用包括 Android 與 iOS 共用商業邏輯的行動應用、桌面與 Web 共用的商業邏輯,或多平台遊戲的核心邏輯。Kotlin Multiplatform 並非萬靈藥,成功導入仍需周全的架構規劃,且對於穩定性、效能與學習曲線仍有顧慮,但 Kotlin 團隊正持續改進。

02

Day 3 — Mastering Layouts in Jetpack Compose: Column, Row, and Box

Medium Kotlin 作者:Yodgorbek Komilov 發布:03-19 07:15

第 3 日 — 精通 Jetpack Compose 佈局:Column、Row 與 Box

在先前介紹 setContent 與 Compose 基礎後,本文說明如何使用 Column、Row 與 Box 組織 UI 結構。

重點摘要

說明三種核心佈局容器:Column、Row 與 Box
延續 setContent 與 Jetpack Compose 的基礎概念
討論排列元件的思路與常見使用模式

這篇 Medium 教學(第 3 日)延續 Jetpack Compose 系列,聚焦掌握三種基本佈局容器:Column、Row 與 Box。文章在先前介紹 setContent 與 Compose 基礎的基礎上,說明這些容器如何決定 UI 元件的結構與排列方式、何時採用垂直、水平或疊放佈局,並說明常見的使用模式與實作考量。目標讀者為已閱讀前幾篇的開發者,藉由將基礎概念連接到具體的佈局技巧,幫助更有把握地使用 Column、Row 與 Box 組織介面。

03

Kotlin Day 5: Collections & Null Safety

Medium Kotlin 作者:Shalinibhatt 發布:03-19 08:06

Kotlin 第五天:集合與空值安全

Kotlin 提供各種集合,文章指出 Collection 是一個提供儲存資料架構的套件,同時也談到空值安全的概念。

重點摘要

介紹 Kotlin 中的集合與其用途
將 Collection 描述為提供資料儲存架構的套件
提及 Kotlin 的空值安全機制以降低空值錯誤

本文為 Kotlin 系列文章中的一篇簡短說明,聚焦在集合(Collections)與空值安全兩個主題。作者指出,作為現代語言的 Kotlin 提供多種集合類型,並將 Collection 定義為一個用於提供資料儲存架構的套件,幫助讀者理解資料如何被組織與管理;同時也提到 Kotlin 的空值安全機制,說明語言如何透過設計減少因空值所造成的錯誤。文章屬於概念性概覽,適合希望建立基礎認知的讀者,並引導讀者閱讀後續的實作與範例內容。

04

Weird Kotlin. Part 1: how finally can break your code

Medium Kotlin 作者:Sergei Zakharov 發布:03-19 10:43

奇怪的 Kotlin(第一部):finally 如何毀掉你的程式碼

我在實務中遇到 Kotlin 中 finally 的意外行為,該行為不直觀且可能會破壞程式流程。

重點摘要

finally 在 Kotlin 中可能有意外行為。
這類行為不直觀,可能影響例外或返回值處理。
作者以系列文章透過範例說明原因並提出注意建議。

作者在實務中遇到 Kotlin 的 finally 出現意外行為,該行為不直觀且可能破壞程式流程,因此他展開系列文章,以具體範例示範 finally 在何種情況下會影響例外處理或返回值,並分析成因與對開發者的影響。文章旨在釐清行為發生的原因、呈現可重現的案例,並提出實務上的注意事項與可行修正建議,提醒 Kotlin 開發者在撰寫清理邏輯、處理例外與返回值時要特別謹慎,後續篇章會深入探討變體與解法。

05

Build UI Without App Updates: Deep Dive into Remote Compose

Medium Kotlin 作者:AndroidLab by Andre 發布:03-19 11:53

在不更新應用的情況下構建介面:深入解析 Remote Compose

在不經由 Play 商店更新的情況下發布新畫面、重新設計與 A/B 測試。

重點摘要

遠端下發新畫面與介面重設,無需上架更新
支援透過遠端變體執行 A/B 測試與實驗
文章深入解析 Remote Compose 的運作與實務效益

Remote Compose 讓 Android 開發團隊在不經由 Play 商店更新的情況下,直接下發介面變更。透過遠端傳送新畫面、重新設計與 A/B 測試變體,團隊能加速迭代、驗證假設並降低發布摩擦。本文對 Remote Compose 的運作原理與應用場景做深入解析,說明它可處理的 UI 變更類型,以及將介面更新與應用版本發佈分離後對開發、測試與產品流程的實務影響。目標讀者為希望提升 UI 迭代速度、簡化發佈流程的開發者與產品團隊。

06

Remote Compose: UI Without App Updates

Medium Kotlin 作者:AndroidLab by Andre 發布:03-19 12:01

Remote Compose:無需應用更新的 UI

Android 17 最具顛覆性的功能讓伺服器擁有 UI——傳送畫素,而不是 APK。

重點摘要

Android 17 引入讓伺服器控制 UI 的功能。
可傳送畫素或遠端驅動的畫面,取代新增 APK 發佈。
能在不強制應用更新的情況下變更或實驗 UI。

本文簡短介紹稱為「Remote Compose」的概念,指出 Android 17 的一項重要功能是將 UI 的控制權交由伺服器,改以傳送畫素(pixels)或遠端驅動的畫面狀態給裝置,而非透過發布新的 APK 來更新介面。文章將此視為具顛覆性的改變,因為它能讓介面更新與應用程式發佈週期分離,使用者無需下載應用更新即可看到 UI 變更。原文由 AndroidLab(Andre)發表於 Medium,並引導讀者至 Medium 上閱讀完整內容。

07

Jetpack Compose in 2026: XML is Finally Dead

Medium Kotlin 作者:Sixtin - Android Developer 發布:03-19 12:20

Jetpack Compose 在 2026:XML 終於走入歷史

爭論已經結束:Compose 已達完全成熟,對仍在觀望的 Android 開發者意義明確。

重點摘要

Compose 已成熟並成為主要的 UI 開發方式。
XML 佈局在新開發中已不再必要。
開發者應重新評估工具鏈、程式庫和技能投資。

作者指出,到 2026 年 Jetpack Compose 已達到完全成熟的階段,長期圍繞 UI 技術選擇的爭論因此終結,XML 不再是現代應用開發的首選。文章描述成熟的 Compose 生態會是什麼樣子,並強調對仍在觀望的開發者帶來的實際影響:團隊需重新檢視現有代碼庫與開發工具,調整招聘與培訓策略,並把 Compose 視為新專案與逐步遷移的主流路徑。核心訊息明確:繼續依賴 XML 會增加維護與協同成本,應把採用 Compose 視為面向未來的必要選擇。

08

Flutter Was Supposed to Be Enough… So What Changed at Google?

Medium Kotlin 作者:Pudari Madhavi 發布:03-19 13:36

Flutter 本該足夠… 那麼 Google 到底改變了什麼?

這不是轉向──而是一種多數開發者未察覺的更深層策略。

重點摘要

Google 的變動應視為策略性調整,而非突發轉向。
單靠 Flutter 可能無法涵蓋 Google 更廣泛的平臺與工具目標。
許多開發者忽略了這些變化對生態系統與整合面的長期影響。

本文主張,Google 對 Flutter 與相關平台的調整,並非突如其來的轉向,而是一種更深層的策略,許多開發者因只聚焦於框架本身而忽略了整體生態、工具與平台整合的長期規劃。作者提醒讀者不要把此類變化簡化為「放棄 Flutter」或單純的產品決策,而應從戰略層面理解 Google 如何在跨平台解決方案、原生平台支援與開發者工具之間重新調配資源,進而調整自身技術選擇與風險評估。

09

SwiftImport Migration in Kotlin Multiplatform (KMP): Import Swift Packages Directly into Kotlin

Medium Kotlin 作者:Boobalan Munusamy 發布:03-19 13:54

Kotlin Multiplatform 的 SwiftImport 遷移:直接在 Kotlin 中匯入 Swift 套件

長期以來 KMP 社群希望能直接使用 Swift Package Manager,SwiftImport 遷移使得 Swift 套件可被直接匯入並在 Kotlin 中使用。

重點摘要

KMP 開發者長期期待直接支援 Swift Package Manager
SwiftImport 遷移能將 Swift 套件導入 Kotlin 專案
此方案有助提升跨平台互通性與程式碼重用

本文介紹 SwiftImport 遷移,回應 Kotlin Multiplatform(KMP)社群長久以來希望能直接使用 Swift Package Manager 的訴求。透過 SwiftImport,開發者可以將 Swift 套件引入 Kotlin 專案,降低整合 Swift 函式庫的摩擦,改善跨平台依賴管理。文章說明此能力如何解決互通性限制、帶來如程式碼重用與整合流程簡化等潛在好處,並提醒採用時需注意的考量。總體而言,SwiftImport 被呈為促進 Kotlin 與 Swift 生態系更順暢合作、提升多平台開發彈性的重要進展。

10

Jetpack Navigation 3 Migration: Type-Safe Routes & Nav2

Dev.to Kotlin 作者:SuriDevs 發布:03-19 01:59

Jetpack Navigation 3 遷移:類型安全路由與 Nav2 比較

Nav3 更好──類型安全的路由、可見且可控的回溯堆疊,不再是 NavController 的黑盒。

重點摘要

路由改為 @Serializable 的 NavKey 資料類別,編譯期檢查
每個分頁的回溯堆疊由你以 SnapshotStateList 顯式管理
深層連結、結果回傳與 ViewModel 路由參數需自行處理

作者在一個真實生產應用(4 個底部分頁、9 個導航圖、40+ 畫面)上遷移從 Nav2 到 Nav3 的經驗。Nav3 將字串路由與隱藏的 NavController 黑盒替換為類型安全的 @Serializable NavKey 與你可完全掌控的回溯堆疊,帶來編譯時安全、IDE 補完與內建的畫面轉場與預測返回手勢。但遷移痛點包括:必須自行解析深層連結、改用 CompositionLocal 等模式處理畫面結果回傳,以及手動把路由參數傳給 Hilt ViewModel(SavedStateHandle 不再含路由參數)。文章列出相依設定、分頁多堆疊實作、Navigator、深鏈與結果替代方案及遷移檢查清單,建議新專案採用 Nav3,既有大型專案則分步遷移並預留約一週時間。

11

Same API in Java, Go, Rust, and Kotlin — a 4-language benchmark

Dev.to Kotlin 作者:netfishx 發布:03-19 05:35

相同 API 的 Java、Go、Rust 與 Kotlin 比 benchmark

在四種語言上重寫相同後端後,Rust 在吞吐量與記憶體效率上領先,Kotlin 在 JIT 與虛擬執行緒下接近 Go 的吞吐量。

重點摘要

Rust 吞吐最高(210K QPS),500 連線時記憶體近 33 MB
Kotlin 吞吐接近 Go(99K vs 100K),但 p99 延遲與記憶體較高
作者以 Rust (Axum) 上線以降低基礎設施成本,並針對不同需求提出選擇建議

作者在 21 年 Java 經驗後,將短影片平台後端以相同 API 重寫為 Java、Go、Rust、Kotlin 並對比效能:Rust 在吞吐量(210K QPS)與記憶體使用上表現最佳(idle 約 19 MB、500 連線約 33 MB),且 p99 延遲較低;Kotlin(Ktor + JVM21 虛擬執行緒)靠 JIT 幾乎追上 Go 的吞吐,但 p99 延遲與 RSS(約 650 MB)較高;Go 有最快冷啟動(69 ms)與短建置時間;Java 與 Kotlin 在 JVM 生態與建置支援上仍有痛點。最終作者選擇 Rust(Axum)作為生產環境以降低 EC2 成本,但針對團隊速度、JVM 投資與效能關鍵服務,分別推薦 Go、Kotlin、Rust。

12

I Came Back to Kotlin for KMP — Here’s What Broke First

Dev.to Kotlin 作者:Raul Arroyo 發布:03-19 05:53

我回到 Kotlin 為了 KMP — 先壞掉的是這些東西

我決定以 Compose Multiplatform 實作整個 UI,結果遇到工具與函式庫的早期問題:Navigation3 的返回按鍵崩潰、Coil 的平台上下文改動,以及 Koin 的重複初始化錯誤。

重點摘要

用 Compose Multiplatform 讓 Android 與 iOS 共用整個 UI
選擇 SQLDelight 取代 Room,取得 KMP 原生支援與編譯期安全
實務障礙:Navigation3 返回崩潰、Coil LocalPlatformContext、Koin 重複啟動

作者回到 Kotlin,為一個以 WordPress REST API 為後端的閱讀器專案採用 Kotlin Multiplatform,並赌注放在用 Compose Multiplatform 做整個 UI,以便單一程式碼庫同時驅動 Android 與 iOS。因 Room 的 KMP 支援仍不穩,改用自始支援 KMP 的 SQLDelight,透過 SQL 生成型別安全的查詢與資料類別。實務上先碰到的問題包含 Navigation3(alpha)在連按返回時導致後端堆疊被清空而崩潰(以 guard 解法暫時緩解)、Coil 3 在 KMP 下需改用 LocalPlatformContext 才能在 iOS 顯示圖片,以及 Koin 在不同平台初始化方式可能造成重複啟動而崩潰。也被 libs.versions.toml 的格式問題耽誤。作者覺得從 Flutter 轉回 Compose 心得相近,但平台整合需要更多處理,後續會談架構與資料流。

13

Jetpack compose: Custom System Wide Keyboard

Medium Kotlin 作者:Itsuki 發布:03-18 23:20

Jetpack compose:自訂系統級鍵盤

Because I don't like G-Board?

重點摘要

Itsuki 提到以 Jetpack Compose 製作系統級鍵盤
動機是作者不喜歡 Gboard
文章全文在 Medium 提供連結

Itsuki 在 Medium 發表的文章《Jetpack compose:Custom System Wide Keyboard》,預覽以「Because I don't like G-Board?」說明動機。文章以 Jetpack Compose 為出發,探討建立自訂系統級鍵盤的概念與理由,並提醒開發者在實作時需注意的要點,例如 IME 與權限整合、Compose 的介面構建與相容性考量。本文以概述與方向性說明為主,作為想以 Compose 建置系統輸入法的開發者的入門參考,並在 Medium 提供完整內容的連結。

14

Mastering Adaptive Layouts in Jetpack Compose: From Phones to Desktop

Medium Kotlin 作者:Syed Ovais Akhtar 發布:03-19 00:11

掌握 Jetpack Compose 的自適應版面:從手機到桌面

Jetpack Compose 可用來打造從手機到桌面尺寸皆能自適應的介面。

重點摘要

建立能跨手機、平板與桌面顯示的自適應介面
使用彈性容器與可重排元件以因應可用空間
在多種裝置情境下測試與迭代以維持一致性與可用性

本文說明如何透過 Jetpack Compose 建構可從手機到桌面尺寸螢幕自適應的 Android 介面。文章指出現代應用需根據螢幕大小與輸入方式調整版面、間距與導覽,並提出高階設計策略與實務做法,包括使用彈性容器、讓元件重排以因應可用空間,以及根據不同尺寸選擇版面模式。文章也強調在多種裝置上測試與迭代以維持可用性與視覺一致性,並就維護性與效能給予建議,幫助開發者在多裝置生態中打造可擴展且精緻的 UI。

15

Infix Functions in Kotlin

Medium Kotlin 作者:Riyas Pullur 發布:03-19 01:14

Kotlin 的 Infix 函數

Kotlin 的可讀性部分來自於像 infix 函數這類語言特性。

重點摘要

Kotlin 以表達性與簡潔語法著稱。
infix 函數被點出能提升程式可讀性。
文章介紹並討論 Kotlin 的 infix 函數。

本文介紹了 infix 函數,指出它是促成 Kotlin 表達性與簡潔語法的一項特性。文章強調 infix 函數在提升程式可讀性上的角色,並以此主題為出發點,幫助讀者理解該特性的意義與應用場景。透過聚焦這項語言特性,文章旨在讓開發者掌握如何利用 infix 函數使 API 語意更自然、呼叫寫法更易讀,並將其與 Kotlin 整體強調可讀性與簡潔性的設計風格連結起來。