Daily Digest

每日新聞摘要

2026年09月14日

今日總結

內容會跟隨語言切換。

📝 今日焦點 Kdrant MCP 以單一靜態二進位連 Qdrant,並提醒 stdout 日誌會破壞協定;Compose 觀念轉向 state 驅動,Java/Kotlin 混編則累積遷移債務。 🔧 效能最佳化 AlertSpot 與 Muffle 強調本機地理圍欄、快取與輪詢調整,兼顧省電、Doze 可靠性與隱私;LiteRT-LM 則讓離線 LLM 可選 CPU/GPU,但需自管 token 與打包風險。 🏗 架構設計 KMP 無頭引擎、Navigation 3、AGP 9.4、tvOS fork 與 Android/OEM 差異,皆在提醒多平台與建置邊界要顯式管理,避免舊整合方式被更新打斷。 ✅ 測試與品質 Compose 滑桿七個月 bug 因刪除式修補與 AI code review 被解掉;Jackson 反序列化、Compose @Immutable/@Stable、以及 Android AI 可用性偵測,也都指向更可推理的品質控制。 🚀 語言演進 Kotlin 2.4 帶來 context parameters、UUID 穩定化、Java 26 支援,2.4.20 再加入 allDistinctBy/allEqualBy;context-sensitive resolution 也持續讓 when 更精簡。

01

Give your agent a vector database without giving it a Python runtime

Dev.to Kotlin 作者:AS 發布:09-14 08:20

讓你的代理程式連上向量資料庫,卻不必帶上 Python 執行環境

Kdrant 2.3.0 提供的 kdrant-mcp 是單一靜態二進位檔。

重點摘要

kdrant-mcp 以單一靜態二進位檔取代原本的 Python MCP 伺服器
預設只提供六個唯讀工具,寫入功能需加上 --allow-writes 才會開啟
文章也說明 Kotlin MCP 伺服器要避免 stdout 被日誌污染,應改送 stderr
展開詳細摘要

本文介紹 Kdrant 2.3.0 新增的 kdrant-mcp:它是單一靜態二進位檔,讓代理程式可直接連到 Qdrant,不必再啟動 Python 解譯器、virtualenv 或一長串相依套件。預設會提供六個唯讀 MCP 工具,寫入與刪除功能則需以 --allow-writes 明確啟用。文章同時提醒,MCP 協定依賴 stdout,若 Kotlin 日誌寫到標準輸出會破壞封包,因此應把診斷訊息導向 stderr。另也概述 Kdrant 的 Kotlin 用戶端、REST/gRPC 選項、原生映像支援與效能取捨。

02

Jetpack Compose Made Me Rethink How I Build UI

Dev.to Kotlin 作者:DEVANSHU PATIL 發布:09-14 10:13

Jetpack Compose 讓我重新思考 UI 的建構方式

最大的改變不是語法,而是我看待 UI 的思維方式。

重點摘要

Compose 讓 UI 成為 state 的函式。
使用者操作應以事件單向流動。
Compose 不能取代良好的架構與職責分離。
展開詳細摘要

作者在使用 Jetpack Compose 後,最大的改變不是語法,而是思考 UI 的方式。相較於傳統以 view 為中心、逐一修改元件的做法,Compose 更強調以 state 驅動畫面,並透過事件讓使用者操作單向傳遞到 ViewModel 與資料層。文中也說明 recomposition 並不可怕,重點在於 composable 應可重複執行;同時,state 的擁有權應盡量靠近實際使用處。最後作者提醒,Compose 只是宣告式 UI 工具,並不能自動解決架構問題。

03

AlertSpot: An open-source, battery-friendly transit alarm for Android

Dev.to Kotlin 作者:Vasanth K 發布:09-14 12:06

AlertSpot:一款適用於 Android、開源且省電的通勤提醒鬧鐘

為了解決這個問題,我打造了 AlertSpot——一款輕量、完全免費且開源的 Android 應用,當使用者進入目的地地理圍欄時會發出高優先級音效與全螢幕提醒。

