Daily Digest

每日新聞摘要

2026年10月14日

01

remember vs rememberSaveable vs ViewModel: which state survives what

Dev.to Kotlin 作者:Charles Hartmann 發布:10-14 14:02

remember、rememberSaveable 與 ViewModel:各自能保住哪些狀態

本文用兩個常見的 Compose 問題——畫面不更新與狀態重設——來說明可觀察性與生命週期的差別。

重點摘要

要讓 Compose 重新組合,狀態必須放在可觀察的 State holder 中。
remember 只會跨越 recomposition,不會保留旋轉螢幕、深色模式或程序死亡後的狀態。
rememberSaveable、ViewModel、Room 與 DataStore 分別對應不同的持久化層級。
展開詳細摘要

本文指出,Jetpack Compose 中「畫面不更新」或「文字欄位重設」的問題,多半可拆成兩個核心:Compose 是否知道值已變更,以及這個值要保存多久。作者先說明,必須同時具備可觀察的 State holder 與 remember,否則狀態會在重新組合時歸零。接著比較 rememberSaveable、ViewModel、Room 與 DataStore:rememberSaveable 可在組態變更與程序死亡後保留可放入 Bundle 的資料;ViewModel 可跨越組態變更,但不保證程序死亡後仍在;若要在 app 關閉後仍保留,則應放進 Room 或 DataStore。

02

My AI Agent Said “Done” 220 Times. A Shell Script Said No to 95 of Them.

Medium Kotlin 作者:Raphael Pantaleão 發布:10-14 11:18

我的 AI 代理說了 220 次「完成」,一個 Shell 腳本否決了其中 95 次

在 Kotlin 微服務 monorepo 上進行 harness 工程:三道關卡、一個拒絕讓代理提早結束的 hook,以及十天的真實工作。

重點摘要

以 Kotlin 微服務 monorepo 作為測試場域。
設計了三道關卡與一個阻止代理過早結束的 hook。
在十天內,Shell 腳本否決了 220 次「完成」中的 95 次。
展開詳細摘要

本文介紹在 Kotlin 微服務 monorepo 上進行的 harness 工程,透過三道關卡與一個 hook 來阻止 AI 代理過早宣告完成。這套機制在十天的實際工作中運作,由 Shell 腳本擔任把關角色,避免不符合條件的「done」訊息通過。文中提到,腳本共否決了 220 次完成宣告中的 95 次,顯示自動化可用來強化代理輔助開發的完成判準。

03

Meu agente de IA disse “pronto” 220 vezes. Um script shell disse não a 95 delas.

Medium Kotlin 作者:Raphael Pantaleão 發布:10-14 11:20

我的 AI 代理說了 220 次「完成」,但一個 shell 腳本對其中 95 次說不

在 Kotlin 微服務 monorepo 中進行 harness engineering:三道 gate、一個拒絕讓代理提早結束的 hook,以及十天的工作。

重點摘要

使用三道 gate 來控制代理輸出。
透過 shell hook 阻止代理過早結束。
這套機制是在 Kotlin 微服務 monorepo 中花十天建立的。
展開詳細摘要

本文描述在 Kotlin 微服務 monorepo 中進行的 harness engineering:作者加入三道 gate 與一個 shell hook,用來避免 AI 代理太早宣告完成。文中指出,這個 hook 對代理多次嘗試結束流程說了不,總計 95 次。重點在於如何透過流程控制與約束管理代理行為,而不是介紹新的 Kotlin 功能或效能數據;整體工作歷時十天。

04

I Planted 3,380 Bugs in My Own Codebase. The Tests Missed 273.

Medium Kotlin 作者:Raphael Pantaleão 發布:10-14 11:24

我在自己的程式碼庫裡植入了 3,380 個 bug。測試漏掉了 273 個。

以 mutation testing 作為合併門檻:為什麼這個 repository 禁用 coverage、門檻如何逐行檢查變更,以及倖存者代表什麼。

重點摘要

以 mutation testing 作為合併門檻
禁止把 coverage 當作主要品質指標
檢視漏掉的 mutants 與變更行
展開詳細摘要

