Daily Digest

每日新聞摘要

2026年03月31日

今日總結

內容會跟隨語言切換。

📝今日焦點:獨立開發者以 Kotlin 推出整合文件掃描、PDF 編輯與加密保險庫的手機應用,並分享 Android agentic AI 的落地實務與教訓。 🔧架構設計:在 Android 與 KMP 專案建議以 Ktor 取代 Retrofit,強調 HttpClient 管理、插件化解析與避免阻塞主執行緒等實務要點。 ✅測試與品質:使用 mockk 時常見「No answer provided」陷阱代表未設 answer,應明確設定 answer 或採 relaxed mock 以加速除錯。 🚀語言演進:Kotlin 2.3.20 修正與效能改進、Kotlin Foundation 補助名單公布、以及 Amper 0.10.0 與社群生態更新推動平台成熟。

01

🚀 Just launched Lihenium on Product Hunt today — built solo from India with no team & no funding! An all-in-one document scanner, PDF editor & secure vault for Android 📄🔒 📱 Download free on Play Store: play.google.com/store/apps/details?id=com.abhi

Dev.to Kotlin 作者:Abhishek Kumar 發布:03-31 14:59

在 Product Hunt 推出 Lihenium — 印度獨立開發的 Android 文件掃描、PDF 編輯與安全保險庫

Abhishek Kumar 以 Kotlin 單獨開發、無團隊無資金推出 Lihenium,整合文件掃描、PDF 編輯與安全保管功能並上架 Play 商店。

重點摘要

以 Kotlin 自行開發,無團隊、無外部資金
整合文件掃描、PDF 編輯與加密保險庫
已在 Google Play 免費上架,並於 Product Hunt 推出

Abhishek Kumar 宣布推出 Lihenium,一款為 Android 設計的多合一應用,整合文件掃描、PDF 編輯與安全保險庫。該應用由作者以 Kotlin 在印度獨力開發,沒有團隊也未取得外部資金,現已免費上架 Google Play,並在 Product Hunt 上發布消息。原文篇幅短(約一分鐘閱讀),強調獨立開發者完成實用工具的里程碑,提及 Play 商店下載連結與相關標籤(androiddev、kotlin、productivity、privacy),並邀請使用者下載體驗與於 Product Hunt 互動回饋。

02

Networking in Android: Why Ktor is the Modern Choice for Kotlin Developers

Dev.to Kotlin 作者:AhsanAhmed03 發布:03-31 14:59

Android 網路:為何 Ktor 是 Kotlin 開發者的現代選擇

Ktor 是 JetBrains 開發的輕量且以 Coroutine 為先的跨平台網路框架,能比 Retrofit 提供更直接的 Kotlin 使用體驗與控制權。

重點摘要

支援 Kotlin Multiplatform,可跨 Android、iOS、桌面與 Web 共用網路程式碼
以 Coroutine 為核心設計,原生支援 suspend 函式無需額外 adapter
採插件化功能(JSON、Logging、Auth),只安裝所需保持輕量

本文說明為何在 Android 開發中改用 Ktor 比沿用 Retrofit 更合適,特別是當專案需支援 Kotlin Multiplatform 時。作者介紹如何在 Gradle 中加入 Ktor 客戶端、Content Negotiation 與 Serialization 等依賴,示範可序列化的資料模型與以 HttpClient(Android 引擎)配置 JSON 解析、Logging 與 defaultRequest 的作法。範例採 MVVM 架構,Repository 用 Ktor 取得資料,ViewModel 透過 StateFlow 與 viewModelScope 發起協程請求並處理例外。文章亦提出最佳實務:在適當時機關閉 HttpClient、使用插件代替手寫解析、選擇合適引擎(CIO 或 Android),並提醒避免硬編 URL、阻塞主執行緒與缺漏 Kotlinx Serialization 的 ProGuard 規則。結論指出 Ktor 是更靈活且利於跨平台共用的未來選擇。

03

Kotlin Coroutines Explained Simply — Part 1: Jobs vs Threads (Beginner Friendly)

Medium Kotlin 作者:Muhammad Nizwa 發布:03-31 13:32

以簡明方式解釋 Kotlin 協程 — 第 1 部分:Jobs 與 Threads(適合新手)

協程常被形容為「輕量級執行緒」——這到底代表什麼?

重點摘要

探討協程被稱為「輕量級執行緒」的含義
第 1 部分聚焦於 Jobs 與傳統執行緒的比較
以新手友善的方式釐清概念與誤解

本文從質疑「協程是輕量級執行緒」這個說法出發,作為系列的第一篇(Jobs vs Threads),說明協程與傳統作業系統執行緒如何不同。文章以新手為對象,透過比較 Job 抽象與執行緒式的併發模型,說明協程為何被採用以簡化非同步程式設計,並說明該稱呼背後的意義與取捨。重點放在直觀的概念說明,而非深入實作細節,為後續章節做鋪陳,幫助讀者建立理解協程行為與生命週期的基礎。

04

Amper 0.10 – JDK Provisioning, a Maven Converter, Custom Compiler Plugins, and More

Kotlin Blog 作者:Kirill Likhodedov 發布:03-31 08:20

Amper 0.10 — JDK 自動佈署、Maven 轉換器、自訂 Kotlin 編譯器外掛與更多改進

Amper 0.10.0 可自動佈署 JDK(預設 JDK 21),並可在 module.yaml 指定 JDK 條件,且會尊重 JAVA_HOME 設定。