重點摘要

使用 OSMDroid 避免 Google Maps API 計費與金鑰依賴
依距離動態調整 GPS 取樣頻率,降低耗電
不需帳號、分析追蹤或遙測,資料僅儲存在本機
展開詳細摘要

AlertSpot 是一款以隱私為優先的 Android 通勤提醒應用,目標是避免搭乘大眾運輸時睡過站。作者以 Kotlin、Jetpack Compose、OSMDroid 與 Google Play Services 的地理圍欄功能建置系統,當使用者進入目的地範圍時即觸發提醒。為了降低成本與耗電,應用改用 OSMDroid 顯示地圖、在本機快取 OpenStreetMap 圖磚,並依與地理圍欄的距離動態調整定位輪詢頻率。它也透過前景服務、全螢幕 Intent、Wake Lock 與開機重註冊機制,提升在 Doze 模式與重新開機後的可靠性。

04

Kotlin 2.4 Just Made Half My Dependency Injection Code Disappear

Medium Kotlin 作者:Sixtin - Mobile App Developer 發布:09-14 08:14

Kotlin 2.4 讓我一半的依賴注入程式碼消失

Context parameters、穩定化的 UUID API,以及對 Java 26 的支援——這些才是 Android 開發者真正會遇到的變化。

重點摘要

Context parameters 可減少依賴注入樣板碼。
UUID API 已進入穩定狀態。
Kotlin 2.4 新增對 Java 26 的支援。
展開詳細摘要

Kotlin 2.4 帶來多項與 Android 開發相關的更新,文章特別指出 context parameters 可能讓依賴注入程式碼大幅減少。除此之外,UUID API 已穩定化,並新增對 Java 26 的支援。本文重點在於說明這些變更對 Android 開發者的實際影響,未延伸到原文未提及的效能或比較結論。

05

Jetpack Compose 1.12 Just Closed the Gap Android Devs Have Been Waiting Years For

Medium Kotlin 作者:Sixtin - Mobile App Developer 發布:09-14 08:21

Jetpack Compose 1.12 補上 Android 開發者等待已久的落差

Mesh gradients、HDR 色彩、Credential Manager 自動填入,最後還有啟動效能終於能與傳統 Views 看齊。

重點摘要

支援 mesh gradients 與 HDR 色彩
加入 Credential Manager 自動填入
啟動效能目標是追上傳統 Views
展開詳細摘要

本文將 Jetpack Compose 1.12 描述為補上 Android 開發者長年等待的關鍵落差。內容點出新版本帶來 mesh gradients、HDR 色彩與 Credential Manager 自動填入等能力,並強調啟動效能終於能與傳統 Views 看齊。原文篇幅很短,屬於摘要式介紹,但可看出 Compose 1.12 同時涵蓋視覺表現與實際應用啟動體驗的改善。

06

Building an Enterprise Headless Kotlin Multiplatform (KMP) Engine: Powering Android, iOS, and…

Medium Kotlin 作者:Dinakar Maurya 發布:09-14 08:43

打造企業級無頭 Kotlin Multiplatform(KMP)引擎:支援 Android、iOS 等平台

為什麼停在 Use Case 層(「logic-native-ui」)才是兼顧行動裝置賦能、零 UI 妥協與架構平衡的最佳點……

重點摘要

聚焦於企業級無頭 KMP 引擎的行動賦能
主張架構邊界應停在 Use Case 層
強調支援 Android、iOS 同時不犧牲 UI
展開詳細摘要

本文介紹一個企業級無頭 Kotlin Multiplatform(KMP)引擎,目標是支援 Android、iOS 等行動平台。文章的核心觀點是:架構應停留在 Use Case 層,也就是所謂的「logic-native-ui」做法,才能在不犧牲使用者介面的前提下,達成行動端賦能。作者將這種做法描述為一種適合企業共享引擎的架構策略,讓多平台共用核心能力,同時保留 UI 的獨立性。