文章主張以 mutation testing 作為合併門檻,而不是仰賴 code coverage。作者說明這個 repository 將 coverage 視為主要指標並加以禁止,接著介紹門檻如何逐行檢查每次變更,並透過存活下來的 mutants 評估測試強度。文中重點在於那些未被捕捉的失敗所揭示的測試缺口,以及 mutation testing 為何能發現 coverage 看不出的弱點。

05

Daily Kotlin: Inheritance, Abstract Classes, and Interfaces

Medium Kotlin 作者:Jason Kwon 發布:10-14 11:40

Daily Kotlin:繼承、抽象類別與介面

掌握 open class、多型契約,以及 Kotlin Multiplatform 中的介面預設實作。

重點摘要

介紹 Kotlin 的繼承、抽象類別與介面。
聚焦於 open class 與多型契約。
提到 Kotlin Multiplatform 的介面預設實作。
展開詳細摘要

本文介紹 Kotlin 中幾個核心的物件導向概念:繼承、抽象類別與介面。內容強調 open class 作為可延伸性的基礎,說明多型契約的概念,並提及 Kotlin Multiplatform 中的介面預設實作。整體看來,這是一篇用來認識這些語言特性的概覽,而非深入實作細節的文章。

06

My own audit said to cut one analytics field from two apps. It has shipped in 14 releases since

Medium Kotlin 作者:Muhammad Azhar 發布:10-14 12:43

我的稽核建議從兩款應用程式移除一個分析欄位;此後它已在 14 個版本中發佈

Secure Folder 和 Mock Location 仍會將原始 Play 安裝 referrer 的部分內容傳送到 GA4,而這份稽核還有另外兩點判斷錯誤。

重點摘要

Secure Folder 和 Mock Location 仍會將部分原始 Play install referrer 傳送到 GA4。
稽核建議從兩款應用程式移除一個分析欄位。
這份稽核還有另外兩項內容判斷錯誤。
展開詳細摘要

文章指出,Secure Folder 和 Mock Location 目前仍會把原始 Play install referrer 的部分內容傳送到 GA4,表示先前稽核並不完全正確。文中也提到,稽核曾建議從兩款應用程式移除一個分析欄位,但該欄位此後已在 14 個版本中持續發佈。除此之外,作者還表示這份稽核另外有兩點判斷錯誤,但摘要未提供更多細節。

07

Android dynamic colors for your own design system

Medium Kotlin 作者:Luca Fioravanti 發布:10-14 13:01

為你的設計系統導入 Android 動態色彩

在 Compose、Android Views 與 XML 中使用系統調色盤,並為較舊裝置提供明確的 fallback。

重點摘要

將 Android 動態色彩套用到自有設計系統
可用於 Compose、Android Views 與 XML
針對較舊裝置提供明確的 fallback
展開詳細摘要

本文說明如何在保留自有設計系統的前提下,導入 Android 系統動態色彩。內容涵蓋 Compose、Android Views 與 XML 的使用方式,並明確指出較舊裝置需要 fallback。重點在於把系統調色盤整合進應用程式的主題架構,而不是直接取代設計系統,讓開發者能在不同 UI 技術堆疊中一致地使用動態色彩,同時維持相容性。

08

Kotlin 2.4: 10 Features You Should Start Using Today

Medium Kotlin 作者:AndroidLab by Andre 發布:10-14 13:30

Kotlin 2.4:今天就該開始使用的 10 項功能

穩定的 context parameters、更乾淨的 ViewModels,以及幾項值得在大家之前先試用的實驗性功能。

重點摘要

穩定的 context parameters
更乾淨的 ViewModels
幾項值得嘗試的實驗性功能
展開詳細摘要

這篇文章整理 Kotlin 2.4 中適合立即採用的功能,重點放在已穩定的 context parameters、更加精簡的 ViewModels,以及幾項值得提早嘗試的實驗性能力。內容傳達的是:對熟悉 Kotlin 生態系的開發者來說,這些更新可作為實際可考慮的選項,但仍需留意哪些特性已穩定、哪些仍屬實驗階段。

