Daily Digest

每日新聞摘要

2026年10月02日

今日總結

內容會跟隨語言切換。

📝 今日焦點:JDK 27 帶來 HashMap、密碼學與向量化優化,量測時須避免同 JVM 內工作負載與受測系統互搶 GC。 🔧 效能最佳化:R8、WebP 與 AGP 9+ 被用來提升 Play 能見度;Muffle 以地理圍欄與本機優先降低耗電。 🏗 架構設計:KMP、Compose Multiplatform、模組化與 Clean Architecture 持續成主流,free/full、feature 分割與 build 規則更成熟。 ✅ 測試與品質:CI 差異、代理渲染 Compose、BiometricPrompt 與協程失敗追問,凸顯可重現性與深度驗證。 🚀 語言演進:Kotlin 2.4 與 KMP 共用層持續擴張,實務重點已從會用語法轉向能否在真實系統中正確協作。

01

Java Weekly, Issue 666

Baeldung 作者:baeldung 發布:10-02 12:07

Java Weekly,第 666 期

JDK 27 在各方面都帶來了效能提升。

重點摘要

JDK 27 在 HashMap 操作、密碼學與向量化等面向都有實測提升。
讓 workload generator 與被測系統共用同一個 JVM,可能因 GC 暫停而扭曲 tail latency 量測。
本期也整理了 Java 與 Kotlin 生態圈的文章、線上講座與版本更新。
展開詳細摘要

本期 Java Weekly 聚焦 JDK 27 的效能改進,包含 HashMap 操作、密碼學與向量化等項目的實測提升。文中也提醒,若 workload generator 與被測系統共用同一個 JVM,垃圾回收暫停可能讓請求排程中斷,進而扭曲 tail latency 的量測結果。除此之外,這期還彙整了 Spring、Quarkus、Micronaut、Kotlin 等相關文章、線上研討與版本發布資訊。

02

From Idea to Google Play: The Challenges of My First KMP App

Dev.to Kotlin 作者:Avik Sharma Chowdhury 發布:10-01 18:52

從構想到上架 Google Play:我的第一個 KMP App 的挑戰

一個使用 Kotlin Multiplatform 與 Compose Multiplatform 打造的考試準備 App 故事

重點摘要

作者為德國入籍考試做了一個免費的 Android 準備 App。
將付費功能拆成獨立模組,分成 free 與 full 兩種建置。
從中學到 KMP、CI、依賴管理、測試與發佈流程。
展開詳細摘要

這篇文章記錄作者如何用 Kotlin Multiplatform 與 Compose Multiplatform 開發 Leben in DE: Einbürgerungstest,一款用來準備德國 Leben in Deutschland 測驗的免費 Android App。原本他是想透過實作一個真實產品來學習 KMP,之後在完成 MVP 後重新評估付費方案,決定先免費上線。文章說明了為何單靠 feature flag 不夠、如何把登入、同步與付款拆成獨立模組並建立 free/full 兩種 build,並整理他在共用程式碼、第三方函式庫包裝、CI、自動化測試、密鑰管理與平台差異處理上的實戰心得。

03

How I Structured My First KMP App: Modules, Layers and Source Sets

Dev.to Kotlin 作者:Avik Sharma Chowdhury 發布:10-02 10:20

我如何規劃第一個 KMP App:模組、分層與 Source Set

大部分應用程式都放在 commonMain,各平台只補上自己能做的那一小部分。

重點摘要

composeApp 是主模組;libs 放共用功能模組,build-logic 統一 Gradle 設定。
composeApp 內以 Clean Architecture 分成 presentation、domain、data 三層。
commonMain 放大多數共享程式,平台專屬行為則用 expect/actual 實作。
展開詳細摘要