07

Android Gradle Plugin 9.4: The Quiet Update That’s Actually a Warning Shot

Medium Kotlin 作者:AndroidLab by Andre 發布:09-14 08:46

Android Gradle Plugin 9.4:看似平靜、其實是警訊的更新

紙面上只是小版本升級,但如果你有動態功能模組,或還在使用舊版 Variant API,這篇值得一讀。

重點摘要

表面上是小版本更新,但對部分專案影響不小
使用動態功能模組的團隊需要特別留意
仍採用舊版 Variant API 的專案應仔細閱讀
展開詳細摘要

本文將 Android Gradle Plugin 9.4 描述為表面上只是小版本升級,實際上卻可能對某些專案帶來影響。作者特別點出使用動態功能模組,或仍停留在舊版 Variant API 的開發者,需要認真看待這次更新。文章重點不在宣傳新功能,而是在提醒看似輕微的變更,可能對依賴舊整合方式的建置流程造成實務上的影響。

08

Navigation 3 in 2026: Is It Finally Time to Ditch Navigation Compose?

Medium Kotlin 作者:AndroidLab by Andre 發布:09-14 08:52

2026 年的 Navigation 3:現在終於該拋棄 Navigation Compose 了嗎?

實際檢視 Google 的新導航函式庫,究竟值不值得承受遷移的麻煩,還是只是更多變動。

重點摘要

檢視 Google 的新 Navigation 3 函式庫。
聚焦是否值得從 Navigation Compose 遷移。
討論重點在於變動成本與實際價值。
展開詳細摘要

本文以實際角度檢視 Google 推出的新導航函式庫 Navigation 3,並追問它是否值得從 Navigation Compose 進行遷移。文章沒有預設新方案一定更好,而是把焦點放在切換所需付出的成本、可能帶來的遷移麻煩,以及這次更新究竟是有意義的進展,還是只是另一波變動。整體來看,內容主要是在評估採用新函式庫與暫時觀望之間的取捨。

09

When Java Becomes a Kotlin Problem: Lessons from Migrating an Android App

Medium Kotlin 作者:Abdullahkhan 發布:09-14 11:00

當 Java 變成 Kotlin 的問題:Android 應用遷移的經驗教訓

Nullability、coroutines、Compose 與依賴邊界,讓 Java/Kotlin 共存演變成遷移債務。

重點摘要

Nullability 與 coroutines 讓 Java/Kotlin 共存更複雜。
Compose 也帶來額外的遷移考量。
依賴邊界影響了整體遷移成本。
展開詳細摘要

本文說明一個 Android 應用在遷移過程中,若 Java 與 Kotlin 長期共存,往往會逐漸累積遷移債務。作者點出 nullability、coroutines、Compose 與依賴邊界是主要造成複雜度的因素。文章不是把重點放在語言切換本身,而是提醒混合程式碼庫會增加摩擦,使後續修改與演進更困難,因此在導入 Kotlin 時,應更審慎規劃邊界與共存策略。

10

No More Magic: The Explicit Kotlin Stack

Medium Kotlin 作者:Geoffrey Rekier 發布:09-14 11:53

告別魔法:顯式的 Kotlin 技術棧

一個下午因四行程式碼而流逝,卻讓我學到 Ktor、Koin 與 Exposed 的關係

重點摘要

四行程式碼引發了整個下午的除錯。
這段經歷揭示了 Ktor、Koin 與 Exposed 的整合方式。
文章主張採用更顯式的 Kotlin 技術棧。
展開詳細摘要

這篇文章回顧了一次令人挫折的除錯經驗:僅僅四行程式碼,就讓作者花掉整個下午,也因此更深入理解 Ktor、Koin 與 Exposed 在 Kotlin 應用中的互動。作者藉由這段經歷反思框架中的「魔法」與隱藏行為,主張技術棧應更顯式、更容易推理,讓應用程式的組裝與依賴關係更加清楚。