09

Android 16 vs Android 17: What Actually Changed

Medium Kotlin 作者:AndroidLab by Andre 發布:10-14 13:42

Android 16 與 Android 17:實際改了什麼

先跳過 keynote 回顧。這次從 API 36 升到 API 37,對你的 codebase 代表什麼才是重點。

重點摘要

聚焦 API 36 到 API 37 的實際影響
不重述 keynote,而是看 codebase 變化
主題是「實際改了什麼」
展開詳細摘要

本文先表示可略過 keynote 回顧,直接看 API 36 升到 API 37 對 codebase 的實際影響。內容重點不是重複發表會資訊,而是把焦點放在開發者真正需要關心的變更上。整體來說,文章以工程實務角度切入,說明版本跳升在程式碼層面代表什麼,但沒有額外宣稱具體新功能或支援狀態。

10

AppArmorX: Android Security Through a Single Gradle Plugin

Medium Kotlin 作者:Shushant Tiwari 發布:10-14 13:53

AppArmorX:透過單一 Gradle 外掛程式實現 Android 安全防護

打造一個以 Gradle 提供的 Android 安全引擎,並以真實攻擊測試,同時記錄結果與其限制。

重點摘要

AppArmorX 以單一 Gradle 外掛程式提供 Android 安全功能。
專案以真實攻擊進行測試,評估其行為。
文章也同時說明此方法的限制。
展開詳細摘要

本文介紹 AppArmorX,一個透過單一 Gradle 外掛程式提供的 Android 安全引擎。內容聚焦於如何建置這個外掛、以真實攻擊進行測試,並將測試結果與方法限制一併呈現。文章沒有宣稱能提供全面防護,而是清楚交代這項做法能做什麼、不能做什麼,讓 Android 開發者更容易掌握其適用範圍。

11

Dependency Inversion Principle (DIP) in Android — Depend on Abstractions, Not Concrete Classes

Medium Kotlin 作者:Mahesh Jadhav 發布:10-14 14:40

Android 中的依賴反轉原則(DIP):依賴抽象,而非具體類別

你的類別應該依賴某個東西能做什麼,而不是依賴它如何做的某個特定實作。

重點摘要

依賴抽象,不要依賴具體實作。
類別應聚焦於能力,而非細節。
本文摘錄僅傳達 DIP 的核心觀念。
展開詳細摘要

這篇文章簡要介紹 Android 中的依賴反轉原則(DIP)。核心意思是:類別應該依賴某個事物能做什麼,而不是依賴它如何做的單一具體實作。內文摘錄沒有提供範例或實作細節,只提出這項原則,並引導讀者到 Medium 繼續閱讀。

12

KotlinConf Recap: Lessons from Verifone’s Architect on Kotlin in Mission-Critical Payments

Kotlin Blog 作者:Alina Dolgikh 發布:10-14 11:03

KotlinConf 回顧:來自 Verifone 架構師的關鍵任務支付 Kotlin 實戰心得

用規格書的原話寫程式,讓編譯器來強制驗證。

重點摘要

以 value class、sealed 型別與非空邊界避免付款流程錯誤。
用不可變狀態與具名轉換,讓非法交易狀態無法建立。
以 structured concurrency、domain timeout 與可讀的 Kotlin DSL 測試對齊規格。
展開詳細摘要

Yuri Geronimus 主張,支付系統應直接以規格書的字句來實作,並交由編譯器強制把關。他在 KotlinConf 2026 分享 Verifone 如何用 value class、sealed 結果、null safety、不可變狀態模型與 exhaustive when,提前攔下大量支付錯誤;也示範如何把 timeout 視為領域結果、預設遮罩敏感資料,並把認證測試改寫成監管人員也能讀的 Kotlin DSL。對於既有系統,他強調不要一次重寫,而是先優化現有程式、改採 acceptance-test-driven development、加入 fitness functions,再透過 Java 相容性逐步遷移。

13

The Lookup That Lies: Why Your Agent’s Retry Logic Has a Hidden Race Condition

Dev.to Kotlin 作者:StareBrain 發布:10-14 04:00

