Daily Digest

每日新聞摘要

2026年09月15日

01

Gson Deserialization and the InaccessibleObjectException

Baeldung 作者:Marcin Buczkowski 發布:09-15 05:32

Gson 反序列化與 InaccessibleObjectException

避免例外的兩大方向:將程式碼對 Gson 開放,或改用 records 並遵守 JPMS 規則。

重點摘要

Java 9 之後的強封裝與 JPMS,會限制 Gson 透過反射存取私有欄位。
模組化專案中的 POJO 可能失敗,但 records 可直接反序列化成功。
可用 public 欄位、opens、TypeAdapter 或 --add-opens 處理;Gson 2.14.0 也支援巢狀 java.time 物件。
展開詳細摘要

Java 9 之後的強封裝與 JPMS 會限制 Gson 以反射存取私有欄位,因此在模組化專案中反序列化時可能拋出 InaccessibleObjectException。文章示範了 POJO 在 module path 下會失敗,而 record 因 Gson 會使用其 canonical constructor,所以可直接成功反序列化。若仍要使用 POJO,可採取四種作法:將欄位改為 public、用 opens 將套件開放給 com.google.gson、實作自訂 TypeAdapter,或在啟動時加上 --add-opens 參數。文中也說明 Gson 2.14.0 已恢復對巢狀 java.time 資料的支援,但 ISO 字串日期仍需自訂 adapter。

02

𝗠𝗼𝗱𝘂𝗹𝗮𝗿𝗶𝘇𝗮𝘁𝗶𝗼𝗻 𝗶𝘀𝗻'𝘁 𝗷𝘂𝘀𝘁 "𝗰𝗹𝗲𝗮𝗻𝗲𝗿 𝗰𝗼𝗱𝗲" — 𝗶𝘁'𝘀 𝗮 𝗯𝘂𝗶𝗹𝗱-𝘁𝗶𝗺𝗲 𝗹𝗲𝘃𝗲𝗿.

Dev.to Kotlin 作者:rana bilal 發布:09-15 04:04

模組化不只是更乾淨的程式碼,也是建置時間的槓桿

作者將單一模組的 Android App 拆成 core/feature 架構,在功能與畫面不變下重新量測增量建置時間。

重點摘要

增量建置時間從 3.744 秒降到 2.614 秒。
應用功能與畫面維持不變,只改變模組結構。
倉庫同時保留兩個版本,方便重現比較。
展開詳細摘要

作者把一個單一模組的 Android App 拆成 core/feature 模組架構,在功能與畫面完全相同的前提下,透過修改單一檔案並重新建置來比較增量編譯時間。結果顯示,單體式版本為 3.744 秒,模組化版本為 2.614 秒,約快 30%。專案倉庫同時提供 main 與 monolith-baseline 兩個版本,方便讀者自行重現。使用的技術包含 Kotlin、Compose、Hilt 與 Gradle version catalogs.

03

~40k LOC, Shared 90%: Building a Cross-Platform Shared E-bike Ops App

Dev.to Kotlin 作者:Peter wang 發布:09-15 05:32

約 4 萬行 Kotlin、90% 共用:打造跨平台共享式電動自行車營運 App

整個專案約 4 萬行 Kotlin,其中約 90% 位於 Android 與 iOS 共用的共享層。

重點摘要

先拆解約 40 個畫面,辨識出哪些是可共用的商業 UI、哪些才需要原生能力。
以 KMP、Compose Multiplatform、H5 與薄殼主機分工,讓平台能力透過介面注入。
經過兩輪遷移,將共用程式碼比例從 81% 推進到 95.8%。
展開詳細摘要

本文說明團隊如何以 Kotlin Multiplatform 為核心,建立一套 Android 與 iOS 共用的電動自行車營運 App,而不是重複開發兩套系統。作者先分析約 40 個畫面,發現多數屬於穩定的表單、列表與狀態流轉,真正需要原生支援的只有地圖、Bluetooth、相機掃描、定位與上傳等少數能力,因此採用 KMP 處理商業核心、Compose Multiplatform 實作共用 UI、H5 承載儀表板,並以薄殼主機注入平台功能。接著透過兩輪遷移,將地圖畫面與導覽殼層逐步移出 Android host,讓共用比例從 81% 提升至 95.8%,同時也說明 i18n、平台介面與目前已上線的功能範圍。

04

Part 7 — Case Study: Building a Terminal UI with the Compose Runtime (Mosaic)

Medium Kotlin 作者:Android Expert 發布:09-15 02:57

第 7 部分——案例研究:使用 Compose Runtime(Mosaic)打造終端機 UI

這是七篇系列的最後一篇,透過直接在終端機中渲染,證明 Jetpack Compose 是一個與 UI 無關的 runtime。

重點摘要

七篇系列的最後一篇
展示 Compose 在終端機 UI 中執行
主張 Compose 與 UI 無關
展開詳細摘要

這是七篇系列的最後一篇,以 Mosaic 為例,展示如何將 Jetpack Compose 直接渲染到終端機中。文章想傳達的核心觀點是:Compose 不只是 Android 畫面的 UI 工具,也可以作為與 UI 無關的 runtime 使用。透過把畫面輸出到 terminal,系列文章用實作案例說明 Compose 的彈性與可移植性。

05

I Prepared for a Senior Android Interview at a Ride-Hailing Company.

Medium Kotlin 作者:Saif Khan 發布:09-15 06:33

我為一家叫車公司的資深 Android 面試做準備

多數 Android 面試準備清單其實沒什麼用。

重點摘要

常見準備內容只停留在 Activity 等基本定義。
真正的面試更重視實務問題。
例如,候選人可能會被問到應用程式為何耗電。
展開詳細摘要

文章指出,多數 Android 面試準備清單流於表面,常只要求背誦 Activity 等基礎名詞,對實際面試幫助有限。作者認為,資深 Android 面試更常聚焦在真實情境與工程問題,例如為什麼 App 會耗電,而不是單純考基本定義。這篇短文強調,準備方向應從教科書式知識轉向實務能力與問題分析。

06

Jetpack Navigation 3: What’s New for Compose

Medium Kotlin 作者:Atul Mishra 發布:09-15 06:55

Jetpack Navigation 3:Compose 有哪些新變化

前言

重點摘要

本文摘錄僅有前言,未提供實質內容。
文中引導讀者前往 Medium 繼續閱讀。
摘錄中沒有 Jetpack Navigation 3 與 Compose 的技術細節。
展開詳細摘要

這段原文摘錄內容非常有限,只包含標題、作者、連結,以及一句「Continue reading on Medium」。截錄中沒有實際說明 Jetpack Navigation 3 在 Compose 上的更新、功能變動、預覽狀態或實作細節,因此無法從這份內文延伸出技術重點;可確認的資訊只有完整文章需前往 Medium 閱讀。