11

@Immutable vs @Stable in Jetpack Compose: What Are We Actually Telling Compose?

Medium Kotlin 作者:Mahesh Ambekar 發布:09-14 13:31

Jetpack Compose 中的 @Immutable 與 @Stable:我們究竟在告訴 Compose 什麼?

如果你用過 Jetpack Compose,應該很可能看過這些註解。

重點摘要

文章介紹 Jetpack Compose 中的 @Immutable 與 @Stable。
主題聚焦於這些註解實際上是在告訴 Compose 什麼。
目前提供的內容只有開頭與 Medium 連結,沒有完整正文。
展開詳細摘要

這段內文只呈現了文章開頭,主題是 Jetpack Compose 中的 @Immutable 與 @Stable,以及它們實際上是在告訴 Compose 什麼。由於目前提供的內容只有一句引言與「繼續在 Medium 閱讀」的連結,無法得知作者後續的技術說明、範例或結論。因此,能確定的是文章聚焦在理解這兩個註解在 Compose 中的意義與用途,但摘錄本身不足以還原完整論點。

12

Resolving Exception: Cannot Deserialize From Object Value (No Delegate- Or Property-Based Creator)

Baeldung 作者:Martin Blažević 發布:09-14 04:21

解決 Cannot Deserialize From Object Value(No Delegate- or Property-Based Creator)例外

Jackson 需要合適的機制來建立 Notification 物件。

重點摘要

可為可變類別新增無參數建構子。
以 @JsonCreator 與 @JsonProperty 指定不可變類別的建構子或工廠方法。
在 Jackson 2.x 可用 ParameterNamesModule 或 ParanamerModule 取得建構子參數名稱。
展開詳細摘要

即使 JSON 欄位名稱與類別欄位一致,Jackson 仍可能因無法判定如何建立目標物件而在反序列化時拋出 InvalidDefinitionException。本文以不可變的 Notification 類別重現此錯誤,並介紹多種解法:對可變類別加入預設無參數建構子、以 @JsonCreator 和 @JsonProperty 標註建構子或靜態工廠方法,或在 Jackson 2.x 中透過 ParameterNamesModule、ParanamerModule 讓 Jackson 推斷建構子參數名稱。文中也說明 Jackson 3.x 預設已支援參數名稱探索,而 Paranamer 僅限 Jackson 2.x。

13

Architecting for Privacy: Building a 100% Offline Geofencing Engine on Android

Dev.to Kotlin 作者:Haseeb 發布:09-14 01:52

以隱私為核心的架構設計:在 Android 上打造 100% 離線的地理圍欄引擎

我決定採用 100% 離線架構。

重點摘要

將地理圍欄與規則完全留在裝置端,避免雲端追蹤並保護隱私。
以 GeofencingClient、Room、ForegroundService 與開機後重新註冊處理背景限制與重疊規則。
結合位置觸發與祈禱時間計算作為備援,提高在複雜情境下的可靠性。
展開詳細摘要

作者分享為 Muffle 設計 Android 自動靜音功能的過程,核心目標是不將定位資料上傳雲端,而是讓整套系統完全在裝置端運作。為了處理多重且可能重疊的規則,他採用 GeofencingClient、本機 Room 資料庫、ForegroundService,並在 ACTION_BOOT_COMPLETED 後重新註冊地理圍欄。由於單靠 GPS 可能在清真寺內失準,作者再加入 Adhan 函式庫計算祈禱時間,形成更穩健的混合方案。文章強調,可靠性與隱私比聰明功能更重要,資料留在本機本身就是信任的一部分。

14

Gemini Nano Isn't on Most of Your Users' Phones. Here's the Feature-Detection Pattern That Doesn't Embarrass You in Production

Dev.to Kotlin 作者:YADNYESH RANA 發布:09-14 03:41

Gemini Nano 並不在大多數使用者手機上:一種不會在正式環境出糗的功能偵測模式