會說謊的查詢:為什麼你的代理重試邏輯藏著競態條件

如果查詢落在供應商的複寫窗口內,即使動作成功,也可能回傳「找不到」。

重點摘要

立即查詢可能把複寫延遲誤判成真正失敗。
在進入 reconciliation 前先加上最小等待時間。
用具名的一致性窗口,並在送出時檢查配送狀態。
展開詳細摘要

本文說明,當重試機制把一次立即查詢回傳的「找不到」視為失敗依據時,就可能在最終一致性的供應商上產生重複動作。實際上,寫入成功不代表讀取立刻可見,因此必須等到文件化的一致性窗口結束後,才讓 PENDING 記錄進入 reconciliation。文中提出的做法是先判斷是否達到可重算資格,再把窗口外的「找不到」視為真正失敗;同時也提醒,若稍晚才收到確認,必須先取消已排程的替代動作,再更新狀態。核心觀念是驗證模型要同時考慮兩個時鐘:發送事件與供應商複寫延遲。

14

Why HTTPS Won’t Save Your Checkout Flow: Building Zero-Trust State Machines in Kotlin Multiplatform

Dev.to Kotlin 作者:numq 發布:10-14 06:26

為什麼 HTTPS 無法守住你的結帳流程:在 Kotlin Multiplatform 中建立零信任狀態機

HTTPS 只會加密傳輸管道,JWT 也只驗證持有 token 的人是誰。

重點摘要

TrustChain 以雜湊串接的狀態機描述應用流程。
可阻擋步驟跳過、被竄改的增量與重播攻擊。
strictMode 讓預覽可放寬檢查,正式環境仍保留同一套 reducer API。
展開詳細摘要

文章指出,HTTPS 與 JWT 無法保證客戶端真的依照合法順序完成畫面或流程步驟。為了防止步驟跳過、狀態竄改與重播攻擊,作者提出 TrustChain:一個用於 Kotlin Multiplatform 的純函數、可驗證狀態機帳本。每個區塊都有 hash 與 previousHash,部分更新則以簽章保護的 DeltaBlock 傳遞;若有人跳過步驟或偽造增量,鏈結會立即失敗並回傳型別化錯誤。此設計主打零 runtime 依賴、不可變 reduction,以及可在預覽模式放寬檢查的 strictMode。

15

Kempo: Real-Time Audio Time-Stretching, Pitch-Shifting, and Formant Control in Pure Kotlin Multiplatform

Dev.to Kotlin 作者:numq 發布:10-14 07:00

Kempo:以純 Kotlin Multiplatform 實現即時音訊變速、變調與共振峰控制

在 JVM、Android、iOS 與 WebAssembly 上,提供零配置流處理、相位鎖定的清晰度與多聲道空間一致性。

重點摘要

可獨立控制時間、音高與共振峰
即時串流處理無堆積配置,適合高優先序音訊執行緒
支援多聲道一致性與離線精準輸出
展開詳細摘要

Kempo 是一個開源、純 Kotlin Multiplatform 的 DSP 音訊函式庫,支援在 JVM、Android、iOS 與 WebAssembly 上進行即時變速、變調與共振峰控制。文章說明它以零配置串流方式運作,適合高優先序音訊執行緒,並透過垂直相位鎖定降低瞬態抹平、把音高與人聲音色分離以避免「松鼠音」,同時維持立體聲與 5.1 環繞的空間一致性。文中也介紹離線精準渲染、自訂頻率映射,以及背景處理與即時回呼的實作範例。

16

Google Sign-In on Android with Kotlin, Jetpack Compose, and Firebase Authentication

Medium Kotlin 作者:CursosApp 發布:10-13 23:42

使用 Kotlin、Jetpack Compose 與 Firebase Authentication 在 Android 上實作 Google Sign-In

標籤:Android、Kotlin、Firebase、Google、Jetpack Compose。

重點摘要

主題聚焦 Android 的 Google Sign-In
涵蓋 Kotlin、Jetpack Compose 與 Firebase Authentication
提供內容只有標題、標籤與 Medium 連結
展開詳細摘要

