---
title: "Android"
description: "80 posts about Android, summarised, each linking to the original."
---

# Android
> 80 posts about Android, summarised, each linking to the original.

## Articles

### [Making AI Write Android Code Our Way: A Practical Guide to Agent Skills](https://yomu.fyi/post/making-ai-write-android-code-our-way-a-practical-guide-to-agent-skills.md)
- Company: [Medium](https://yomu.fyi/company/medium.md)
- Author: Pierrick CAEN
- Published: Mar 17, 2026
- Type: Tutorial

An Android team at Medium describes how it encoded its project conventions so AI assistants generate code aligned with Clean Architecture, Kotlin, Jetpack Compose, Hilt, Apollo GraphQL, and feature modules. An AGENTS.md file provides persistent context about module structure, dependency injection, state management, navigation, testing, and commands, while Markdown skills in .agents/skills/ provide ordered runbooks for specific tasks. Examples cover scaffolding screens and feature modules, migrating Material 2 to Material 3, enforcing ViewModel feature-flag handling, and adding deeplinks, analytics, translations, and tests. Detailed patterns include ViewModel-injecting and @VisibleForTesting composables, assisted injection, StateFlow, Result, MockK, Turbine, and Robolectric. The team iterates skills from review feedback, keeps them version-controlled, and plans file-aware rules plus commands for release diffs and reporting.


### [Enabling R8 optimization at scale with AI-assisted debugging](https://yomu.fyi/post/enabling-r8-optimization-at-scale-with-ai-assisted-debugging.md)
- Company: [Grab](https://yomu.fyi/company/grab.md)
- Author: Nguyen Van Minh
- Published: Mar 12, 2026
- Type: Problem & solution

Grab enabled R8 optimization for its Android app after repeated attempts were blocked by debugging difficulty, organization-wide testing demands, and slow build feedback. The effort targeted a roughly 10-year-old codebase exceeding 9 million lines and combined AI-assisted debugging, a pragmatic testing strategy, and infrastructure investment. Its QA build was configured to match production R8 processing. Beyond existing shrinking, optimization added techniques such as method inlining, class merging, constant folding, dead-code elimination, and devirtualization. After about 10 weeks with one engineer coordinating across teams, the project reported around 25% lower ANR rates, a 16% reduction in reference-device download size, and nearly 27% faster startup; the startup result combined R8 with corrected Baseline and Startup Profiles.


### [Reclaiming Terabytes: Optimizing Android image caching with TLRU](https://yomu.fyi/post/reclaiming-terabytes-optimizing-android-image-caching-with-tlru.md)
- Company: [Grab](https://yomu.fyi/company/grab.md)
- Author: Nguyen Van Minh
- Published: Mar 6, 2026
- Type: Problem & solution

Grab’s Android app cached runtime images with DiskLruCache, but its 100 MB size limit did not remove stale content while the cache remained below capacity, contributing substantially to device storage usage. The team developed Time-Aware Least Recently Used (TLRU), which combines LRU size eviction with time-based expiration using last\_accessed metadata and a TTL, while a minimum cache-size threshold protects a baseline of cached images. TLRU retains the 100 MB maximum and evicts entries when current\_time minus last\_accessed exceeds the TTL; the implementation also supports reading existing LRU journal files by ignoring timestamp suffixes, enabling safe rollback. Configuration was tuned through experiments using cache hit ratio, with a maximum acceptable decline of three percentage points. After production rollout, P95 total app size fell approximately 50 MB, while hit ratio stayed within target and infrastructure costs did not increase.


### [Demystifying user journeys: Revolutionizing troubleshooting with auto tracking](https://yomu.fyi/post/demystifying-user-journeys-revolutionizing-troubleshooting-with-auto-t.md)
- Company: [Grab](https://yomu.fyi/company/grab.md)
- Author: Alex Prokofiev
- Published: Dec 23, 2025
- Type: Problem & solution

Troubleshooting critical issues in the Grab app was hindered by incomplete user-journey data, because manually instrumenting hundreds of UI components left interaction gaps and delayed diagnosis. AutoTrack is a new SDK that records application state, user interactions, and UI screens in real time, creating an end-to-end session chronicle from launch through navigation. It tracks lifecycle transitions and launch mechanisms such as deeplinks and push notifications, while UIViewController, Activity, and Fragment lifecycle events identify the displayed screen. Screen metadata includes the full hierarchy as JSON; after personal information is redacted for GDPR/PDPA compliance, that data is used to train an AI model that generates an HTML representation of the screen and interactions. AutoTrack supports reproducing elusive bugs, automated issue assignment, UI test generation, and analytics-trigger validation, with future work adding network and performance signals, privacy guardrails, and automated triage.


### [MediaTek NPU and LiteRT: Powering the next generation of on-device AI](https://yomu.fyi/post/mediatek-npu-and-litert-powering-the-next-generation-of-on-device-ai.md)
- Company: [Google](https://yomu.fyi/company/google.md)
- Author: Lu Wang, Arian Arfaian, Luke Boyer
- Published: Dec 8, 2025
- Type: Announcement

MediaTek’s diverse NPU hardware and specialized compilation requirements have made on-device AI deployment difficult, especially for sophisticated generative models. The LiteRT NeuroPilot Accelerator, described as a ground-up successor to the TFLite NeuroPilot delegate, provides a unified API over MediaTek NPUs and supports both offline Ahead-of-Time (AOT) and on-device compilation. Its workflow can compile models for target SoCs, package Android assets and runtimes for Google Play’s Play for On-device AI, and invoke NPU inference through LiteRT with GPU or CPU fallback options. A new C++ API and Native Hardware Buffer Interoperability enable zero-copy transfers from AHardwareBuffer and OpenGL/OpenCL buffers, supporting real-time camera and video pipelines. On supported MediaTek chipsets, listed Gemma and Qwen models receive NPU-specific optimizations; the post reports up to 12x CPU and 10x GPU acceleration, including over 1600 tokens/sec prefill and 28 tokens/sec decode for Gemma 3n E2B.


### [Using a web-based POS with a mobile Terminal reader](https://yomu.fyi/post/using-a-web-based-pos-with-a-mobile-terminal-reader.md)
- Company: [Stripe](https://yomu.fyi/company/stripe.md)
- Author: Benjamin Nuttin
- Published: Oct 23, 2025
- Type: Tutorial

Web-based POS systems can reuse ecommerce infrastructure for showroom-floor selling, but mobile readers such as the Stripe M2 and Tap to Pay cannot be accessed directly by a mobile browser. The proposed wrapper app avoids a complete native POS rebuild by embedding the site in a React Native WebView and connecting a mobile or Tap to Pay reader through the Stripe Terminal React Native SDK. A bridge message carries cart information, such as a cart ID and ready-to-pay status, to a ReaderManager that retrieves the amount and calls createPaymentIntent(), collectPaymentMethod(), and confirmPaymentIntent(). Payment results can return to the POS through a backend webhook and WebSocket or frontend polling, while security requires origin-checked messages, nonces, and server-side validation. The approach retains WebView performance, offline, native-access, debugging, and security limitations.


### [Medium Android App — Migrating from Apollo Kotlin 3 to 4: Lessons Learned](https://yomu.fyi/post/medium-android-app-migrating-from-apollo-kotlin-3-to-4-lessons-learned.md)
- Company: [Medium](https://yomu.fyi/company/medium.md)
- Author: Pierrick CAEN
- Published: Oct 6, 2025
- Type: Tutorial

Migrating the Medium Android app from Apollo Kotlin 3 to 4 exposed cache and exception-handling issues that were hidden by the earlier implementation. Apollo Kotlin 4 uses a new group, plugin, and package identifier, places exceptions in ApolloResponse, and replaces ApolloCompositeException with a primary exception plus suppressed failures. CacheMissException errors appeared in watch() because programmatic cache IDs were incomplete or incorrect; the app addressed this with declarative type and field policies, \_\_typename on every operation, cache-update helpers, and policy-aware safeWatch filtering. The migration also replaced executeV3(), removed fetchThrows = true, added a Currency scalar adapter, and identified HTTP batching and persisted queries as future improvements, while concluding that Apollo 4 produced a more robust cache integration after the underlying issues were fixed.


### [Gating entrances with Stripe and NFC passes](https://yomu.fyi/post/gating-entrances-with-stripe-and-nfc-passes.md)
- Company: [Stripe](https://yomu.fyi/company/stripe.md)
- Author: Joshua Nussbaum
- Published: Aug 21, 2025
- Type: Tutorial

The post presents a gym membership access system that replaces plastic cards, fobs, and physical keys with Apple Wallet and Google Wallet passes scanned by an NFC reader. It uses Stripe Checkout and subscriptions for payment, PassNinja as a single API layer for issuing passes, and a DotOrigin VTAP100 connected to a Raspberry Pi Zero 2W, relay, and door strike for entry control. After Checkout, the website verifies that the Stripe subscription is active, creates a pass whose nfc-message contains the Stripe subscription ID, and redirects the member to add it to a wallet. A Linux gate process reads that identifier from the reader's virtual serial port, retrieves the subscription from Stripe, and activates the relay for five seconds when the status is active; otherwise it denies access.


### [The Future of React Native Graphics: WebGPU, Skia, and Beyond](https://yomu.fyi/post/the-future-of-react-native-graphics-webgpu-skia-and-beyond.md)
- Company: [Shopify](https://yomu.fyi/company/shopify.md)
- Author: 2023-10-18
- Published: Jun 20, 2025
- Type: Announcement

React Native WebGPU and React Native Skia are presented as a graphics stack for advanced 2D, 3D, and general-purpose GPU workloads in native applications. The work uses Skia Graphite with Dawn, Google’s open-source WebGPU implementation, to replace separate OpenGL and Metal backend implementations with a unified architecture, while enabling Three.js, React Three Fiber, TensorFlow.js, and compute shaders. Three.js Shading Language lets the same shaders target WebGPU and WebGL, and Shopify’s Black Friday globe prototypes run natively with identical results to the web version. Architectural changes in React Native Skia moved from a mutable SkiaDOM to an immutable fabric reconciler, producing reported animation gains of up to 50% on iOS and nearly 200% on Android, plus 98% of reported Android crashes fixed. Graphite remains experimental, but adds dedicated-thread canvases and bidirectional 2D/3D composition, while Skia also supports macOS, tvOS, and headless Node.js rendering.


### [Superheroes, Startups, and Security: Sohail's Path to Developer Advocacy at Okta](https://yomu.fyi/post/superheroes-startups-and-security-sohail-s-path-to-developer-advocacy.md)
- Company: [Okta](https://yomu.fyi/company/okta.md)
- Author: Sohail Pathan
- Published: Jun 16, 2025
- Type: Announcement

Sohail Pathan describes his path from Android development to a Senior Developer Advocate role at Okta, tracing how curiosity about technology grew into community and developer relations work. After studying Computer Science and adopting Kotlin for Android app projects, he moved from an EdTech startup’s Android team into its first Developer Community Manager role, organizing meetups, answering forum questions, and supporting learners. At a deeptech startup, he led Developer Relations for a cloud-based Android Studio tool, using meetups, hackathons, and feedback to seek product-market fit before technical roadblocks and limited demand forced closure after four months. At ApyHub, he created Go and Node.js tutorials, sample apps, API documentation, and community programs while gaining hands-on experience with REST architecture, microservices, API gateways, containers, load balancing, DevOps, OAuth, and identity management. He says that exposure led him to Okta, where he plans to share API and identity knowledge with its community.


### [Sessions 2025 Developer Track resources](https://yomu.fyi/post/sessions-2025-developer-track-resources.md)
- Company: [Stripe](https://yomu.fyi/company/stripe.md)
- Author: Ashley Ansari
- Published: May 7, 2025
- Type: Announcement

Stripe’s Sessions 2025 developer track recap presents new products, APIs, and enhancements for building and managing financial infrastructure. Stripe’s Workflows provides visual automation for real-time events, with more than 600 triggers, branching logic, dynamic fields, and built-in error handling, while the MCP server and agent toolkit connect AI tools and agents to Stripe documentation, account data, APIs, and financial capabilities. Accounts v2 unifies connected-account management, and fully localized Connect Mobile Embedded Components bring onboarding to iOS and Android; the Payment Element also gains support for the Checkout Sessions API. New Stripe Apps UI components, generally available Sandboxes, Organization-wide sharing of customers and payment methods, and conversational documentation extend customization, testing, and collaboration.


### [Mobile Bridge: Making WebViews Feel Native](https://yomu.fyi/post/mobile-bridge-making-webviews-feel-native.md)
- Company: [Shopify](https://yomu.fyi/company/shopify.md)
- Author: 2023-10-18
- Published: Apr 25, 2025
- Type: Problem & solution

Shopify’s mobile app has about 600 screens, but building every non-critical screen natively or in React Native was costly and slowed development, while conventional WebViews felt slow, disconnected, and out of place. Mobile Bridge addresses this hybrid-app problem with native iOS and Android modules that preload, authenticate, cache, and reuse WebViews, reducing P75 load time from 6 seconds to 1.4 seconds, including network latency and rendering. Built on @remote-ui/rpc, the framework uses JavaScript, CSS, Polaris overrides, title and action APIs, TransportableView, snapshots, and native modal transitions to preserve state and align web screens with native navigation and appearance. WebViews can also invoke native features such as date pickers, barcode scanning, and Add to Wallet; Shopify says the standalone library is being adopted across other products while critical features remain native or React Native.


### [Adopting Jetpack Compose for Etsy’s Android App](https://yomu.fyi/post/adopting-jetpack-compose-for-etsy-s-android-app.md)
- Company: [Etsy](https://yomu.fyi/company/etsy.md)
- Author: John Kalmi
- Published: Jan 28, 2025
- Type: Problem & solution

Etsy adopted Jetpack Compose as its preferred way to build Android app UIs, after a staged program that culminated in rewriting the Shop screen. Because UI toolkits are central to development, engineers created a curriculum, rebuilt internal design-system components, and used Compose’s interoperability with XML Views to migrate gradually. They then tested a full internal screen with navigation, system UI, coroutines for API data fetching, and Kotlin Flows supporting unidirectional data flow alongside Macramé. After Compose bottom sheets reached real buyers and sellers, the Shop rewrite took about three months and entered an A/B experiment against the old implementation. The new screen improved initial rendering time by 5%, made interactions more fluid, and improved several user actions, while engineers reported fewer lines of code, easier testing, greater business-logic coverage, and higher satisfaction.


### [Five years of React Native at Shopify](https://yomu.fyi/post/five-years-of-react-native-at-shopify.md)
- Company: [Shopify](https://yomu.fyi/company/shopify.md)
- Author: 2023-10-18
- Published: Jan 13, 2025
- Type: Explainer

Shopify reviews five years of using React Native (RN) as its mobile strategy, adopted to avoid duplicating features across iOS and Android, improve talent portability, and ship more value. Over that period, all of its apps migrated to RN through team-led, non-uniform plans, while native code remained part of the architecture rather than an alternative to eliminate. The company reports sub-500ms P75 screen loads in the Shopify app, similar performance across its apps, and more than 99.9% crash-free sessions, while noting that performance depends on applying sound patterns. Its experience credits hot reloading and TypeScript with developer productivity and cross-platform staffing, but identifies debugging, RN upgrades, and third-party dependency maintenance as costs. Shopify now emphasizes shared libraries, native expertise for platform-specific work, continued New Architecture adoption, and collaboration with the RN ecosystem.


### [Bringing Grab’s Live Activity to Android: Enhancing user experience through custom notifications](https://yomu.fyi/post/bringing-grab-s-live-activity-to-android-enhancing-user-experience-thr.md)
- Company: [Grab](https://yomu.fyi/company/grab.md)
- Author: Jessica Sean
- Published: Sep 23, 2024
- Type: Problem & solution

Grab designed an equivalent to iOS Live Activities for Android to provide real-time order tracking outside the app. Because Android lacks Apple's native ActivityKit push token system, the team substituted push tokens with placeholder values to maintain technical consistency across platforms and preserve backend push targeting via their Hedwig service. For the user interface, engineering selected custom notifications over floating views because custom notifications avoid intrusive screen usage and do not require the 'Draw over other apps' permission. The client implementation separates responsibilities across dedicated classes: LiveActivityIntegrationManager handles token registration across business verticals, LiveActivityAttributes encapsulates UI configuration, and LiveActivityManager maps payloads to Android NotificationManager instances. The solution launched for Food, Mart, Express, and Transport verticals.


### [Tophat: Crafting a Delightful Mobile Developer Experience](https://yomu.fyi/post/tophat-crafting-a-delightful-mobile-developer-experience.md)
- Company: [Shopify](https://yomu.fyi/company/shopify.md)
- Author: 2023-10-18
- Published: Aug 23, 2024
- Type: Problem & solution

Shopify built Tophat to reduce the time and friction involved in manually testing mobile pull requests, where switching branches, stashing changes, and waiting for Xcode or Android Studio builds slowed review. The macOS menu-bar application links GitHub pull requests to iOS and Android artifacts produced by CI and stored in Google Cloud Storage, allowing contributors to install builds on simulators or real devices with one click. Tophat parallelizes tasks such as downloading applications and booting devices, and its Quick Launch feature retrieves builds with up-to-date native code for React Native development. The project also addressed real-device iOS installation and signing challenges, integrated with Shipit Mobile, and provided automated setup guidance. After the latest improvements, daily usage doubled, and Tophat was later made open source.


### [eBay’s Mobile App Offers a Goldmine of Insights for Sellers](https://yomu.fyi/post/ebay-s-mobile-app-offers-a-goldmine-of-insights-for-sellers.md)
- Company: [Ebay](https://yomu.fyi/company/ebay.md)
- Author: eBay News Team
- Published: May 7, 2024
- Type: Announcement

eBay’s Product Research, formerly called Terapeak, brings three years of sold-items data into its mobile app so sellers can research products and create listings from anywhere. The service reports actual sold prices, including accepted Best Offer prices, along with average and range, free-shipping share, average shipping cost, and the number of sellers who sold a product. Sellers can search, sort, filter, inspect a price-trend graph, and use “Sell one like this” to start a listing pre-populated from a sold listing. Product Research is available in the latest eBay app for iOS and Android, while desktop sellers can use it through Seller Hub; planned additions include sell-through rate, more trend graphs, and active-listing views.


### [Macramé: Untangling the Knot on the Etsy Android Listing Screen](https://yomu.fyi/post/macrame-untangling-the-knot-on-the-etsy-android-listing-screen.md)
- Company: [Etsy](https://yomu.fyi/company/etsy.md)
- Author: John Kalmi
- Published: Mar 18, 2024
- Type: Problem & solution

The Etsy Android listing screen had accumulated nearly 200 experiments in three years, leaving a 4,000-plus-line Fragment, inconsistent patterns, low test coverage, and costly, brittle tests. Macramé replaced that legacy design with immutable state propagated through StateFlow to a reactive UI, transforming screen data into smaller ListingUiModels rendered by RecyclerView and ListAdapter. Sealed Events move through a single Dispatcher to focused Handlers, which update State, start asynchronous work, or emit SideEffects for operations such as navigation and logging. After a five-month rewrite, the new screen’s Time to First Content fell 18%, from 1,585 ms to 1,298 ms, while listings viewed rose 2.4% and business-logic test coverage reached 76%. The architecture still has wiring boilerplate, debugging challenges around Handler interactions, and possible overkill for simpler screens, but its use expanded to Cart and Shop.


### [Android App Size at Scale with Project Bonsai](https://yomu.fyi/post/android-app-size-at-scale-with-project-bonsai.md)
- Company: [Grab](https://yomu.fyi/company/grab.md)
- Author: Nguyen Van Minh
- Published: Mar 1, 2024
- Type: Problem & solution

Grab launched Project Bonsai to optimize the size of its Android superapp, which encompassed over four million lines of code across 1,500 modules. Because large app sizes negatively impact user acquisition on low-end devices with constrained bandwidth, the engineering team structured its optimization strategy around measurement, reduction, and containment. The team developed App Sizer, a custom CI-integrated tool that tracks binary compositions and module size contributions in Grafana. Initial reductions targeted Java and Kotlin dex files, resolving bloated transitive R classes by upgrading the Android Gradle Plugin to eliminate overly broad R8 retention rules. These initiatives achieved a 26% reduction in app download size while simultaneously decreasing overall disk footprint.


### [Getting Started with React Native Skia](https://yomu.fyi/post/getting-started-with-react-native-skia.md)
- Company: [Shopify](https://yomu.fyi/company/shopify.md)
- Author: 2023-10-18
- Published: Dec 4, 2023
- Type: Tutorial

React Native Skia exposes Google’s cross-platform Skia 2D graphics engine to React Native, giving developers a canvas for custom shapes, visual effects, and dynamic interactions. The article explains when to choose it over react-native-svg or standard React Native Views: SVG is optimized for static SVGs, while Skia supplies primitives such as shaders, path operations, and image filters for animated experiences. It introduces the Cartesian canvas, basic Circle, Rect, and RoundedRect shapes, and custom paths created with SVG notation or imperative commands including addCircle, lineTo, and addPoly. Examples then combine Skia with react-native-reanimated shared values for UI-thread animation and react-native-gesture-handler for panning, before adding Blur and DashPathEffect; the article also notes web support through React Native Web and points to further examples.


[Newer posts](https://yomu.fyi/topic/android.md) · [Older posts](https://yomu.fyi/topic/android/page/3.md)