重點摘要

自動 JDK 佈署(預設 JDK 21),可於 module.yaml 指定版本與發行版
半自動 Maven-to-Amper 轉換器,將 pom.xml 轉為 project.yaml/module.yaml 並保留 maven-like 結構
支援第三方 Kotlin 編譯器外掛,以及多項 IDE 改進(執行設定 UX、原生執行 gutter、測試名稱、偵測器)

Amper 0.10.0 帶來多項功能與 IDE 改進:可自動佈署 JDK(預設 JDK 21),並可於 module.yaml 指定版本與可接受的發行版,且會考慮 JAVA_HOME。新增的半自動 Maven 轉換器能讀取 pom.xml(含多模組 reactor),產生相對應的 project.yaml 與 module.yaml,保留 maven-like 目錄結構、映射依賴、BOM、倉庫、發佈座標與常用 plugin,並透過 mavenPlugins 區段與相容層執行其他 Maven plugin。此版本亦加入第三方 Kotlin 編譯器外掛支援(內建 kotlinx.rpc 與 JsPlainObjects)、重新設計的執行設定 UX、Run Anything 支援、原生應用的執行 gutter、JUnit 5 測試名稱顯示改善、Ktor 外掛協助、JVM 偵測器支援(需 IntelliJ Ultimate)、plugin 開發增強、跨依賴的 Maven profile 支援、module 描述與預設版本更新。使用 ./amper update 升級,並於 Kotlinlang Slack #amper 或 YouTrack 提供回饋。

05

Kodee’s Kotlin Roundup: Kotlin 2.3.20, Interview With Josh Long, and More

Kotlin Blog 作者:Kodee 發布:03-31 09:27

Kodee 的 Kotlin 摘要:Kotlin 2.3.20、與 Josh Long 的訪談與更多消息

Kotlin 2.3.20 帶來錯誤修正、效能提升與多項小而有意義的生態系改進。

重點摘要

發佈 Kotlin 2.3.20,強化穩定性與效能
Kotlin Foundation 授予五項專案每項 6,000 美元贊助
Kotlin Multiplatform 加入實驗性 Swift Package Manager 支援

三月對 Kotlin 來說相當熱鬧:Kotlin 2.3.20 針對錯誤修正與效能做出改進,提升日常開發穩定性;Kotlin Foundation 從 117 個申請中選出五個獲獎專案(Firebase Kotlin SDK、Shadow Gradle Plugin、Mokkery、Stack Trace Decoroutinator、Kobweb),各獲 6,000 美元贊助。文章還推薦與 Josh Long 的訪談,討論 Kotlin 與 Spring 的契合,以及 JVM 在現代與 AI 應用中的地位。其他亮點包含 KotlinConf’26 行程已上線、Android Gradle Plugin 9.0 升級說明、KMP 的 Swift Package Manager 實驗性支援(含 AI 協助轉換)、IntelliJ 的 coroutine 檢查、Tracy AI 觀測庫、VS Code 的 Java→Kotlin 轉換延伸,以及模組單體架構與社群活動資訊。

06

AI Agents in Android: Cutting Through the Hype to Find What Actually Works

Medium Kotlin 作者:Sourav Dey 發布:03-30 23:43

Android 上的 AI 代理:去蕪存菁,找出真正可行的做法

一位開發者在 Android 上構建、測試、除錯與上線具代理能力系統數月後的誠實實務筆記。

重點摘要

開發者親身實作幾個月的現場筆記
剝除宣傳噪音,聚焦能在裝置上落地的方法
強調性能資源、設計取捨與部署風險

作者以開發者身份回顧在 Android 平台上設計與交付 agentic(具代理能力)系統的數月經驗,記錄多次構建、出錯與上線的過程與教訓。文章目的並非學術回顧或產品宣傳,而是要辨識哪些做法在行動裝置上能實際運作,哪一些可能只是行銷話術。內容涵蓋工程上的取捨、效能與資源限制、使用者互動挑戰以及部署時的風險與注意事項,強調漸進式、以測試為導向的實作策略,適合希望在 Android 生態系中落地 AI 代理方案的工程師與產品團隊參考。

07

Don’t Forget an Answer If Mocking a Function w/ mockk; Watch for “No answer provided” vs "... found"

Medium Kotlin 作者:Brian Terczynski 發布:03-31 05:47

使用 mockk 模擬函式時別忘了提供 Answer;注意 “No answer provided” 與 “... found” 的差別

若用 mockk 模擬函式卻沒設定 answer,可能會看到 “No answer provided” 的訊息,與其他錯誤提示不同,應加以分辨。

重點摘要

未為被模擬的函式提供 answer 會導致 “No answer provided”
錯誤訊息的差異能幫助判別是缺少 answer 還是其他問題
檢查 mock 設定並提供 answer(或視情況使用 relaxed mock)以避免測試錯誤

本文提醒使用 mockk 的 Kotlin 開發者注意一個常見陷阱:對函式做 mock 卻未設定 answer。當沒有 answer 時,mockk 會回報 “No answer provided” 類型的訊息,這類訊息與其他像是找不到方法或參數不符的錯誤提示不同,且指向不同的原因。作者強調,辨識錯誤文字的差異有助於更快找出問題根源;因此在撰寫測試時應仔細檢查 mock 的配置,必要時明確提供 answer 或在合適情境使用 relaxed mock,以減少執行時意外。欲取得範例與更詳細說明,請參閱 Brian Terczynski 的原文。