這段原文只提供文章標題與標籤,主題是如何在 Android 上結合 Kotlin、Jetpack Compose 與 Firebase Authentication 實作 Google Sign-In。內文未附上任何技術步驟、程式碼或實作細節,因此無法進一步推斷文章內容。就目前可見資訊來看,它是一篇面向 Android 開發者的登入整合教學,但超出標題與標籤的內容都不能據此補充。

17

Stop Loading 10,000 Items at Once: Mastering Android Pagination

Medium Kotlin 作者:Anand Gaur 發布:10-14 03:31

別一次載入 10,000 筆資料:掌握 Android 分頁

打開 Instagram,向下滑動,再繼續滑動。貼文彷彿永遠看不完。

重點摘要

主題是 Android 分頁載入。
以 Instagram 的無限動態作為示例。
目前提供的內文只有短短導言,沒有完整技術內容。
展開詳細摘要

這篇文章以 Instagram 近乎無盡的動態牆為例,引出 Android 分頁載入的概念。從目前可見的摘要來看,文章重點是避免一次載入大量資料,而是隨著使用者滑動逐步取得內容。不過,這裡只提供了很短的導言,沒有實作細節、API 說明或更深入的技術內容,因此可確認的只有文章主題與其動機。

18

Learning MVP and Understanding the Next Step in Android Architecture Design Patterns

Medium Kotlin 作者:Aayush Puranik 發布:10-14 04:31

學習 MVP 與理解 Android 架構設計模式的下一步

理解 MVP 的運作方式,以及它在舊有系統中的實作方式。

重點摘要

說明 MVP 在 Android 架構中的運作方式。
探討 MVP 在舊有系統中的實作情況。
整理 MVP 的優點與相關問題。
展開詳細摘要

本文介紹 Android 的 MVP 架構模式,並說明它在舊有系統中的運作與實作方式。同時也提到 MVP 的優點與其伴隨而來的問題。依據原文提供的內容,這篇文章較像是概念性導覽,而非深入的技術實作解析,重點在於協助讀者理解 MVP,以及它在較新的架構方法出現之前所扮演的角色。

19

Stop step-skipping, state tampering, and replay attacks in your multi-step KMP workflows.

Medium Kotlin 作者:numq 發布:10-14 06:20

阻止多步驟 KMP 工作流程中的步驟跳過、狀態竄改與重放攻擊

保護多步驟流程、金融科技漏斗與 Server-Driven UI,避免步驟跳過與竄改,且不需要任何 runtime 依賴。

重點摘要

防止多步驟 KMP 工作流程遭到步驟跳過與狀態竄改
適用於金融科技漏斗與 Server-Driven UI 情境
強調零 runtime 依賴
展開詳細摘要

本文聚焦於保護多步驟 KMP 工作流程,避免步驟跳過、狀態竄改與重放類攻擊。作者指出,這類問題特別關係到金融科技漏斗與 Server-Driven UI 等需要維持流程完整性的情境,不能讓客戶端任意跳過步驟或不安全地修改狀態。文中同時強調,此做法以零 runtime 依賴為設計目標。

20

Kempo: Real-Time Audio Time-Stretching, Pitch-Shifting, and Formant Control in Pure Kotlin…

Medium Kotlin 作者:numq 發布:10-14 06:56

Kempo:以純 Kotlin 實現即時音訊變速、變調與共振峰控制

零配置流式處理、相位鎖定的清晰度,以及跨 JVM、Android、iOS 與 WebAssembly 的多聲道空間一致性。

重點摘要

以純 Kotlin 實現即時音訊處理
支援變速、變調與共振峰控制
可跨 JVM、Android、iOS 與 WebAssembly
展開詳細摘要

Kempo 被介紹為一個以純 Kotlin 實作的即時音訊處理方案,主打音訊變速、變調與共振峰控制。內文強調零配置的串流處理、相位鎖定帶來的清晰度,以及多聲道空間一致性,並指出可運行於 JVM、Android、iOS 與 WebAssembly。這段摘要僅根據可見內容整理,未補充原文未提供的實作細節或效能數據。