把裝置端 AI 能力視為第一級狀態,並搭配真正的備援流程,而不是用轉圈圈遮住死路。

重點摘要

不要假設所有 Android 裝置都能使用 Gemini Nano。
用 Unavailable、NeedsDownload、Ready 等封裝狀態描述可用性。
僅在使用者明確等待結果時才回退雲端,並在適當時機重新檢查。
展開詳細摘要

Android 裝置端 AI 不能直接假設可用。文章指出,許多手機會因晶片不符、系統版本過舊、AICore 尚未佈署或尚未列入支援名單,而無法使用 Gemini Nano;若應用程式直接呼叫,可能當機或無聲失敗。作者建議不要只用 try/catch,而要在建立 UI 前先做功能偵測,並以封裝狀態區分「永遠不可用」與「可下載後使用」。同時,雲端回退應只用在使用者明確要求立即回應的情境,背景推論則不應悄悄轉成雲端成本。

15

Animated Speed Dial FAB in Compose Multiplatform (Android & iOS)

Medium Kotlin 作者:Abhiraj Khare 發布:09-14 00:14

Compose Multiplatform 中的動畫速度選單 FAB(Android 與 iOS)

在打造現代行動應用時,螢幕可用空間總是非常寶貴。

重點摘要

聚焦於精簡的行動介面模式。
涵蓋 Compose Multiplatform 的 Android 與 iOS。
介紹動畫化的 speed dial 浮動動作按鈕概念。
展開詳細摘要

本文介紹在 Compose Multiplatform 中實作動畫式 speed dial 浮動動作按鈕的概念,適用於 Android 與 iOS。文章從行動裝置常見的限制出發:螢幕空間有限,使用者希望介面簡潔,但仍需要快速操作入口。由於目前可見內容僅提供主題與開頭段落,文中未揭露實作細節、效能數據或額外比較,因此摘要僅依已知資訊,保留其作為跨平台 UI 設計範例的脈絡。

16

27/28: Why Your App Behaves Differently on Different Phones

Medium Kotlin 作者:Pramod Patel 發布:09-14 00:31

為什麼你的應用程式在不同手機上的表現不一樣

OEM 如何分支 AOSP,以及它會破壞什麼

重點摘要

說明 OEM 如何分支 AOSP
聚焦這些分支可能造成的破壞
引導讀者到 Medium 繼續閱讀
展開詳細摘要

本文開頭指出,Android 應用在不同手機上表現不一致,與各家 OEM 對 AOSP 的分支與修改有關,這些變更可能打破開發者原先的假設。由於原文僅提供簡短片段,未列出具體案例或技術細節,但主題已清楚聚焦在 OEM 客製化如何影響應用行為。作者並引導讀者前往 Medium 繼續閱讀完整內容。

17

The Thumb That Ran Ahead of the Finger: Anatomy of a Compose Slider Bug

Medium Kotlin 作者:Vitaliy Gribko 發布:09-14 04:19

跑在手指前面的拇指:Compose 滑桿 bug 的剖析

一份 bug 回報在待辦清單裡放了七個月。

重點摘要

這個 bug 回報在待辦清單中停留了七個月。
修正只花了一天,卻刪除了滑桿三分之一的邏輯。
它幾乎就要在問題未完全解決前被釋出。
展開詳細摘要

這篇文章描述一個 Compose 滑桿的 bug 回報在 backlog 中延宕了七個月,之後的修正卻只花了一天,並刪除了滑桿三分之一的邏輯。從摘要可知,這個修正幾乎在問題未完全釐清前就要被發布。文章重點在於回顧這個 bug 的形成與處理過程,呈現長時間懸而未決的問題,如何因一次相對精簡的修正而被解決。

18

The Thumb That Ran Ahead of the Finger: Anatomy of a Compose Slider Bug

ProAndroidDev 作者:Vitaliy Gribko 發布:09-14 04:19

跑到手指前面的滑塊:Compose Slider 錯誤剖析