這篇文章說明作者如何架構第一個要上架 Google Play 的 Kotlin Multiplatform App。專案以多個 Gradle 模組組成:composeApp 是主應用模組,iosApp 負責啟動 iOS App,libs 則放置 domain-api、auth、payment 與 telemetry-core 等共用模組,另有 build-logic 統一 Gradle 設定。composeApp 內部採 Clean Architecture,分為 presentation、domain 與 data 三層,並因多個功能共用同一批題目與進度資料而採水平切分。文章也介紹 KMP source set,將大部分共用程式放在 commonMain,平台差異則透過 expect/actual 處理,例如 in-app review。

04

How I Built Free and Full Build Flavors for Android in My KMP Codebase

Dev.to Kotlin 作者:Avik Sharma Chowdhury 發布:10-02 10:55

我如何在 KMP 程式碼庫中為 Android 建立免費版與完整版 Build 變體

免費版應該只包含它真正會用到的內容。

重點摘要

用 Android product flavors 從同一個 KMP 程式碼庫產生 free 與 full 兩種建置。
full 版本包含登入、同步與付款;free 版本則完全排除這些模組與 SDK。
共享程式碼只依賴介面,由各 flavor 在啟動時注入對應實作。
展開詳細摘要

本文說明作者如何在 Kotlin Multiplatform 程式碼庫中,透過 Android product flavors 從同一套專案建立兩個版本:只保留核心功能的免費版,以及包含登入、同步與付款的完整版。免費版不會加入 auth 與 payment 模組,也不會帶入相關 SDK 與 billing 權限;完整版則透過 flavor 專屬相依性與 source set 將它們接上。共享程式碼僅依賴 domain-api 模組中的介面,各版本在啟動時提供自己的實作。文末也提到作者在 CI 中加入檢查,避免付費 SDK 意外流入免費版。

05

A Coding Agent Added Jetpack Compose Support to My Android Renderer MCP. I Wouldn't Have Started This Task Myself.

Dev.to Kotlin 作者:Evgeny Khramov 發布:10-02 14:36

一個程式代理為我的 Android Renderer MCP 加上了 Jetpack Compose 支援;這項工作本來不會是我主動開始的。

我把那個研究問題交給了程式代理。

重點摘要

Android UI Renderer MCP 可在沒有模擬器或裝置的情況下渲染 Android UI,並回傳 PNG 與結構資訊。
新的 `render_compose` 會把 JSON 轉成具型別的 Kotlin 呼叫,透過 Gradle/Robolectric 執行暫時性的 Compose probe。
實作過程遇到兩個問題:semantics tree 序列化,以及示範專案的 Gradle repositories policy。
展開詳細摘要

Android UI Renderer MCP 原本已能處理傳統 Android UI,但 Jetpack Compose 沒有可直接 inflate 的版面檔,因此需要不同做法。作者先要求專案端不要額外撰寫專用 renderer entry point,再把這個研究問題交給程式代理處理。代理實作出 `render_compose`:解析 top-level composable 簽名、將 JSON 轉為具型別的 Kotlin 值、建立暫時 probe,最後輸出 PNG 與 semantics tree。過程中又修正了 semantics node 缺少 className 的序列化問題,以及 demo 專案的 Gradle repositoriesMode 限制。最終工具同時支援 XML/View 與 Jetpack Compose,作者強調重點是能先精確定義結果與限制,而不必自己先走完整個研究路徑。

06

Android Modularization Part 11: CI/CD & Build Failures You Cannot Reproduce

Medium Kotlin 作者:Ramadan Sayed 發布:10-02 09:26

Android 模組化第 11 部分:無法重現的 CI/CD 與建置失敗

在每位開發者的電腦上都能通過,卻在 CI 上失敗。

重點摘要

本機建置正常,但 CI 建置失敗
錯誤看起來與沒人動過的內容有關
聚焦 Android 模組化中的 CI/CD 建置問題
展開詳細摘要

