<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
  <channel>
    <title>Android Weekly</title>
    <description>Android Weekly is a free newsletter that helps you to stay cutting-edge with your Android Development</description>
    <link>https://androidweekly.net/</link>
    <item>
  <title>Android Weekly Issue #735</title>
  <link>https://androidweekly.net/issues/issue-735</link>
  <description><![CDATA[<table width="100%" cellpadding="0" cellspacing="0" border="0" class="galileo-ap-layout-editor" style="min-width: 100%;"><tbody><tr><td class="editor-col OneColumnMobile" width="100%" align="" valign="top" style="background-color: rgb(51, 181, 229);" bgcolor="33B5E5"><div class="gl-contains-text"><table width="100%" style="min-width: 100%;" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="editor-text editor-text" align="left" valign="top" style="font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 14px; color: #505050; text-align: left; display: block; word-wrap: break-word; line-height: 1.2; padding: 10px 20px;"><div></div><div class="text-container galileo-ap-content-editor"><div><div><span style="font-size: 18px; color: rgb(255, 255, 255); font-family: Arial, Verdana, Helvetica, sans-serif; font-weight: bold;">Articles & Tutorials</span></div></div></div></td></tr></tbody></table></div></td></tr></tbody></table>
<table width="100%" cellpadding="0" cellspacing="0" border="0" class="galileo-ap-layout-editor" style="min-width: 100%;"><tbody><tr><td class="editor-col OneColumnMobile" width="20%" align="" valign="top"><div><div class="column-resize-bar"><span class="line"></span><span class="grabber"></span></div></div>
<div class="gl-contains-text"><table width="100%" style="min-width: 100%;" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="editor-text" align="left" valign="top" style="font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 14px; color: #505050; text-align: left; display: block; word-wrap: break-word; line-height: 1.2; padding: 10px 10px 10px 20px;"><div class="text-container galileo-ap-content-editor"><div><div><span style="font-size: 12px; color: rgb(153, 153, 153); font-style: italic;">Sponsored</span></div></div></div></td></tr></tbody></table></div>
<div class="gl-contains-image"><table class="editor-image  editor-image-vspace-on editor-image-hspace-on" style="min-width: 100%;" width="100%" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td align="left" valign="top" style="padding: 10px 10px 10px 20px;"><div class="publish-container">
<a href="https://bitdrift.io/signup?utm_campaign=sp&utm_medium=newsletter&utm_source=android-weekly" target="_blank">
<img alt class="" style="display: block; height: auto !important; max-width: 100% !important;" width="90" border="0" hspace="0" vspace="0" src="https://androidweekly.net/system/images/6a539b/033c93bc540e01ae72/square_Unbetitelt.jpeg">
</a></div></td></tr></tbody></table></div></td><td class="editor-col OneColumnMobile" width="80%" align="" valign="top"><div class="gl-contains-text"><table width="100%" style="min-width: 100%;" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="editor-text editor-text" align="left" valign="top" style="line-height: 1.5; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 14px; color: #505050; text-align: left; display: block; word-wrap: break-word; padding: 10px 20px 10px 10px;"><div></div><div class="text-container galileo-ap-content-editor"><div><div>
<a href="https://bitdrift.io/signup?utm_campaign=sp&utm_medium=newsletter&utm_source=android-weekly" target="_blank" style="font-size: 16px; color: #007EA8; font-weight: bold; font-style: normal; text-decoration: underline;">
Mobile observability shouldn't suck
</a></div><div>Mobile reflects reality, and it’s messy: Intermittent connections, mid-onboarding drop-offs, force quits, and more. bitdrift captures 100% of real-time data, unsampled across 1B+ installs, so you and your agents can query reality. Try bitdrift: mobile observability for the real world.

</div></div></div></td></tr></tbody></table></div></td></tr></tbody></table>
<table width="100%" cellpadding="0" cellspacing="0" border="0" class="galileo-ap-layout-editor" style="min-width: 100%;"><tbody><tr><td class="editor-col OneColumnMobile" width="100%" align="" valign="top"><div class="gl-contains-spacer"><table class="editor-spacer" width="100%" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="" align="center" valign="top"><table cellpadding="0" cellspacing="0" border="0" width="100%"><tbody><tr><td class="spacer-base" width="100%" align="center" valign="top" style="padding-bottom: 15px; height: 1px; line-height: 1px;"><div><img alt width="5" height="1" border="0" hspace="0" vspace="0" src="https://imgssl.constantcontact.com/letters/images/1101116784221/S.gif" style="display: block; height: 1px; width: 5px;"></div></td></tr></tbody></table></td></tr></tbody></table></div></td></tr></tbody></table><table width="100%" cellpadding="0" cellspacing="0" border="0" class="galileo-ap-layout-editor" style="min-width: 100%;"><tbody><tr><td class="content editor-col OneColumnMobile" width="100%" align="left" valign="top"><div class="gl-contains-text"><table width="100%" style="min-width: 100%;" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="editor-text content-text" align="left" valign="top" style="line-height: 1.5; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 14px; color: #505050; text-align: left; display: block; word-wrap: break-word; padding: 10px 20px;"><div></div><div class="text-container galileo-ap-content-editor"><div><div>
<a href="https://victorbrandalise.com/navigation-3-in-jetpack-compose-the-back-stack-is-just-state/" target="_blank" style="font-size: 16px; color: #007EA8; font-weight: bold; font-style: normal; text-decoration: underline;">
Navigation 3 in Jetpack Compose: The Back Stack Is Just State 
<span class="main-url" style="color: #333333; font-size: 10px;">
</span>
</a></div><div>Victor Brandalise explores Navigation 3's Compose-first model, where the back stack becomes plain app state you own.
</div></div></div></td></tr></tbody></table></div></td></tr></tbody></table>
<table width="100%" cellpadding="0" cellspacing="0" border="0" class="galileo-ap-layout-editor" style="min-width: 100%;"><tbody><tr><td class="content editor-col OneColumnMobile" width="100%" align="left" valign="top"><div class="gl-contains-text"><table width="100%" style="min-width: 100%;" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="editor-text content-text" align="left" valign="top" style="line-height: 1.5; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 14px; color: #505050; text-align: left; display: block; word-wrap: break-word; padding: 10px 20px;"><div></div><div class="text-container galileo-ap-content-editor"><div><div>
<a href="https://medium.com/@kmpbits/the-same-system-advanced-expect-actual-in-kmp-kmp-bits-353f3a592f39" target="_blank" style="font-size: 16px; color: #007EA8; font-weight: bold; font-style: normal; text-decoration: underline;">
The Same System: Advanced expect/actual in KMP 
<span class="main-url" style="color: #333333; font-size: 10px;">
</span>
</a></div><div>KMP Bits explores advanced expect/actual usage in KMP, covering classes, constructors, typealiases, and compiler rules.
</div></div></div></td></tr></tbody></table></div></td></tr></tbody></table>
<table width="100%" cellpadding="0" cellspacing="0" border="0" class="galileo-ap-layout-editor" style="min-width: 100%;"><tbody><tr><td class="editor-col OneColumnMobile" width="20%" align="" valign="top"><div><div class="column-resize-bar"><span class="line"></span><span class="grabber"></span></div></div>
<div class="gl-contains-text"><table width="100%" style="min-width: 100%;" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="editor-text" align="left" valign="top" style="font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 14px; color: #505050; text-align: left; display: block; word-wrap: break-word; line-height: 1.2; padding: 10px 10px 10px 20px;"><div class="text-container galileo-ap-content-editor"><div><div><span style="font-size: 12px; color: rgb(153, 153, 153); font-style: italic;">Sponsored</span></div></div></div></td></tr></tbody></table></div>
<div class="gl-contains-image"><table class="editor-image  editor-image-vspace-on editor-image-hspace-on" style="min-width: 100%;" width="100%" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td align="left" valign="top" style="padding: 10px 10px 10px 20px;"><div class="publish-container">
<a href="https://www.runway.team/whitepapers/2026-decision-guide-modern-mrm-for-em?utm_source=androidweekly&utm_medium=newsletter&utm_campaign=july-12-26" target="_blank">
<img alt class="" style="display: block; height: auto !important; max-width: 100% !important;" width="90" border="0" hspace="0" vspace="0" src="https://androidweekly.net/system/images/6a539b/443c93bc540e01aeb6/square_square_runway.jpeg">
</a></div></td></tr></tbody></table></div></td><td class="editor-col OneColumnMobile" width="80%" align="" valign="top"><div class="gl-contains-text"><table width="100%" style="min-width: 100%;" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="editor-text editor-text" align="left" valign="top" style="line-height: 1.5; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 14px; color: #505050; text-align: left; display: block; word-wrap: break-word; padding: 10px 20px 10px 10px;"><div></div><div class="text-container galileo-ap-content-editor"><div><div>
<a href="https://www.runway.team/whitepapers/2026-decision-guide-modern-mrm-for-em?utm_source=androidweekly&utm_medium=newsletter&utm_campaign=july-12-26" target="_blank" style="font-size: 16px; color: #007EA8; font-weight: bold; font-style: normal; text-decoration: underline;">
What’s your mobile release maturity score?
</a></div><div>42% of mobile releases slip off their planned timeline, and no EM can tell if that puts them ahead of the curve or behind it. The 2026 Decision Guide scores your team across 5 decisions, then names your single next move on the maturity curve. Built on data from 300 mobile EMs. Find your score, free.
</div></div></div></td></tr></tbody></table></div></td></tr></tbody></table>
<table width="100%" cellpadding="0" cellspacing="0" border="0" class="galileo-ap-layout-editor" style="min-width: 100%;"><tbody><tr><td class="editor-col OneColumnMobile" width="100%" align="" valign="top"><div class="gl-contains-spacer"><table class="editor-spacer" width="100%" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="" align="center" valign="top"><table cellpadding="0" cellspacing="0" border="0" width="100%"><tbody><tr><td class="spacer-base" width="100%" align="center" valign="top" style="padding-bottom: 15px; height: 1px; line-height: 1px;"><div><img alt width="5" height="1" border="0" hspace="0" vspace="0" src="https://imgssl.constantcontact.com/letters/images/1101116784221/S.gif" style="display: block; height: 1px; width: 5px;"></div></td></tr></tbody></table></td></tr></tbody></table></div></td></tr></tbody></table><table width="100%" cellpadding="0" cellspacing="0" border="0" class="galileo-ap-layout-editor" style="min-width: 100%;"><tbody><tr><td class="content editor-col OneColumnMobile" width="100%" align="left" valign="top"><div class="gl-contains-text"><table width="100%" style="min-width: 100%;" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="editor-text content-text" align="left" valign="top" style="line-height: 1.5; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 14px; color: #505050; text-align: left; display: block; word-wrap: break-word; padding: 10px 20px;"><div></div><div class="text-container galileo-ap-content-editor"><div><div>
<a href="https://www.reddit.com/r/RedditEng/comments/1urq7f6/how_we_rewrote_reddits_video_player_on_android/" target="_blank" style="font-size: 16px; color: #007EA8; font-weight: bold; font-style: normal; text-decoration: underline;">
How we rewrote Reddit's video player on Android 
<span class="main-url" style="color: #333333; font-size: 10px;">
</span>
</a></div><div>Alexey Bykov explains how Reddit rebuilt its ExoPlayer abstraction for a simpler API and better playback performance.
</div></div></div></td></tr></tbody></table></div></td></tr></tbody></table>
<table width="100%" cellpadding="0" cellspacing="0" border="0" class="galileo-ap-layout-editor" style="min-width: 100%;"><tbody><tr><td class="content editor-col OneColumnMobile" width="100%" align="left" valign="top"><div class="gl-contains-text"><table width="100%" style="min-width: 100%;" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="editor-text content-text" align="left" valign="top" style="line-height: 1.5; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 14px; color: #505050; text-align: left; display: block; word-wrap: break-word; padding: 10px 20px;"><div></div><div class="text-container galileo-ap-content-editor"><div><div>
<a href="https://joebirch.co/android/practical-kotlin-multiplatform-setting-up-the-kotlin-multiplatform-networking-module-with-ktor/" target="_blank" style="font-size: 16px; color: #007EA8; font-weight: bold; font-style: normal; text-decoration: underline;">
Practical Kotlin Multiplatform: Setting up the Kotlin Multiplatform Networking Module with Ktor
<span class="main-url" style="color: #333333; font-size: 10px;">
</span>
</a></div><div>Joe Birch walks through setting up a shared Kotlin Multiplatform networking module with Ktor.
</div></div></div></td></tr></tbody></table></div></td></tr></tbody></table>
<table width="100%" cellpadding="0" cellspacing="0" border="0" class="galileo-ap-layout-editor" style="min-width: 100%;"><tbody><tr><td class="content editor-col OneColumnMobile" width="100%" align="left" valign="top"><div class="gl-contains-text"><table width="100%" style="min-width: 100%;" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="editor-text content-text" align="left" valign="top" style="line-height: 1.5; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 14px; color: #505050; text-align: left; display: block; word-wrap: break-word; padding: 10px 20px;"><div></div><div class="text-container galileo-ap-content-editor"><div><div>
<a href="https://medium.com/@l2hyunwoo/mirage-cloudy-grows-from-a-blur-library-into-a-graphics-effect-library-3b8eaf9cc7ca" target="_blank" style="font-size: 16px; color: #007EA8; font-weight: bold; font-style: normal; text-decoration: underline;">
Mirage: Cloudy Grows from a Blur Library into a Graphics Effect Library
<span class="main-url" style="color: #333333; font-size: 10px;">
</span>
</a></div><div>HyunWoo Lee explores Mirage, which grows the Cloudy blur library into a cross-platform shader effect toolkit for Compose.
</div></div></div></td></tr></tbody></table></div></td></tr></tbody></table>
<table width="100%" cellpadding="0" cellspacing="0" border="0" class="galileo-ap-layout-editor" style="min-width: 100%;"><tbody><tr><td class="content editor-col OneColumnMobile" width="100%" align="left" valign="top"><div class="gl-contains-text"><table width="100%" style="min-width: 100%;" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="editor-text content-text" align="left" valign="top" style="line-height: 1.5; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 14px; color: #505050; text-align: left; display: block; word-wrap: break-word; padding: 10px 20px;"><div></div><div class="text-container galileo-ap-content-editor"><div><div>
<a href="https://blog.shreyaspatil.dev/inside-subcomposelayout-jetpack-composes-most-misunderstood-api/" target="_blank" style="font-size: 16px; color: #007EA8; font-weight: bold; font-style: normal; text-decoration: underline;">
Inside SubcomposeLayout: Jetpack Compose's Most Misunderstood API
<span class="main-url" style="color: #333333; font-size: 10px;">
</span>
</a></div><div>Shreyas Patil digs into how SubcomposeLayout works under the hood, why it's expensive, and when to reach for it.
</div></div></div></td></tr></tbody></table></div></td></tr></tbody></table>
<table width="100%" cellpadding="0" cellspacing="0" border="0" class="galileo-ap-layout-editor" style="min-width: 100%;"><tbody><tr><td class="content editor-col OneColumnMobile" width="100%" align="left" valign="top"><div class="gl-contains-text"><table width="100%" style="min-width: 100%;" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="editor-text content-text" align="left" valign="top" style="line-height: 1.5; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 14px; color: #505050; text-align: left; display: block; word-wrap: break-word; padding: 10px 20px;"><div></div><div class="text-container galileo-ap-content-editor"><div><div>
<a href="https://www.maiatoday.net/p/antigravity-tagspotter-share-data-with-firebase/" target="_blank" style="font-size: 16px; color: #007EA8; font-weight: bold; font-style: normal; text-decoration: underline;">
Antigravity TagSpotter - Share data with Firebase
<span class="main-url" style="color: #333333; font-size: 10px;">
</span>
</a></div><div>Maia Grotepass walks through adding Firebase auth and cloud sync to her Kotlin Multiplatform app with Antigravity.
</div></div></div></td></tr></tbody></table></div></td></tr></tbody></table>
<table width="100%" cellpadding="0" cellspacing="0" border="0" class="galileo-ap-layout-editor" style="min-width: 100%;"><tbody><tr><td class="content editor-col OneColumnMobile" width="100%" align="left" valign="top"><div class="gl-contains-text"><table width="100%" style="min-width: 100%;" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="editor-text content-text" align="left" valign="top" style="line-height: 1.5; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 14px; color: #505050; text-align: left; display: block; word-wrap: break-word; padding: 10px 20px;"><div></div><div class="text-container galileo-ap-content-editor"><div><div>
<a href="https://androidengineers.substack.com/p/the-complete-guide-to-android-bench" target="_blank" style="font-size: 16px; color: #007EA8; font-weight: bold; font-style: normal; text-decoration: underline;">
Choose the Right AI Coding Assistant for Android Development
<span class="main-url" style="color: #333333; font-size: 10px;">
</span>
</a></div><div>Akshay Nandwana breaks down Google's Android Bench leaderboard and how to use it when picking an AI coding assistant.
</div></div></div></td></tr></tbody></table></div></td></tr></tbody></table>
<table width="100%" cellpadding="0" cellspacing="0" border="0" class="galileo-ap-layout-editor" style="min-width: 100%;"><tbody><tr><td class="content editor-col OneColumnMobile" width="100%" align="left" valign="top"><div class="gl-contains-text"><table width="100%" style="min-width: 100%;" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="editor-text content-text" align="left" valign="top" style="line-height: 1.5; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 14px; color: #505050; text-align: left; display: block; word-wrap: break-word; padding: 10px 20px;"><div></div><div class="text-container galileo-ap-content-editor"><div><div>
<a href="https://proandroiddev.com/another-way-to-kmp-shared-renderers-0d1b66a733d7" target="_blank" style="font-size: 16px; color: #007EA8; font-weight: bold; font-style: normal; text-decoration: underline;">
Another Way to KMP: Shared Renderers
<span class="main-url" style="color: #333333; font-size: 10px;">
</span>
</a></div><div>Gabor Berenyi shows how a custom 3D renderer can live in shared Kotlin behind a thin graphics façade.
</div></div></div></td></tr></tbody></table></div></td></tr></tbody></table>
<table width="100%" cellpadding="0" cellspacing="0" border="0" class="galileo-ap-layout-editor" style="min-width: 100%;"><tbody><tr><td class="content editor-col OneColumnMobile" width="100%" align="left" valign="top"><div class="gl-contains-text"><table width="100%" style="min-width: 100%;" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="editor-text content-text" align="left" valign="top" style="line-height: 1.5; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 14px; color: #505050; text-align: left; display: block; word-wrap: break-word; padding: 10px 20px;"><div></div><div class="text-container galileo-ap-content-editor"><div><div>
<a href="https://doveletter.dev/articles/a2ui-agent-driven-ui" target="_blank" style="font-size: 16px; color: #007EA8; font-weight: bold; font-style: normal; text-decoration: underline;">
How an AI Agent Builds Android UI It Has Never Seen: A First Look at a2ui
<span class="main-url" style="color: #333333; font-size: 10px;">
</span>
</a></div><div>Jaewoong Eum explores a2ui, an in-progress AndroidX module letting server-side agents build native Android UI.
</div></div></div></td></tr></tbody></table></div></td></tr></tbody></table>
<table width="100%" cellpadding="0" cellspacing="0" border="0" class="galileo-ap-layout-editor" style="min-width: 100%;"><tbody><tr><td class="content editor-col OneColumnMobile" width="100%" align="left" valign="top"><div class="gl-contains-text"><table width="100%" style="min-width: 100%;" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="editor-text content-text" align="left" valign="top" style="line-height: 1.5; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 14px; color: #505050; text-align: left; display: block; word-wrap: break-word; padding: 10px 20px;"><div></div><div class="text-container galileo-ap-content-editor"><div><div>
<a href="https://medium.com/@merrickcr/smaller-slower-wrong-what-aggressive-quantization-costs-on-device-inference-85e7f8f0a170" target="_blank" style="font-size: 16px; color: #007EA8; font-weight: bold; font-style: normal; text-decoration: underline;">
Smaller, Slower, Wrong: What Aggressive Quantization Costs On-Device Inference
<span class="main-url" style="color: #333333; font-size: 10px;">
</span>
</a></div><div>Chris Merrick benchmarks quantized models on a Pixel, showing why the smallest INT4 model ran slower and misclassified images.
</div></div></div></td></tr></tbody></table></div></td></tr></tbody></table>
<table width="100%" cellpadding="0" cellspacing="0" border="0" class="galileo-ap-layout-editor" style="min-width: 100%;"><tbody><tr><td class="content editor-col OneColumnMobile" width="100%" align="left" valign="top"><div class="gl-contains-text"><table width="100%" style="min-width: 100%;" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="editor-text content-text" align="left" valign="top" style="line-height: 1.5; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 14px; color: #505050; text-align: left; display: block; word-wrap: break-word; padding: 10px 20px;"><div></div><div class="text-container galileo-ap-content-editor"><div><div>
<a href="https://medium.com/@vikasacsoni9211/beyond-crash-free-app-the-senior-engineers-guide-to-memory-health-c27d76626247" target="_blank" style="font-size: 16px; color: #007EA8; font-weight: bold; font-style: normal; text-decoration: underline;">
Beyond Crash-Free App: The Senior Engineer's Guide to Memory Health
<span class="main-url" style="color: #333333; font-size: 10px;">
</span>
</a></div><div>Vikas Soni argues crash-free rates hide memory leaks and introduces LeakLens, an IDE plugin for proactive detection.
</div></div></div></td></tr></tbody></table></div></td></tr></tbody></table>
<table width="100%" cellpadding="0" cellspacing="0" border="0" class="galileo-ap-layout-editor" style="min-width: 100%;"><tbody><tr><td class="content editor-col OneColumnMobile" width="100%" align="left" valign="top"><div class="gl-contains-text"><table width="100%" style="min-width: 100%;" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="editor-text content-text" align="left" valign="top" style="line-height: 1.5; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 14px; color: #505050; text-align: left; display: block; word-wrap: break-word; padding: 10px 20px;"><div></div><div class="text-container galileo-ap-content-editor"><div><div>
<a href="https://doveletter.dev/articles/compose-effect-handlers-internals" target="_blank" style="font-size: 16px; color: #007EA8; font-weight: bold; font-style: normal; text-decoration: underline;">
Inside Compose Side Effects: RememberObserver and the Composition Lifecycle
<span class="main-url" style="color: #333333; font-size: 10px;">
</span>
</a></div><div>Jaewoong Eum explores how Compose effect handlers work internally through remember and the RememberObserver lifecycle.
</div></div></div></td></tr></tbody></table></div></td></tr></tbody></table>
<table width="100%" cellpadding="0" cellspacing="0" border="0" class="galileo-ap-layout-editor" style="min-width: 100%;"><tbody><tr><td class="content editor-col OneColumnMobile" width="100%" align="left" valign="top"><div class="gl-contains-text"><table width="100%" style="min-width: 100%;" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="editor-text content-text" align="left" valign="top" style="line-height: 1.5; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 14px; color: #505050; text-align: left; display: block; word-wrap: break-word; padding: 10px 20px;"><div></div><div class="text-container galileo-ap-content-editor"><div><div>
<a href="https://ak1.io/blog/2026/06/23/drawbox-goes-multiplatform/" target="_blank" style="font-size: 16px; color: #007EA8; font-weight: bold; font-style: normal; text-decoration: underline;">
DrawBox Goes Multiplatform 
<span class="main-url" style="color: #333333; font-size: 10px;">
</span>
</a></div><div>Akshay Sharma walks through porting the DrawBox drawing library from Android-only to Compose Multiplatform, including a full MVI rewrite.
</div></div></div></td></tr></tbody></table></div></td></tr></tbody></table>
<table width="100%" cellpadding="0" cellspacing="0" border="0" class="galileo-ap-layout-editor" style="min-width: 100%;"><tbody><tr><td class="editor-col OneColumnMobile" width="100%" align="" valign="top" style="background-color: rgb(51, 181, 229);" bgcolor="33B5E5"><div class="gl-contains-text"><table width="100%" style="min-width: 100%;" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="editor-text editor-text" align="left" valign="top" style="font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 14px; color: #505050; text-align: left; display: block; word-wrap: break-word; line-height: 1.2; padding: 10px 20px;"><div></div><div class="text-container galileo-ap-content-editor"><div><div><span style="font-size: 18px; color: rgb(255, 255, 255); font-family: Arial, Verdana, Helvetica, sans-serif; font-weight: bold;">Place a sponsored post</span></div></div></div></td></tr></tbody></table></div></td></tr></tbody></table>
<table width="100%" cellpadding="0" cellspacing="0" border="0" class="galileo-ap-layout-editor" style="min-width: 100%;"><tbody><tr><td class="editor-col OneColumnMobile" width="20%" align="" valign="top"><div><div class="column-resize-bar"><span class="line"></span><span class="grabber"></span></div></div>
<div class="gl-contains-image"><table class="editor-image  editor-image-vspace-on editor-image-hspace-on" style="min-width: 100%;" width="100%" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td align="left" valign="top" style="padding: 10px 10px 10px 20px;"><div class="publish-container">
<a href="https://androidweekly.net/jobs/new" target="_blank">
<img alt class="" style="display: block; height: auto !important; max-width: 100% !important;" width="90" border="0" hspace="0" vspace="0" src="https://androidweekly.net/system/images/6a539a/bf3c93bc540e01ae68/square_aw.png">
</a></div></td></tr></tbody></table></div></td><td class="editor-col OneColumnMobile" width="80%" align="" valign="top"><div class="gl-contains-text"><table width="100%" style="min-width: 100%;" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="editor-text editor-text" align="left" valign="top" style="line-height: 1.5; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 14px; color: #505050; text-align: left; display: block; word-wrap: break-word; padding: 10px 20px 10px 10px;"><div></div><div class="text-container galileo-ap-content-editor"><div><div>
<a href="https://androidweekly.net/jobs/new" target="_blank" style="font-size: 16px; color: #007EA8; font-weight: bold; font-style: normal; text-decoration: underline;">
Advertise to more than 80k Android developers!
</a></div><div>We reach out to more than 80k Android developers around the world, every week, through our email newsletter and social media channels. Advertise your Android development related service or product!
</div></div></div></td></tr></tbody></table></div></td></tr></tbody></table>
<table width="100%" cellpadding="0" cellspacing="0" border="0" class="galileo-ap-layout-editor" style="min-width: 100%;"><tbody><tr><td class="editor-col OneColumnMobile" width="100%" align="" valign="top"><div class="gl-contains-spacer"><table class="editor-spacer" width="100%" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="" align="center" valign="top"><table cellpadding="0" cellspacing="0" border="0" width="100%"><tbody><tr><td class="spacer-base" width="100%" align="center" valign="top" style="padding-bottom: 15px; height: 1px; line-height: 1px;"><div><img alt width="5" height="1" border="0" hspace="0" vspace="0" src="https://imgssl.constantcontact.com/letters/images/1101116784221/S.gif" style="display: block; height: 1px; width: 5px;"></div></td></tr></tbody></table></td></tr></tbody></table></div></td></tr></tbody></table><table width="100%" cellpadding="0" cellspacing="0" border="0" class="galileo-ap-layout-editor" style="min-width: 100%;"><tbody><tr><td class="editor-col OneColumnMobile" width="100%" align="" valign="top" style="background-color: rgb(51, 181, 229);" bgcolor="33B5E5"><div class="gl-contains-text"><table width="100%" style="min-width: 100%;" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="editor-text editor-text" align="left" valign="top" style="font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 14px; color: #505050; text-align: left; display: block; word-wrap: break-word; line-height: 1.2; padding: 10px 20px;"><div></div><div class="text-container galileo-ap-content-editor"><div><div><span style="font-size: 18px; color: rgb(255, 255, 255); font-family: Arial, Verdana, Helvetica, sans-serif; font-weight: bold;">Libraries & Code</span></div></div></div></td></tr></tbody></table></div></td></tr></tbody></table>
<table width="100%" cellpadding="0" cellspacing="0" border="0" class="galileo-ap-layout-editor" style="min-width: 100%;"><tbody><tr><td class="content editor-col OneColumnMobile" width="100%" align="left" valign="top"><div class="gl-contains-text"><table width="100%" style="min-width: 100%;" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="editor-text content-text" align="left" valign="top" style="line-height: 1.5; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 14px; color: #505050; text-align: left; display: block; word-wrap: break-word; padding: 10px 20px;"><div></div><div class="text-container galileo-ap-content-editor"><div><div>
<a href="https://github.com/renetik/renetik-android" target="_blank" style="font-size: 16px; color: #007EA8; font-weight: bold; font-style: normal; text-decoration: underline;">
Renetik Android
<span class="main-url" style="color: #333333; font-size: 10px;">
</span>
</a></div><div>A pragmatic Kotlin framework for reactive MVC-style Android apps with observable properties, stores, and a view-controller UI layer.
</div></div></div></td></tr></tbody></table></div></td></tr></tbody></table>
<table width="100%" cellpadding="0" cellspacing="0" border="0" class="galileo-ap-layout-editor" style="min-width: 100%;"><tbody><tr><td class="content editor-col OneColumnMobile" width="100%" align="left" valign="top"><div class="gl-contains-text"><table width="100%" style="min-width: 100%;" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="editor-text content-text" align="left" valign="top" style="line-height: 1.5; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 14px; color: #505050; text-align: left; display: block; word-wrap: break-word; padding: 10px 20px;"><div></div><div class="text-container galileo-ap-content-editor"><div><div>
<a href="https://composables.com/blog/introducing-composables-cli" target="_blank" style="font-size: 16px; color: #007EA8; font-weight: bold; font-style: normal; text-decoration: underline;">
Introducing the Composables CLI and MCP server
<span class="main-url" style="color: #333333; font-size: 10px;">
</span>
</a></div><div>A command-line tool that scaffolds Compose Multiplatform apps and modules with Composables UI wired in from the start.
</div></div></div></td></tr></tbody></table></div></td></tr></tbody></table>
<table width="100%" cellpadding="0" cellspacing="0" border="0" class="galileo-ap-layout-editor" style="min-width: 100%;"><tbody><tr><td class="editor-col OneColumnMobile" width="100%" align="" valign="top" style="background-color: rgb(51, 181, 229);" bgcolor="33B5E5"><div class="gl-contains-text"><table width="100%" style="min-width: 100%;" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="editor-text editor-text" align="left" valign="top" style="font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 14px; color: #505050; text-align: left; display: block; word-wrap: break-word; line-height: 1.2; padding: 10px 20px;"><div></div><div class="text-container galileo-ap-content-editor"><div><div><span style="font-size: 18px; color: rgb(255, 255, 255); font-family: Arial, Verdana, Helvetica, sans-serif; font-weight: bold;">News</span></div></div></div></td></tr></tbody></table></div></td></tr></tbody></table>
<table width="100%" cellpadding="0" cellspacing="0" border="0" class="galileo-ap-layout-editor" style="min-width: 100%;"><tbody><tr><td class="content editor-col OneColumnMobile" width="100%" align="left" valign="top"><div class="gl-contains-text"><table width="100%" style="min-width: 100%;" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="editor-text content-text" align="left" valign="top" style="line-height: 1.5; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 14px; color: #505050; text-align: left; display: block; word-wrap: break-word; padding: 10px 20px;"><div></div><div class="text-container galileo-ap-content-editor"><div><div>
<a href="http://android-developers.googleblog.com/2026/07/android-bench-llm-measurement.html" target="_blank" style="font-size: 16px; color: #007EA8; font-weight: bold; font-style: normal; text-decoration: underline;">
Evolving how LLMs are measured for Android: the next era of Android Bench
<span class="main-url" style="color: #333333; font-size: 10px;">
</span>
</a></div><div>Google updates Android Bench with the Harbor framework, eight new models, and community task contributions.
</div></div></div></td></tr></tbody></table></div></td></tr></tbody></table>
<table width="100%" cellpadding="0" cellspacing="0" border="0" class="galileo-ap-layout-editor" style="min-width: 100%;"><tbody><tr><td class="content editor-col OneColumnMobile" width="100%" align="left" valign="top"><div class="gl-contains-text"><table width="100%" style="min-width: 100%;" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="editor-text content-text" align="left" valign="top" style="line-height: 1.5; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 14px; color: #505050; text-align: left; display: block; word-wrap: break-word; padding: 10px 20px;"><div></div><div class="text-container galileo-ap-content-editor"><div><div>
<a href="http://android-developers.googleblog.com/2026/07/Indie-Games-Fund-Africa.html" target="_blank" style="font-size: 16px; color: #007EA8; font-weight: bold; font-style: normal; text-decoration: underline;">
Google Play launches the first Indie Games Fund in Africa
<span class="main-url" style="color: #333333; font-size: 10px;">
</span>
</a></div><div>Google Play launches a $1 million Indie Games Fund for indie studios across Sub-Saharan Africa.
</div></div></div></td></tr></tbody></table></div></td></tr></tbody></table>
<table width="100%" cellpadding="0" cellspacing="0" border="0" class="galileo-ap-layout-editor" style="min-width: 100%;"><tbody><tr><td class="content editor-col OneColumnMobile" width="100%" align="left" valign="top"><div class="gl-contains-text"><table width="100%" style="min-width: 100%;" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="editor-text content-text" align="left" valign="top" style="line-height: 1.5; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 14px; color: #505050; text-align: left; display: block; word-wrap: break-word; padding: 10px 20px;"><div></div><div class="text-container galileo-ap-content-editor"><div><div>
<a href="https://blog.jetbrains.com/research/2026/07/the-history-of-kodee/" target="_blank" style="font-size: 16px; color: #007EA8; font-weight: bold; font-style: normal; text-decoration: underline;">
The History of Kodee, Kotlin's Mascot
<span class="main-url" style="color: #333333; font-size: 10px;">
</span>
</a></div><div>Katie Fraser shares how community research and design iteration shaped Kodee, Kotlin's mascot.
</div></div></div></td></tr></tbody></table></div></td></tr></tbody></table>
<table width="100%" cellpadding="0" cellspacing="0" border="0" class="galileo-ap-layout-editor" style="min-width: 100%;"><tbody><tr><td class="content editor-col OneColumnMobile" width="100%" align="left" valign="top"><div class="gl-contains-text"><table width="100%" style="min-width: 100%;" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="editor-text content-text" align="left" valign="top" style="line-height: 1.5; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 14px; color: #505050; text-align: left; display: block; word-wrap: break-word; padding: 10px 20px;"><div></div><div class="text-container galileo-ap-content-editor"><div><div>
<a href="https://blog.jetbrains.com/kotlin/2026/07/introducing-the-kotlin-benchmark-evaluate-ai-coding-agents-on-real-world-kotlin-tasks/" target="_blank" style="font-size: 16px; color: #007EA8; font-weight: bold; font-style: normal; text-decoration: underline;">
Introducing the Kotlin Benchmark for AI Coding Agents
<span class="main-url" style="color: #333333; font-size: 10px;">
</span>
</a></div><div>JetBrains releases the Kotlin Benchmark and public leaderboard for evaluating AI coding agents on real-world Kotlin tasks.
</div></div></div></td></tr></tbody></table></div></td></tr></tbody></table>
<table width="100%" cellpadding="0" cellspacing="0" border="0" class="galileo-ap-layout-editor" style="min-width: 100%;"><tbody><tr><td class="editor-col OneColumnMobile" width="100%" align="" valign="top" style="background-color: rgb(51, 181, 229);" bgcolor="33B5E5"><div class="gl-contains-text"><table width="100%" style="min-width: 100%;" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="editor-text editor-text" align="left" valign="top" style="font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 14px; color: #505050; text-align: left; display: block; word-wrap: break-word; line-height: 1.2; padding: 10px 20px;"><div></div><div class="text-container galileo-ap-content-editor"><div><div><span style="font-size: 18px; color: rgb(255, 255, 255); font-family: Arial, Verdana, Helvetica, sans-serif; font-weight: bold;">Videos & Podcasts</span></div></div></div></td></tr></tbody></table></div></td></tr></tbody></table>
<table width="100%" cellpadding="0" cellspacing="0" border="0" class="galileo-ap-layout-editor" style="min-width: 100%;"><tbody><tr><td class="content editor-col OneColumnMobile" width="100%" align="left" valign="top"><div class="gl-contains-text"><table width="100%" style="min-width: 100%;" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="editor-text content-text" align="left" valign="top" style="line-height: 1.5; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 14px; color: #505050; text-align: left; display: block; word-wrap: break-word; padding: 10px 20px;"><div></div><div class="text-container galileo-ap-content-editor"><div><div>
<a href="https://youtu.be/ThkUjfCJTus" target="_blank" style="font-size: 16px; color: #007EA8; font-weight: bold; font-style: normal; text-decoration: underline;">
Effective Kotlin Item 5 - Specify your expectations for arguments and state
<span class="main-url" style="color: #333333; font-size: 10px;">
</span>
</a></div><div>Marcin Moskała covers specifying expectations for arguments and state with require, check, and assert.
</div></div></div></td></tr></tbody></table></div></td></tr></tbody></table>
<table width="100%" cellpadding="0" cellspacing="0" border="0" class="galileo-ap-layout-editor" style="min-width: 100%;"><tbody><tr><td class="content editor-col OneColumnMobile" width="100%" align="left" valign="top"><div class="gl-contains-text"><table width="100%" style="min-width: 100%;" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="editor-text content-text" align="left" valign="top" style="line-height: 1.5; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 14px; color: #505050; text-align: left; display: block; word-wrap: break-word; padding: 10px 20px;"><div></div><div class="text-container galileo-ap-content-editor"><div><div>
<a href="https://www.youtube.com/watch?v=L2bZzPXfmyE" target="_blank" style="font-size: 16px; color: #007EA8; font-weight: bold; font-style: normal; text-decoration: underline;">
Eval-Driven Development: The Fine Line Between Agentic Success and Failure - Urs Peter
<span class="main-url" style="color: #333333; font-size: 10px;">
</span>
</a></div><div>Urs Peter shows how eval-driven development tames hallucinations and drift in agentic AI systems.
</div></div></div></td></tr></tbody></table></div></td></tr></tbody></table>
<table width="100%" cellpadding="0" cellspacing="0" border="0" class="galileo-ap-layout-editor" style="min-width: 100%;"><tbody><tr><td class="editor-col OneColumnMobile" width="20%" align="" valign="top"><div><div class="column-resize-bar"><span class="line"></span><span class="grabber"></span></div></div>
<div class="gl-contains-image"><table class="editor-image  editor-image-vspace-on editor-image-hspace-on" style="min-width: 100%;" width="100%" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td align="left" valign="top" style="padding: 10px 10px 10px 20px;"><div class="publish-container">
<a href="https://www.youtube.com/watch?v=KVmogsSbic8" target="_blank">
<img alt class="" style="display: block; height: auto !important; max-width: 100% !important;" width="90" border="0" hspace="0" vspace="0" src="https://androidweekly.net/system/images/6a528e/2d3c93bc540e017cf6/square_Bildschirmfoto_2026-07-12_um_15.50.21.png">
</a></div></td></tr></tbody></table></div></td><td class="editor-col OneColumnMobile" width="80%" align="" valign="top"><div class="gl-contains-text"><table width="100%" style="min-width: 100%;" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="editor-text editor-text" align="left" valign="top" style="line-height: 1.5; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 14px; color: #505050; text-align: left; display: block; word-wrap: break-word; padding: 10px 20px 10px 10px;"><div></div><div class="text-container galileo-ap-content-editor"><div><div>
<a href="https://www.youtube.com/watch?v=KVmogsSbic8" target="_blank" style="font-size: 16px; color: #007EA8; font-weight: bold; font-style: normal; text-decoration: underline;">
Metro Under the Hood - Zac Sweers
</a></div><div>Zac Sweers goes under the hood of Metro's Kotlin compiler plugin and the code it generates.
</div></div></div></td></tr></tbody></table></div></td></tr></tbody></table>
<table width="100%" cellpadding="0" cellspacing="0" border="0" class="galileo-ap-layout-editor" style="min-width: 100%;"><tbody><tr><td class="editor-col OneColumnMobile" width="100%" align="" valign="top"><div class="gl-contains-spacer"><table class="editor-spacer" width="100%" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="" align="center" valign="top"><table cellpadding="0" cellspacing="0" border="0" width="100%"><tbody><tr><td class="spacer-base" width="100%" align="center" valign="top" style="padding-bottom: 15px; height: 1px; line-height: 1px;"><div><img alt width="5" height="1" border="0" hspace="0" vspace="0" src="https://imgssl.constantcontact.com/letters/images/1101116784221/S.gif" style="display: block; height: 1px; width: 5px;"></div></td></tr></tbody></table></td></tr></tbody></table></div></td></tr></tbody></table><table width="100%" cellpadding="0" cellspacing="0" border="0" class="galileo-ap-layout-editor" style="min-width: 100%;"><tbody><tr><td class="content editor-col OneColumnMobile" width="100%" align="left" valign="top"><div class="gl-contains-text"><table width="100%" style="min-width: 100%;" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="editor-text content-text" align="left" valign="top" style="line-height: 1.5; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 14px; color: #505050; text-align: left; display: block; word-wrap: break-word; padding: 10px 20px;"><div></div><div class="text-container galileo-ap-content-editor"><div><div>
<a href="https://www.youtube.com/watch?v=9XL0r5lJNDs" target="_blank" style="font-size: 16px; color: #007EA8; font-weight: bold; font-style: normal; text-decoration: underline;">
Building Enterprise Ready AI with Koog - Vadim Briliantov
<span class="main-url" style="color: #333333; font-size: 10px;">
</span>
</a></div><div>Vadim Briliantov shows how JetBrains' Koog framework builds production-grade AI agents in Kotlin.
</div></div></div></td></tr></tbody></table></div></td></tr></tbody></table>
<table width="100%" cellpadding="0" cellspacing="0" border="0" class="galileo-ap-layout-editor" style="min-width: 100%;"><tbody><tr><td class="content editor-col OneColumnMobile" width="100%" align="left" valign="top"><div class="gl-contains-text"><table width="100%" style="min-width: 100%;" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="editor-text content-text" align="left" valign="top" style="line-height: 1.5; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 14px; color: #505050; text-align: left; display: block; word-wrap: break-word; padding: 10px 20px;"><div></div><div class="text-container galileo-ap-content-editor"><div><div>
<a href="https://www.youtube.com/watch?v=80ASd_Kt2tw" target="_blank" style="font-size: 16px; color: #007EA8; font-weight: bold; font-style: normal; text-decoration: underline;">
TestBalloon: Kotlin testing is easier (and more fun) than you think
<span class="main-url" style="color: #333333; font-size: 10px;">
</span>
</a></div><div>Oliver Okrongli and Bernd Prünster introduce TestBalloon, a lightweight multiplatform Kotlin test framework with an extensible DSL.
</div></div></div></td></tr></tbody></table></div></td></tr></tbody></table>
<table width="100%" cellpadding="0" cellspacing="0" border="0" class="galileo-ap-layout-editor" style="min-width: 100%;"><tbody><tr><td class="content editor-col OneColumnMobile" width="100%" align="left" valign="top"><div class="gl-contains-text"><table width="100%" style="min-width: 100%;" cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="editor-text content-text" align="left" valign="top" style="line-height: 1.5; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 14px; color: #505050; text-align: left; display: block; word-wrap: break-word; padding: 10px 20px;"><div></div><div class="text-container galileo-ap-content-editor"><div><div>
<a href="https://www.youtube.com/watch?v=DeVanKeIXag" target="_blank" style="font-size: 16px; color: #007EA8; font-weight: bold; font-style: normal; text-decoration: underline;">
We don't need ViewModels anymore. So shall we get rid off them?
<span class="main-url" style="color: #333333; font-size: 10px;">
</span>
</a></div><div>Philipp Lackner questions whether ViewModels are still needed, demonstrating a custom state holder alternative for Compose.
</div></div></div></td></tr></tbody></table></div></td></tr></tbody></table>
]]></description>
  <pubDate>Mon, 13 Jul 2026 07:17:38 +0000</pubDate>
  <guid>https://androidweekly.net/issues/issue-735</guid>
</item>


  </channel>
</rss>