最好的修補,往往是刪除程式碼。

重點摘要

Compose 滑塊的問題來自從 View 系統沿用的「拖曳中吸附」行為。
rawOffset 與 snappedRawOffset 兩個狀態不一致,造成滑塊先於手指移動。
把吸附改到手勢結束時執行後,錯誤與相關競態一起消失。
展開詳細摘要

一個在 backlog 滯留七個月的 Compose 滑塊 bug,表現為使用者慢慢拖曳時,滑塊會跑到手指前方。根因不是實作失誤,而是從舊版 View 滑塊完整移植了「拖曳中吸附到最近刻度」的行為。作者將吸附移到手勢結束時處理,刪除了大量中間狀態、動畫與協程邏輯,也順手消除了另一個可能發生的競態。文章同時提到一個重設後狀態與 LaunchedEffect 不同步的隱藏 bug,最終由 AI code reviewer 在 diff 中抓出,凸顯單一真實來源與刪除式修補的價值。

19

Part 9 — Networking

Medium Kotlin 作者:AB nay 發布:09-14 05:38

第 9 部分——網路連線

Android 面試準備——完整索引

重點摘要

屬於 Android 面試準備系列的一部分。
本篇主題聚焦於網路連線。
目前提供的內容僅為索引與續讀連結。
展開詳細摘要

這篇文章標示為 AB nay 的 Android 面試準備系列〈第 9 部分——網路連線〉。目前提供的內文並未包含完整文章,只能看到「Android Interview Prep — Complete Index」以及前往 Stackademic 繼續閱讀的提示。因此,從這段摘錄無法確認任何具體的網路連線技術內容,也不能延伸推論原文未明示的細節。

20

Build Setup: Targets, Source Sets and buildSrc for tvOS in a Compose Multiplatform Fork

ProAndroidDev 作者:Sajid Ali 發布:09-14 04:24

在 Compose Multiplatform Fork 中為 tvOS 建立 targets、source sets 與 buildSrc

在 Kotlin Multiplatform 裡,target 不是最後才打開的旗標。

重點摘要

tvOS 的支援是從建置層開始,先定義 targets 與 source sets 才能讓編譯知道缺少什麼。
以 uiKitMain 作為 iOS 與 tvOS 的共享層,可減少重複實作,但仍保留各平台專屬程式碼。
fork 同步調整 Skiko 支援、Xcode 設定與資源處理,讓 tvOS 能正確建置與發佈。
展開詳細摘要

本文說明如何在 Compose Multiplatform 的 fork 中讓 tvOS 跑起來,重點放在建置層的調整。作者先建立 tvOS targets 與 source sets,並以 uiKitMain 作為 iOS 與 tvOS 共享的 UIKit 層,盡量減少重複程式碼,同時保留各平台專屬邏輯。文章也解釋 buildSrc 與 build-fork.gradle 的運作方式,讓 fork 能保留上游 build 檔而降低 rebase 衝突。接著,Xcode 專案與 Gradle 設定被修改以支援 tvOS SDK、destination 與 linker options;Compose Gradle plugin 也更新為能辨識 tvOS 資源與 target。最後作者指出,建置已可通過,下一步將進入 rendering。

21

Features You Waited For So Long in Kotlin

Medium Kotlin 作者:Andrii Dubovyk 發布:09-14 06:32

你等了很久的 Kotlin 功能

Kotlin 2.4.20 讓集合有了自己的意見,而 2.2 的編譯器終於學會看場合行事。

重點摘要

Kotlin 2.4.20 帶來集合相關的新行為。
Kotlin 2.2 包含編譯器更新。
文章主打長期等待的 Kotlin 新功能。
展開詳細摘要

這篇文章以輕鬆語氣預告 Kotlin 的幾項新功能,提到 Kotlin 2.4.20 為集合帶來新的相關變化,以及 Kotlin 2.2 的編譯器更新。雖然內文只是一段摘要式引言,沒有展開技術細節,但可看出文章聚焦於近期 Kotlin 版本中備受期待的改進,特別是集合與編譯器兩個面向。