本文指出 Android 模組化常見的棘手情境:在每位開發者的電腦上都能通過的建置,到了 CI 卻失敗,而且錯誤看起來與最近修改無關。這反映出本機環境與自動化流程之間的差異,尤其是在 CI/CD 管線中更容易出現難以重現的建置問題。依據提供的文字,文章重點在於問題現象本身,而非已確認的根因,原文內容也僅顯示部分摘要。

07

Senior Android interview questions: the 5 follow-ups that decide the loop

Medium Kotlin 作者:Mike Salari 發布:10-02 09:37

資深 Android 面試問題:決定錄用的 5 個追問

我已進行 500 多場技術面試。你第一次回答通常不會決定資深 Android 面試輪次,接下來的問題才會。

重點摘要

第一個回答通常不是決定資深 Android 面試輪次的關鍵。
追問才更能看出候選人的真實深度。
作者的觀點來自 500 多場技術面試經驗。
展開詳細摘要

本文指出,資深 Android 面試中,候選人的第一個回答通常不是勝負關鍵,真正決定結果的是後續追問。作者根據超過 500 場技術面試的經驗,強調面試官應重視接下來的問題,因為那最能看出候選人的深度、清晰度與實務理解。對資深職缺而言,追問往往比初答更能反映真實能力。

08

Kotlin Multiplatform in 2026: My Team Attempted to Replace Native Android and Here is Where We…

Medium Kotlin 作者:AndroidLab by Andre 發布:10-02 11:48

Kotlin Multiplatform 在 2026 年:我的團隊嘗試取代原生 Android,最後卡在這裡

KMP 共用層,是 Kotlin 2.4 與一年 KMP 程式碼共享經驗的成果。

重點摘要

建立了 KMP 共用層。
成果來自 Kotlin 2.4 與一年的 KMP 程式碼共享經驗。
原文僅有 Medium 摘要片段,沒有完整內容。
展開詳細摘要

這段文字只是 Medium 文章的簡短摘錄,主題是 2026 年的 Kotlin Multiplatform。文中提到團隊建立了 KMP 共用層,並將其描述為 Kotlin 2.4 與一年 KMP 程式碼共享經驗的成果。由於沒有提供全文,無法判斷團隊實際替換原生 Android 的範圍、成效或最後卡在哪些限制上。

09

I Ran My Android Compose UI on iOS, Desktop, and the Browser.

Medium Kotlin 作者:AndroidLab by Andre 發布:10-02 11:59

我把 Android Compose UI 跑在 iOS、桌面與瀏覽器上

Compose Multiplatform 哪些地方做對了、哪些地方仍有不足,以及 Android 開發者是否該押注它。

重點摘要

從 iOS、桌面與瀏覽器三個目標平台檢視 Compose Multiplatform。
整理它的優點,以及目前仍然不足之處。
探討 Android 開發者是否值得採用它。
展開詳細摘要

這篇文章以將 Android Compose UI 執行在 iOS、桌面與瀏覽器上的經驗,來評估 Compose Multiplatform 的實際表現。作者聚焦於它做得好的地方、目前仍然不足的部分,以及 Android 開發者是否應該把它當成值得投入的技術。文章重點不是宣稱已全面成熟,而是從實務角度檢視它是否已足以承擔真實開發需求。

10

I Plugged Claude Into Android Studio Through AWS Bedrock, With a 1-Day Local Proxy

Medium Kotlin 作者:Pierrick CAEN 發布:10-02 13:15

我透過 AWS Bedrock 與一個一天完成的本機代理,將 Claude 接到 Android Studio

沒有 API 金鑰,也不需要新的供應商合約:只是一個假裝成本機 LLM 的小型 Kotlin 伺服器。

重點摘要

透過 AWS Bedrock 將 Claude 接入 Android Studio
以小型 Kotlin 本機代理伺服器作為中介
不需要新的 API 金鑰或供應商合約
展開詳細摘要

