📝 Top story: JDK 27 brings measured gains in HashMap, cryptography, and vectorization; avoid shared-JVM GC noise in tail-latency tests.
🔧 Performance: R8, WebP, and AGP 9+ are positioned to improve Play visibility, while Muffle cuts battery use with geofences and local-first logic.
🏗 Architecture: KMP, Compose Multiplatform, modularization, and Clean Architecture keep spreading, with free/full builds and build rules maturing.
✅ Testing: CI drift, Compose rendering via agents, BiometricPrompt flows, and coroutine failure questions all stress reproducibility and depth.
🚀 Language: Kotlin 2.4 and broader KMP code sharing keep growing, shifting attention from syntax familiarity to real-system collaboration.
01
Java Weekly, Issue 666
Baeldung作者:baeldung發布:10-02 12:07
Java Weekly, Issue 666
JDK 27 brings performance goodness across the board.
重點摘要
JDK 27 shows measured gains in HashMap operations, cryptography, and vectorization.
Running a workload generator in the same JVM as the system under test can distort tail-latency measurements.
The issue also rounds up new posts, webinars, and release notes across Java and the Kotlin ecosystem.
展開詳細摘要
This issue of Java Weekly spotlights performance updates in JDK 27, including measured improvements in HashMap operations, cryptography, and vectorization. It also warns that placing a workload generator in the same JVM as the system under test can pause request scheduling during garbage collection and skew tail-latency results. Beyond the lead items, the newsletter collects recent reads, webinars, and release notes spanning Spring, Quarkus, Micronaut, Kotlin, and related Java ecosystem topics.
From Idea to Google Play: The Challenges of My First KMP App
The story behind an exam prep app built with Kotlin Multiplatform and Compose Multiplatform
重點摘要
Started with a free exam-prep app for the Leben in Deutschland test.
Split premium features into separate modules and free/full builds.
Learned KMP, CI, dependency management, testing, and release workflows along the way.
展開詳細摘要
This article recounts how the author built Leben in DE: Einbürgerungstest, a free Android app for preparing for Germany’s Leben in Deutschland test, using Kotlin Multiplatform and Compose Multiplatform. The project began as a way to learn KMP by shipping a real consumer app, then evolved after the MVP when the original plan for a paid tier was reconsidered. The author explains why a simple feature flag was not enough, how sign-in, sync, and payments were moved into separate modules and build flavors, and what was learned about sharing code, wrapping third-party libraries, setting up CI, handling secrets, testing releases, and planning for platform-specific work.
这篇文章讲述作者如何使用 Kotlin Multiplatform 和 Compose Multiplatform 开发 Leben in DE: Einbürgerungstest,一款用于准备德国 Leben in Deutschland 测试的免费 Android App。作者最初希望通过交付一个真实产品来学习 KMP,随后在完成 MVP 后重新评估付费方案,决定先以完全免费形式发布。文中详细说明了为什么单靠 feature flag 不够、如何把登录、同步和支付拆成独立模块并提供 free/full 两种构建,以及他在共享代码、封装第三方库、CI 自动化、密钥管理、测试和平台差异处理方面得到的经验。
這篇文章記錄作者如何用 Kotlin Multiplatform 與 Compose Multiplatform 開發 Leben in DE: Einbürgerungstest,一款用來準備德國 Leben in Deutschland 測驗的免費 Android App。原本他是想透過實作一個真實產品來學習 KMP,之後在完成 MVP 後重新評估付費方案,決定先免費上線。文章說明了為何單靠 feature flag 不夠、如何把登入、同步與付款拆成獨立模組並建立 free/full 兩種 build,並整理他在共用程式碼、第三方函式庫包裝、CI、自動化測試、密鑰管理與平台差異處理上的實戰心得。
How I Structured My First KMP App: Modules, Layers, and Source Sets
Most of my app lives in commonMain, and each platform only adds the few things it can do on its own.
重點摘要
composeApp is the main module; libs holds shared feature modules and build-logic centralizes Gradle setup.
Inside composeApp, the code is organized with horizontal slicing across presentation, domain, and data layers.
commonMain carries most shared code, while expect/actual handles platform-specific behavior such as in-app review.
展開詳細摘要
This article explains how the author organized a first Kotlin Multiplatform app for Google Play. The project is split into Gradle modules: composeApp as the main app, iosApp as the Xcode launcher, several library modules under libs, and shared build logic. Inside composeApp, the code uses Clean Architecture with presentation, domain, and data layers, and the app follows horizontal slicing because multiple features share the same questions and progress data. The article also describes KMP source sets, with most logic in commonMain and platform-specific code in androidMain and iosMain. It ends by showing how expect/actual is used for platform-only behavior such as in-app review, while keeping shared code testable with Koin and Robolectric.
How I Built Free and Full Build Flavors for Android in My KMP Codebase
A free app should contain only what it uses.
重點摘要
Android product flavors separate free and full builds from one KMP codebase.
The full flavor includes auth, sync, payments, and billing; the free flavor leaves them out.
Shared code depends on interfaces, while flavor-specific modules provide real or no-op implementations.
展開詳細摘要
This article explains how the author uses Android product flavors in a Kotlin Multiplatform codebase to build two app variants from one shared project: a free version with only core features and a full version with sign-in, sync, and payments. The free build excludes the auth and payment modules, along with their SDKs and billing permission, while the full build includes them through flavor-specific dependencies. Shared code talks only to interfaces defined in a domain-api module, and each flavor supplies its own implementation at startup via separate source sets. The article also describes a CI check that verifies paid SDKs do not leak into the free release classpath.
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
A Coding Agent Added Jetpack Compose Support to My Android Renderer MCP. I Wouldn't Have Started This Task Myself.
I handed that research problem to a coding agent.
重點摘要
Android UI Renderer MCP can render UI without an emulator or device and return both PNG and structure.
The new `render_compose` tool builds typed Kotlin calls from JSON and runs a temporary Compose probe via Gradle/Robolectric.
The implementation hit two issues: semantics-tree serialization and a Gradle repositories policy in the demo project.
展開詳細摘要
Android UI Renderer MCP already supported classic Android UI, but Jetpack Compose required a different approach because there is no layout file to inflate. The author set a constraint that the project should not need a special renderer entry point, then asked a coding agent to solve it. The agent built `render_compose`, which parses a top-level composable signature, converts JSON into typed Kotlin values, generates a temporary probe, and renders Compose output to PNG plus a semantics tree. It also fixed two follow-up problems: missing class names in semantics serialization and a Gradle repositoriesMode issue in the demo project. The result is support for both XML/View and Jetpack Compose, with the author emphasizing the shift from researching the problem personally to specifying the desired outcome and constraints.
Android Modularization Part 11: CI/CD & Build Failures You Cannot Reproduce
Medium Kotlin作者:Ramadan Sayed發布:10-02 09:26
Android Modularization Part 11: CI/CD and Build Failures You Cannot Reproduce
Passes on every developer machine. Fails on CI.
重點摘要
Build works locally but fails in CI
The failure appears tied to changes nobody touched
Focuses on CI/CD-related build issues in Android modularization
展開詳細摘要
This article highlights a common Android modularization pain point: a build that passes on every developer machine but fails in CI with an error seemingly unrelated to recent changes. The premise points to reproducible differences between local environments and automated pipelines, especially in CI/CD workflows. It frames the problem as one of hard-to-reproduce build failures rather than a confirmed root cause, and the article itself is only partially available from the provided text.
Android 模块化第 11 部分:无法复现的 CI/CD 与构建失败
在每位开发者的机器上都能通过,却在 CI 上失败。
重點摘要
本地构建正常,但 CI 构建失败
错误看起来与没人改动的内容有关
聚焦 Android 模块化中的 CI/CD 构建问题
展開詳細摘要
本文描述了 Android 模块化中常见的棘手问题:在每位开发者机器上都能通过的构建,到了 CI 却失败,而且报错看起来与最近的修改无关。这说明本地环境与自动化流水线之间可能存在差异,尤其是在 CI/CD 流程里更容易出现难以复现的构建故障。根据目前提供的文本,文章重点是这种问题现象本身,而不是已经确认的根因,且原文仅给出了部分摘要。
Android 模組化第 11 部分:無法重現的 CI/CD 與建置失敗
在每位開發者的電腦上都能通過,卻在 CI 上失敗。
重點摘要
本機建置正常,但 CI 建置失敗
錯誤看起來與沒人動過的內容有關
聚焦 Android 模組化中的 CI/CD 建置問題
展開詳細摘要
本文指出 Android 模組化常見的棘手情境:在每位開發者的電腦上都能通過的建置,到了 CI 卻失敗,而且錯誤看起來與最近修改無關。這反映出本機環境與自動化流程之間的差異,尤其是在 CI/CD 管線中更容易出現難以重現的建置問題。依據提供的文字,文章重點在於問題現象本身,而非已確認的根因,原文內容也僅顯示部分摘要。
Senior Android interview questions: the 5 follow-ups that decide the loop
Medium Kotlin作者:Mike Salari發布:10-02 09:37
Senior Android Interview Questions: The 5 Follow-Ups That Decide the Loop
I have run 500+ technical interviews. Your first answer rarely decides a senior Android loop. The next question does.
重點摘要
The first answer is usually not what decides a senior Android interview loop.
Follow-up questions are what reveal the real depth of a candidate’s knowledge.
The author draws on experience from more than 500 technical interviews.
展開詳細摘要
The article argues that in senior Android interviews, the first answer is often not the deciding factor. Instead, the follow-up questions determine whether a candidate truly demonstrates depth, clarity, and practical understanding. Drawing on experience from more than 500 technical interviews, the author emphasizes that interviewers should pay close attention to what comes next, because that is where senior-level thinking is most visible.
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 in 2026: My Team Tried to Replace Native Android, and Here’s Where We Stopped
KMP sharing layer, the result of Kotlin 2.4 and a year of KMP code sharing experience.
重點摘要
A KMP sharing layer was built as part of the effort.
The result reflects Kotlin 2.4 and a year of code-sharing experience.
The source text is only a brief Medium excerpt, not the full article.
展開詳細摘要
The provided text is only a short excerpt from a Medium article about Kotlin Multiplatform in 2026. It says the team built a KMP sharing layer and frames it as the result of Kotlin 2.4 plus a year of KMP code-sharing experience. Because the full article content is not included, no further conclusions can be drawn about the team’s migration scope, outcomes, or whether native Android was actually replaced.
I Ran My Android Compose UI on iOS, Desktop, and the Browser.
Medium Kotlin作者:AndroidLab by Andre發布:10-02 11:59
I Ran My Android Compose UI on iOS, Desktop, and the Browser
What Compose Multiplatform gets right, where it still falls short, and whether Android developers should bet on it.
重點摘要
Evaluates Compose Multiplatform across iOS, desktop, and browser targets.
Notes both its strengths and the areas where it still falls short.
Frames the question of whether Android developers should adopt it.
展開詳細摘要
The article examines Compose Multiplatform through the lens of running an Android Compose UI on iOS, desktop, and the browser. It focuses on what the technology does well, where it still falls short, and whether it is a worthwhile bet for Android developers. The piece is positioned as a practical assessment rather than a feature announcement, and it underscores that the question is not just whether Compose can reach multiple platforms, but whether it is ready enough to rely on in real development work.
I Plugged Claude Into Android Studio Through AWS Bedrock, With a 1-Day Local Proxy
Medium Kotlin作者:Pierrick CAEN發布:10-02 13:15
I Connected Claude to Android Studio via AWS Bedrock Using a One-Day Local Proxy
No API key, no new vendor contract: just a small Kotlin server pretending to be a Local LLM.
重點摘要
Uses AWS Bedrock to route Claude into Android Studio
Relies on a small Kotlin local proxy server
Avoids a new API key and vendor contract
展開詳細摘要
The article describes a one-day experiment that connects Claude to Android Studio through AWS Bedrock by inserting a small local Kotlin proxy. The setup is designed to look like a Local LLM, allowing Android Studio to talk to it without requiring a new API key or a new vendor contract. The piece frames the approach as a lightweight workaround rather than a formal product integration, and the key idea is the proxy layer that bridges the IDE and Bedrock-backed model.
我通过 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 密钥或新的供应商合同。文章强调的是这种轻量的桥接方案,而不是正式的产品级集成。
我透過 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 金鑰或簽訂新的供應商合約。文章重點在於這層輕量的橋接做法,而非正式產品整合。
Maximiser les performances d’une application Android avec R8, WebP et AGP 9+ pour booster sa…
Medium Kotlin作者:Seti Afanou發布:10-02 14:26
Why Technical Quality Directly Affects an Android App’s ASO on Google Play
Why does the technical quality of an app directly impact its ASO on Google Play?
重點摘要
The article links app technical quality to Google Play ASO.
The title references R8, WebP, and AGP 9+ as performance-related topics.
The provided body is only a short teaser and does not include the full article.
展開詳細摘要
This post’s teaser asks why the technical quality of an Android app directly affects its ASO on Google Play. The title suggests a focus on improving app performance with R8, WebP, and AGP 9+, but the provided content does not include the full article. As a result, only the central theme can be stated with confidence: technical implementation details may influence store visibility and app presentation, but the excerpt itself does not provide the specific arguments, recommendations, or results discussed in the complete piece.
使用 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+ 讨论如何通过性能与打包层面的优化提升应用表现。但目前提供的只有简短引言,没有完整正文,因此只能确认文章主旨,无法得出其中具体的分析、建议或结论。
使用 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+ 為例,討論如何透過效能與打包相關最佳化提升應用表現。不過,所提供的內容只有短短的前導句,沒有完整文章,因此只能確定主題方向,無法進一步確認文中的具體論點、做法或結論。
Architecting a Battery-Efficient Geofencing Engine for Android Background Services
Dev.to Kotlin作者:Haseeb發布:10-02 01:27
Architecting a Battery-Efficient Geofencing Engine for Android Background Services
The challenge with geofencing on Android is the inherent tension between accuracy and power consumption.
重點摘要
Uses GeofencingClient with PendingIntent instead of a polling background service
Stores routine priority locally in Room and resolves AudioManager state on each transition
Accounts for battery optimizations, DND access, and OEM background restrictions
展開詳細摘要
The article describes how Muffle was built as an offline-first Android app that automates silent/vibrate behavior using geofencing while minimizing battery drain. Instead of polling, it relies on GeofencingClient, PendingIntent, and a local Room-based priority stack to react to ENTER and EXIT events. The author also covers real-world Android constraints, including aggressive OEM battery optimization, the need for REQUEST_IGNORE_BATTERY_OPTIMIZATIONS, and the interaction between AudioManager and Do Not Disturb access. Finally, the piece argues for transparent feedback, local logic, and a possible future hybrid approach that combines geofencing with activity recognition.
Reclaiming Attention: Building a Distraction-Free Android Launcher
Dev.to Kotlin作者:A Akhil發布:10-02 05:19
Reclaiming Attention: Building a Distraction-Free Android Launcher
I recently open-sourced Minimalist-Focus-Launcher, a custom Android launcher designed specifically for digital wellness.
重點摘要
Replaces app icons with a text-only list to reduce impulse tapping.
Uses a pure black OLED-friendly background for a stark, utilitarian look.
Integrates tasks and app locks directly into the home screen.
展開詳細摘要
The author reflects on how a cluttered, notification-heavy home screen undermined personal focus, then introduces Minimalist-Focus-Launcher, an open-source Android launcher built for digital wellness. Its design removes colorful app icons in favor of a text-only interface, aiming to reduce mindless app opening. A pure black background reinforces a simple, tool-like aesthetic and is also OLED-friendly. The launcher further combines task management and app locks on the home screen to create a more intentional, self-contained productivity hub. The project is implemented in Kotlin and uses Jetpack Compose for the UI, with Compose’s declarative approach simplifying real-time state handling for app filtering and task integration.
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
Growing a Slice Without a Framework
For many years I rolled out full Clean Architecture on day one, on every project, whether the feature needed it or not.
重點摘要
The author used to apply full Clean Architecture from the start on every project.
This approach was used even when the feature did not really need it.
The article introduces a move from deep modules toward a slice-by-slice approach.
展開詳細摘要
The article opens with the author reflecting on a long-standing habit: applying full Clean Architecture from the first day of every project, regardless of whether the feature actually needed that level of structure. It frames the piece as a discussion of moving from deep modules toward Clean Architecture through incremental, forced changes, rather than introducing everything upfront. The excerpt does not provide implementation details or results, but it clearly signals a pragmatic shift away from overengineering and toward evolving architecture one slice at a time.
Modular Jetpack Compose: Don’t Leave Your Architecture to Code Review
ProAndroidDev作者:Kanan Yusubov發布:10-02 04:56
Modular Jetpack Compose: Don’t Leave Your Architecture to Code Review
This article takes six rules a modular Compose app usually lives by, and moves each one out of the README and into the build.
重點摘要
Enforce module boundaries in Gradle instead of relying on README rules.
Use Kotlin internal, private routes, Koin compile-time checks, and sealed types to make violations fail early.
Add a source-level doctor check and generation tools so the right wiring is the easiest path.
展開詳細摘要
The article argues that a modular Jetpack Compose architecture should be enforced by the build, not by code review or documentation alone. It describes a capability split into api and impl modules, with app as the only composition root allowed to depend on implementations. Gradle checks block illegal module dependencies, Kotlin internal keeps impl details private, navigation routes stay internal, Koin’s compiler plugin validates DI, sealed types model failures exhaustively, and a source check verifies that every feature and route is registered. Where enforcement is not possible, the author recommends tooling that makes the correct setup the easiest one.
Kotlin Coroutines Interview Questions That Test Depth
Medium Kotlin作者:Techhub Asia發布:10-02 03:55
Kotlin Coroutines Interview Questions That Test Depth
Most Kotlin candidates can say “coroutines” on a resume. Far fewer can explain what happens when one fails halfway through.
重點摘要
Focuses on interview questions about coroutine depth
Highlights failure handling when a coroutine breaks midway
Draws attention to understanding beyond résumé keywords
展開詳細摘要
The article frames Kotlin coroutines as a topic that many candidates can mention, but fewer can explain in depth. It points to failure scenarios as a useful way to test real understanding, especially what happens when a coroutine fails halfway through. Rather than treating coroutines as a résumé keyword, the piece emphasizes probing whether a candidate can reason about their behavior under failure and other nontrivial conditions.
Biometric Authentication in Android with BiometricPrompt (Kotlin)
Medium Kotlin作者:Pranjal Vyas發布:10-02 04:38
Biometric Authentication on Android with BiometricPrompt (Kotlin)
Use the AndroidX Biometric library to check availability, show BiometricPrompt, handle callbacks, fall back to device credentials, and more.
重點摘要
Checks biometric availability with AndroidX Biometric
Uses BiometricPrompt to present authentication
Falls back to device credentials when needed
展開詳細摘要
This article outlines how to implement biometric authentication in Android using the AndroidX Biometric library and BiometricPrompt. It describes checking whether biometrics are available, displaying the prompt, handling authentication callbacks, and falling back to device credentials when biometric authentication is not available or not suitable. The piece is presented as a practical Kotlin-focused guide for integrating these Android authentication flows.