22

Koko, KMP Starter Kit — Part 3: Publishing: Your App in the Stores

ProAndroidDev 作者:Mirzamehdi Karimov 發布:09-14 04:48

Koko,KMP Starter Kit — 第 3 部分:將你的 App 發佈到商店

發佈其實多半只是檢查清單,而套件已把這份清單做成腳本。

重點摘要

先確認商店帳號、App ID、設定與隱私頁面等必要項目。
完成簽章、圖示、截圖與商店素材,符合 Google Play 與 App Store 要求。
透過 GitHub 標籤與 Actions,自動建置、簽署並上傳發佈版本。
展開詳細摘要

本文是 KMP Starter Kit 系列第三篇,說明如何將已完成的 App 準備上架到 Google Play 與 App Store,並可透過 GitHub 在沒有 Mac 的情況下發佈。作者把發佈流程視為一份檢查清單,套件提供腳本來檢查隱私權政策、聯絡信箱、AI 金鑰、設定值、簽章、圖示與截圖等常見項目。文章也整理了兩大商店所需的帳號、不可變更的 App ID、Android keystore、iOS 簽章與 fastlane match 的設定方式,以及各平台要求的商店資訊。最後說明以 git tag 觸發 GitHub Actions 自動建置與上傳,並提醒 Google 登入 fingerprint 與審核退件等常見問題。

23

On-Device AI Series (Part 5): LiteRT-LM

ProAndroidDev 作者:Oğuzhan Aslan 發布:09-14 05:59

On-Device AI 系列(第 5 篇):LiteRT-LM

LiteRT-LM 移除了在裝置上執行 LLM 時最棘手的部分——KV cache 管理、token 串流與後端選擇——但它並沒有把你的工作拿走,只是把工作位置移了過去。

重點摘要

Engine 負責模型與後端,Session 負責對話狀態,且可快速重建。
maxNumTokens 是輸入與輸出的總 token 預算,不是單純的輸出上限。
系統提示、工具呼叫、多模態輸入與 thinking mode 都要依模型格式手動組裝。
展開詳細摘要

本文介紹 LiteRT-LM 在裝置端執行 LLM 的定位與用法,特別適合多輪對話、串流輸出,以及依裝置明確選擇 CPU 或 GPU。作者對比雲端 API,說明其優勢是離線、隱私與免網路依賴,但代價是開發者必須自行處理 sampling、token 預算與提示格式。文中進一步解釋 Engine/Session 的設計、提示一個原生函式庫衝突可能導致 SIGSEGV 的打包陷阱,並展示串流生成、系統提示、工具呼叫、多模態輸入與 thinking mode 的實作方式,最後也整理了 CPU/GPU 基準測試、常見反模式與開發者友善度評分。

24

Features You Waited For So Long in Kotlin

ProAndroidDev 作者:Andrii Dubovyk 發布:09-14 06:32

Kotlin 中你等了很久的功能

Kotlin 2.4.20 讓集合更有主張,而 2.2 的編譯器終於學會讀空氣

重點摘要

allDistinctBy 與 allEqualBy 讓集合檢查更直接。
Context-sensitive resolution 可減少 when 表達式的重複限定。
兩者都仍屬實驗性功能,正式使用前需謹慎評估。
展開詳細摘要

Kotlin 2.4.20 新增 allDistinctBy 與 allEqualBy,讓原本需要先映射、去重再比大小的集合檢查,能以更直接的方式表達。這些 API 支援 Iterable、Sequence 與陣列,採用結構相等判斷,目前仍屬實驗性。文章也介紹 Kotlin 2.2 實驗導入的 context-sensitive resolution,編譯器可在 when 中依上下文推斷 enum 或 sealed 類型成員,省去型別限定詞。不過它仍可能產生歧義,適合在可接受實驗功能的專案中嘗試。