本文介紹一個一天內完成的實驗:作者透過 AWS Bedrock,把 Claude 接到 Android Studio,中間以一個小型 Kotlin 本機代理伺服器轉接。這個代理刻意模擬成 Local LLM,讓 Android Studio 可以直接與它互動,而不必申請新的 API 金鑰或簽訂新的供應商合約。文章重點在於這層輕量的橋接做法,而非正式產品整合。

11

Maximiser les performances d’une application Android avec R8, WebP et AGP 9+ pour booster sa…

Medium Kotlin 作者:Seti Afanou 發布:10-02 14:26

使用 R8、WebP 與 AGP 9+ 提升 Android 應用程式效能,進而優化 Google Play ASO

為什麼應用程式的技術品質會直接影響它在 Google Play 上的 ASO?

重點摘要

文章把應用程式的技術品質與 Google Play ASO 直接連結。
標題提到 R8、WebP 與 AGP 9+,主題聚焦在效能優化。
目前提供的內容只有導言,沒有完整內文可供摘要。
展開詳細摘要

本文導言提出一個問題:為什麼 Android 應用程式的技術品質會直接影響它在 Google Play 上的 ASO。從標題可看出,作者打算以 R8、WebP 與 AGP 9+ 為例,討論如何透過效能與打包相關最佳化提升應用表現。不過,所提供的內容只有短短的前導句,沒有完整文章,因此只能確定主題方向,無法進一步確認文中的具體論點、做法或結論。

12

Architecting a Battery-Efficient Geofencing Engine for Android Background Services

Dev.to Kotlin 作者:Haseeb 發布:10-02 01:27

為 Android 背景服務打造省電的地理圍欄引擎

Android 上的地理圍欄挑戰,在於準確性與耗電之間的拉扯。

重點摘要

以 GeofencingClient 搭配 PendingIntent,避免持續輪詢背景服務
用 Room 在本機保存規則優先序,依事件更新 AudioManager 狀態
處理電池最佳化、DND 權限與各家 OEM 對背景程序的限制
展開詳細摘要

本文介紹作者如何為 Muffle 設計一個以離線優先為核心的 Android 應用,透過地理圍欄自動切換靜音與震動,同時盡量降低耗電。實作上不是採用持續輪詢,而是依賴 GeofencingClient、PendingIntent 與本機 Room 優先序堆疊來處理 ENTER、EXIT 事件。作者也分享了 Android 真實環境中的限制,包括各家 OEM 激進的電池最佳化、REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 權限,以及 AudioManager 與勿擾模式之間的互動。最後強調要提供可見回饋、維持本機邏輯,並考慮未來結合活動辨識的混合方案。

13

Reclaiming Attention: Building a Distraction-Free Android Launcher

Dev.to Kotlin 作者:A Akhil 發布:10-02 05:19

重拾專注:打造無干擾的 Android 啟動器

我最近將 Minimalist-Focus-Launcher 開源,這是一款專為數位健康設計的自訂 Android 啟動器。

重點摘要

以純文字清單取代 App 圖示,降低無意識點擊。
採用純黑背景,兼顧 OLED 省電與極簡工具感。
將待辦事項與 App 鎖直接整合到主畫面。
展開詳細摘要

作者從自己被雜亂且通知過多的主畫面分心的經驗出發,介紹開源的 Minimalist-Focus-Launcher。這款自訂 Android 啟動器以數位健康為目標,改用純文字介面取代色彩鮮明、容易讓人上癮的 App 圖示網格,降低隨手開啟 App 的衝動。純黑背景不僅有助於 OLED 螢幕省電,也強化手機作為工具的極簡視覺。它還把任務管理與 App 鎖整合進主畫面,讓裝置更像一個獨立的生產力中心。專案以 Kotlin 實作,UI 則完全採用 Jetpack Compose。

14

Growing a slice without a framework: from deep modules to Clean Architecture, one forced change at…

Medium Kotlin 作者:Per-Erik Bergman 發布:10-02 00:34

不靠框架擴大一個 Slice

多年來,我總是在每個專案的一開始就導入完整的 Clean Architecture,不管功能是否真的需要它。

重點摘要

作者過去習慣在所有專案一開始就導入完整的 Clean Architecture。
即使功能不一定需要,仍然會先套上這套架構。
文章主軸是從深層模組逐步走向以 slice 為單位的演進方式。
展開詳細摘要

文章一開始回顧作者長期以來的做法:無論功能需求是否真的需要,幾乎每個專案從第一天就全面導入完整的 Clean Architecture。這篇內容設定在一個從 deep modules 逐步演進到 Clean Architecture 的脈絡中,強調不是一次把所有架構都加上去,而是透過一次次被迫的變更,讓架構隨系統成長而調整。截取內容未交代具體實作或成效,但可看出作者想討論的是更務實、避免過度設計的演進式做法。

15

Modular Jetpack Compose: Don’t Leave Your Architecture to Code Review

ProAndroidDev 作者:Kanan Yusubov 發布:10-02 04:56

模組化 Jetpack Compose:別把架構交給 Code Review 來守

這篇文章把模組化 Compose 應遵守的六項規則,從 README 移進 build 流程中強制執行。

重點摘要

用 Gradle 在建置階段強制模組邊界,而不是只靠 README 規範。
透過 Kotlin internal、內部路由、Koin 編譯期檢查與 sealed type 讓違規提早失敗。
再加上 source-level doctor 檢查與產生器,讓正確 wiring 成為最省力的做法。
展開詳細摘要

文章主張,模組化 Jetpack Compose 架構不該只靠 Code Review 或文件維持,而應直接寫進建置流程。作者將每個 capability 拆成 api 與 impl 兩個模組,並以 app 作為唯一的 composition root。Gradle 規則阻止不當依賴,Kotlin internal 保護 impl 細節,路由僅能由各 feature 建立,Koin 編譯器外掛驗證 DI,sealed type 讓錯誤處理保持完整,而 source 檢查則確認每個 feature 與 route 都已註冊。無法強制的部分,則交給產生器與設計良好的工具鏈,讓做對的事最容易。

16

Kotlin Coroutines Interview Questions That Test Depth

Medium Kotlin 作者:Techhub Asia 發布:10-02 03:55

檢驗深度的 Kotlin 協程面試題

許多 Kotlin 候選人都能在履歷上寫出「coroutines」,但能說清楚協程在中途失敗時會發生什麼的人少得多。

重點摘要

聚焦用來考驗協程理解深度的面試題
特別強調協程在失敗情境下的行為
提醒不要只停留在履歷關鍵字層次
展開詳細摘要

這篇文章指出,許多 Kotlin 求職者都能在履歷上寫出 coroutines,但真正能深入說明其行為的人不多。作者特別以協程在執行到一半失敗時會發生什麼作為切入點,說明這類情境很適合用來檢驗候選人是否真的理解 coroutine,而不只是會背名詞。文章重點在於評估對失敗處理與運作機制的理解深度。

17

Biometric Authentication in Android with BiometricPrompt (Kotlin)

Medium Kotlin 作者:Pranjal Vyas 發布:10-02 04:38

使用 BiometricPrompt 在 Android 上進行生物辨識驗證(Kotlin)

使用 AndroidX Biometric library 來檢查可用性、顯示 BiometricPrompt、處理 callbacks,並在需要時改用裝置憑證。

重點摘要

以 AndroidX Biometric 檢查生物辨識是否可用
使用 BiometricPrompt 顯示驗證介面
必要時回退到裝置憑證驗證
展開詳細摘要

本文說明如何在 Android 中使用 AndroidX Biometric library 與 BiometricPrompt 實作生物辨識驗證。內容涵蓋檢查裝置是否支援生物辨識、顯示驗證提示、處理驗證回呼,並在生物辨識不可用或不適合時改用裝置憑證。整體以 Kotlin 實作為主,適合想整合 Android 驗證流程的開發者參考。