# android-development

Published articles for android-development.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Starting Android at Khan Academy

DevFeed: [Starting Android at Khan Academy](<https://devfeed.tech/articles/starting-android-at-khan-academy-27408.md>)

Original publisher: [Read original article](<http://engineering.khanacademy.org/posts/starting-android.htm>)

Author: Khan Academy

Published: 2016-02-29T23:00:00Z

Content type: article

Language: en

Sources: [Khan Academy](<https://devfeed.tech/sources/khan-academy.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [android-development](<https://devfeed.tech/topics/android-development.md>), [Development](<https://devfeed.tech/topics/development.md>), [Library](<https://devfeed.tech/topics/library.md>), [modules](<https://devfeed.tech/topics/modules.md>), [ci](<https://devfeed.tech/topics/ci.md>), [Mocking](<https://devfeed.tech/topics/mocking.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [development](<https://devfeed.tech/tags/development.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [libraries](<https://devfeed.tech/tags/libraries.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [mocking](<https://devfeed.tech/tags/mocking.md>), [module](<https://devfeed.tech/tags/module.md>), [modules](<https://devfeed.tech/tags/modules.md>), [news](<https://devfeed.tech/tags/news.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [picasso](<https://devfeed.tech/tags/picasso.md>), [play-store](<https://devfeed.tech/tags/play-store.md>), [pre-commit](<https://devfeed.tech/tags/pre-commit.md>), [retrofit](<https://devfeed.tech/tags/retrofit.md>), [test](<https://devfeed.tech/tags/test.md>), [tests](<https://devfeed.tech/tags/tests.md>)

### AI overview

Khan Academy describes its first Android app, launched in August 2015, and the engineering practices used to build it. The team adopted established Android and open-source libraries, separated Android-independent core code from the app module, and used fast JVM tests and continuous integration.

### Source excerpt

By Ben Komalo The journey of a thousand miles... In March, 2015--almost 1 year ago to the day--we ... Read more

## About

DevFeed: [About](<https://devfeed.tech/articles/about-22788.md>)

Original publisher: [Read original article](<http://androidessence.com/about/>)

Published: 2026-09-15T02:35:35.573025Z

Content type: article

Language: en

Sources: [Android Essence](<https://devfeed.tech/sources/android-essence.md>)

Topics: [Development](<https://devfeed.tech/topics/development.md>), [Android](<https://devfeed.tech/topics/android.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [GitHub](<https://devfeed.tech/topics/github.md>)

Tags: [android-development](<https://devfeed.tech/tags/android-development.md>), [community](<https://devfeed.tech/tags/community.md>), [development](<https://devfeed.tech/tags/development.md>), [github](<https://devfeed.tech/tags/github.md>), [navigation-drawer](<https://devfeed.tech/tags/navigation-drawer.md>), [programming](<https://devfeed.tech/tags/programming.md>), [recyclerview](<https://devfeed.tech/tags/recyclerview.md>)

### AI overview

Android Essence is an introductory Android development resource focused on making programming concepts understandable to learners of all skill levels. It emphasizes core programming fundamentals and accepts requests for additional topics through GitHub issues.

### Source excerpt

About Android Essence Android Essence was first launched on September 2, 2015 by Adam McNeilly. It started off with Adam just wanting to share everything he'd learned about Android development with the community. You can find all sorts of historical context from these posts, like understanding a RecyclerView vs ListView, or even working with a navigation drawer (what a throwback). The problem is that there wasn't always a rhyme or reason to the posts.

## Kotlin 2.4.20 Collection Checks and Experimental Context-Sensitive Resolution

DevFeed: [Kotlin 2.4.20 Collection Checks and Experimental Context-Sensitive Resolution](<https://devfeed.tech/articles/features-you-waited-for-so-long-in-kotlin-22944.md>)

Original publisher: [Read original article](<https://proandroiddev.com/features-you-waited-for-so-long-in-kotlin-6c822e9e344a?source=rss----c72404660798---4>)

Author: Andrii Dubovyk

Published: 2026-09-14T06:32:51Z

Content type: tutorial

Language: en

Sources: [ProAndroidDev - Medium](<https://devfeed.tech/sources/proandroiddev-medium.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [collections](<https://devfeed.tech/tags/collections.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [experimental](<https://devfeed.tech/tags/experimental.md>), [features](<https://devfeed.tech/tags/features.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [list](<https://devfeed.tech/tags/list.md>), [mobile-app-development](<https://devfeed.tech/tags/mobile-app-development.md>), [syntax](<https://devfeed.tech/tags/syntax.md>), [technology](<https://devfeed.tech/tags/technology.md>)

### AI overview

The article explains two Kotlin features: allDistinctBy and allEqualBy in Kotlin 2.4.20 for checking collection values, and experimental context-sensitive resolution introduced in Kotlin 2.2 to reduce repetition when the expected type is known.

### Source excerpt

Kotlin 2.4.20 gives your collections opinions, and 2.2's compiler finally learns to read the room Some Kotlin features get a lot of attention when they arrive. Others are much less noticeable, but still make everyday code a little easier to write. Two examples of the latter are allDistinctBy/ allEqualBy in Kotlin 2.4.20 and context-sensitive resolution, which was introduced experimentally in Kotlin 2.2. allDistinctBy/ allEqualBy: A Simpler Way to Check Collections For years, checking whether all values in a collection were unique often looked something like this: val users = listOf( User(name = "A", age = 20), User(name = "B", age = 25), User(name = "C", age = 30) ) users.map { it.age }.distinct().size == users.size // true It works, but it creates another list, removes duplicates, counts the result, and then compares the sizes just to get a Boolean answer. Kotlin 2.4.20 adds a more direct way to express the same check: users.allDistinctBy { it.age } // true users.allEqualBy { it.age } // false allDistinctBy returns false as soon as it finds a duplicate, so it doesn't need to process the entire collection or create a separate Set. allEqualBy does the opposite: it checks whether all elements produce the same value when passed through the selector. Both functions work with Iterable, Sequence, and arrays. They use structural equality. For floating-point values, they follow Double.equals semantics, so NaN is considered equal to NaN, while -0.0 is different from 0.0. They're still @ExperimentalStdlibApi, so you'll need to opt in before using them in production code. The underlying allDistinct() and allEqual() requests have also been around in YouTrack for quite a while, which makes their appearance in the standard library feel long overdue. Context-Sensitive Resolution: Less Repetition in when The second feature is more about syntax. When the compiler already knows the type you're working with, you can sometimes leave out the type qualifier. Before: enum class Problem {

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

DevFeed: [On-Device AI Series (Part 5): LiteRT-LM](<https://devfeed.tech/articles/on-device-ai-series-part-5-litert-lm-22949.md>)

Original publisher: [Read original article](<https://proandroiddev.com/on-device-ai-series-part-5-litert-lm-d6c23b102094?source=rss----c72404660798---4>)

Author: Oğuzhan Aslan

Published: 2026-09-14T05:59:12Z

Content type: tutorial

Language: en

Sources: [ProAndroidDev - Medium](<https://devfeed.tech/sources/proandroiddev-medium.md>)

Topics: [LiteRT](<https://devfeed.tech/topics/litert.md>), [On-device AI](<https://devfeed.tech/topics/on-device-ai.md>), [Large Language Model](<https://devfeed.tech/topics/llm.md>), [Inference](<https://devfeed.tech/topics/inference.md>), [Streaming](<https://devfeed.tech/topics/streaming.md>), [GPU](<https://devfeed.tech/topics/gpu.md>), [LLM evaluation / benchmarking](<https://devfeed.tech/topics/llm-evaluation-benchmarking.md>), [PyTorch](<https://devfeed.tech/topics/pytorch.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [android](<https://devfeed.tech/tags/android.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [benchmarking](<https://devfeed.tech/tags/benchmarking.md>), [gpu](<https://devfeed.tech/tags/gpu.md>), [inference](<https://devfeed.tech/tags/inference.md>), [litert](<https://devfeed.tech/tags/litert.md>), [llama](<https://devfeed.tech/tags/llama.md>), [llm](<https://devfeed.tech/tags/llm.md>), [multimodal](<https://devfeed.tech/tags/multimodal.md>), [on-device](<https://devfeed.tech/tags/on-device.md>), [on-device-ai](<https://devfeed.tech/tags/on-device-ai.md>), [programming](<https://devfeed.tech/tags/programming.md>), [pytorch](<https://devfeed.tech/tags/pytorch.md>), [qwen](<https://devfeed.tech/tags/qwen.md>), [software-development](<https://devfeed.tech/tags/software-development.md>), [streaming](<https://devfeed.tech/tags/streaming.md>)

### AI overview

This tutorial explains LiteRT-LM for running large language models on-device. It covers the Engine/Session API, streaming output, system prompts, tool calling, multimodal inputs, thinking mode, and CPU-versus-GPU benchmarking. The article also discusses tradeoffs involving privacy, network independence, latency, memory, sampling configuration, and model capability compared with cloud APIs.

### Source excerpt

Put your phone in airplane mode. Open the app, type a question, and watch the answer arrive one token at a time -- no spinner waiting on a network round-trip, no API key, no per-token bill, and nothing you typed ever leaving the device. LiteRT-LM removes the genuinely hard parts of running an LLM on-device -- KV-cache management, token streaming, backend selection -- but it doesn't remove your job so much as relocate it. What's left on your plate is a short, specific list: sizing a combined input+output token budget, owning your own sampling defaults, hand-building system prompts and tool calling out of raw text, and one native-library collision that presents as a SIGSEGV rather than a build error. Know those going in and the API itself is a clean three-step pattern. We'll get there in that order: Why you'd choose this runtime and what it costs you versus the cloud. The Engine/Session model you need to read the code at all. Real implementation samples -- streaming, system prompts and tool calling, multimodal inputs, thinking mode, and CPU-vs-GPU benchmarking. The anti-patterns to avoid. A developer-friendliness rating on the same rubric as Parts 1-4. Why Use LiteRT-LM? You reach for LiteRT-LM instead of hand-rolling generation on top of raw LiteRT when: You need multi-turn conversation, not single-shot inference -- session state and KV-cache bookkeeping are handled for you, and resetting a conversation is a session swap, not a model reload. You need streaming output -- token-by-token delivery for a responsive chat UI, instead of a blocking call that returns everything at once. You're choosing between CPU and GPU per device -- the explicit backend parameter turns that into a runtime decision instead of a build-time guess. You want a pre-converted model without doing your own PyTorch-to-LiteRT conversion work -- the Model Zoo covers Gemma, Qwen, Llama, and more out of the box. You're willing to own sampling -- the engine won't pick sane decoding defaults for you; that's on the

## Android Weekly Issue #744

DevFeed: [Android Weekly Issue #744](<https://devfeed.tech/articles/android-weekly-issue-744-22735.md>)

Original publisher: [Read original article](<https://androidweekly.net/issues/issue-744/rss.xml>)

Published: 2026-09-13T16:28:25Z

Content type: article

Language: en

Sources: [Android Weekly](<https://devfeed.tech/sources/android-weekly.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [Development](<https://devfeed.tech/topics/development.md>), [Compose](<https://devfeed.tech/topics/compose.md>), [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [Rive animation](<https://devfeed.tech/topics/rive-animation.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [compose](<https://devfeed.tech/tags/compose.md>), [developers](<https://devfeed.tech/tags/developers.md>), [lottie](<https://devfeed.tech/tags/lottie.md>), [net-11-preview-7](<https://devfeed.tech/tags/net-11-preview-7.md>), [offline-speech-recognition](<https://devfeed.tech/tags/offline-speech-recognition.md>), [rive](<https://devfeed.tech/tags/rive.md>), [speech](<https://devfeed.tech/tags/speech.md>), [tutorials](<https://devfeed.tech/tags/tutorials.md>)

### AI overview

Android Weekly Issue #744 is a developer digest covering Android architecture and AI, annotation-based DSL APIs, animated paywalls, offline speech recognition in keyboards, Compose dialog blurring, and structural hot reload across Android, iOS, and desktop.

### Source excerpt

Articles & Tutorials Sponsored Pushwoosh launches a new Push-only plan Stop overpaying for push notifications. Get powerful push infrastructure for $7 per 1,000 MAU, with high-speed delivery, 99.9% push-to-gateway delivery, migration support, and a 24-month price lock. Calculate your savings. Android's AI Era: Hype vs. Architecture Thomas Künneth examines Android's AppFunctions architecture and agent distribution claims behind Google's "intelligent system" framing. Two Racing Lines: Annotations and the DSL in NetFlow 0.7.0 KMP Bits explains adding an annotation-based API layer atop NetFlow's DSL, keeping compile-time-checked mapping and paging support intact. Sponsored How many app issues fell off your radar this week? Mobile teams deal with a firehose of incoming issues: regressions from QA, beta feedback, Play Store reviews, crashes, etc. AI code makes managing this even harder. Triage by Runway pulls every issue into one inbox, de-dupes, assigns, and tracks fixes so nothing is missed. See how it works. Adding Rive and Lottie Animations to Android Paywalls Jaewoong Eum explains building custom Rive and Lottie animated components for RevenueCat's server-driven Android paywalls. I Put Speech Recognition Inside an Android Keyboard. Here's What Broke. Farhad Ranjbar explores the architecture challenges of building an offline speech-recognition engine inside an Android keyboard. How to blur what's behind a Compose dialog, down to API 23 Timofey Krestyanov explains blurring content behind a Compose dialog across window boundaries, down to API 23. Compose HotSwan 2.0.0: The Future of Hot Reload on Android, iOS, and Desktop Jaewoong Eum introduces Compose HotSwan 2.0's own interpreter engine, enabling structural hot reload across Android, iOS, and Desktop. Place a sponsored post Advertise to more than 80k Android developers! Advertise your Android development related service or product! We reach out to more than 80k Android developers around the world, every week, through

## Kotlin Explicit Backing Fields: Encapsulation Tradeoffs and Downcasting Risks

DevFeed: [Kotlin Explicit Backing Fields: Encapsulation Tradeoffs and Downcasting Risks](<https://devfeed.tech/articles/the-downcast-trap-in-kotlin-s-explicit-backing-fields-22951.md>)

Original publisher: [Read original article](<https://proandroiddev.com/the-downcast-trap-in-kotlins-explicit-backing-fields-626ef0d66e50?source=rss----c72404660798---4>)

Author: Ehab Elwan

Published: 2026-09-13T05:31:32Z

Content type: opinion

Language: en

Sources: [ProAndroidDev - Medium](<https://devfeed.tech/sources/proandroiddev-medium.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Code](<https://devfeed.tech/topics/code.md>), [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [article](<https://devfeed.tech/tags/article.md>), [clean-code](<https://devfeed.tech/tags/clean-code.md>), [code](<https://devfeed.tech/tags/code.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [memory](<https://devfeed.tech/tags/memory.md>), [software-architecture](<https://devfeed.tech/tags/software-architecture.md>), [stateflow](<https://devfeed.tech/tags/stateflow.md>)

### AI overview

This article compares Kotlin's traditional private mutable property plus public read-only wrapper with explicit backing fields. It explains that explicit backing fields can avoid an extra wrapper allocation, but because the underlying object remains mutable, an external downcast may bypass the intended read-only restriction and mutate internal state.

### Source excerpt

Why eliminating the double-property boilerplate changes how we protect our architecture Image generated by AIDisclosure: This article was drafted by me and refined with the help of AI tools. If you have written Kotlin in the last few years, you are intimately familiar with the double-property boilerplate. Whether in Android ViewModels or general state holders, maintaining a private mutable property alongside a public read-only property is a chore we have all accepted in the name of strict encapsulation to prevent our internal state from being hijacked by outside classes. It makes the code significantly cleaner (and slightly more memory efficient). However, it fundamentally changes how we protect our state, moving from a physical object boundary to a simple type restriction. Let's look at the tradeoff. The Old Way: Wrapper Protection For years, the standard approach to encapsulating state has looked like this: class OldViewModel { // 1. The private mutable state private val _uiState = MutableStateFlow(UiState()) // 2. The public read-only state val uiState: StateFlow<UiState> = _uiState.asStateFlow() } This is tedious to write, but it provides a strict architectural guarantee. When you call .asStateFlow(), Kotlin does not just change the type; it creates a brand new wrapper object in memory (ReadonlyStateFlow). While this physical barrier is fantastic for safety, it does mean you are incurring a minor memory allocation overhead by creating a secondary wrapper object for every exposed state. The New Way: Upcasting Explicit Backing Fields allow you to merge these two properties into one concise declaration, bypassing that extra memory allocation entirely: class NewViewModel { val uiState: StateFlow<UiState> field = MutableStateFlow(UiState()) } Inside your class, the Kotlin compiler smart-casts the field so you can mutate it internally. Outside the class, the compiler restricts callers to the read-only StateFlow interface. It looks incredibly clean and saves an allocat

## The Android Startup Pattern: A Lifecycle-Aware, Multi-Module Approach

DevFeed: [The Android Startup Pattern: A Lifecycle-Aware, Multi-Module Approach](<https://devfeed.tech/articles/the-android-startup-pattern-a-lifecycle-aware-multi-module-approach-22950.md>)

Original publisher: [Read original article](<https://proandroiddev.com/the-android-startup-pattern-a-lifecycle-aware-multi-module-approach-d0f73e367a62?source=rss----c72404660798---4>)

Author: Ehab Elwan

Published: 2026-09-13T05:31:09Z

Content type: tutorial

Language: en

Sources: [ProAndroidDev - Medium](<https://devfeed.tech/sources/proandroiddev-medium.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [modules](<https://devfeed.tech/topics/modules.md>), [Jetpack](<https://devfeed.tech/topics/jetpack.md>), [Framework](<https://devfeed.tech/topics/framework.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [app-startup](<https://devfeed.tech/tags/app-startup.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [framework](<https://devfeed.tech/tags/framework.md>), [jetpack](<https://devfeed.tech/tags/jetpack.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [mobile-architecture](<https://devfeed.tech/tags/mobile-architecture.md>), [module](<https://devfeed.tech/tags/module.md>), [privacy](<https://devfeed.tech/tags/privacy.md>), [software-architecture](<https://devfeed.tech/tags/software-architecture.md>)

### AI overview

This tutorial presents a lifecycle-aware, dependency-injection-driven startup pattern for modular Android applications. It contrasts a centralized startup anti-pattern with Jetpack App Startup and discusses process lifecycles, testability, and delaying tracking SDK initialization until privacy consent is evaluated.

### Source excerpt

A Clean, DI-Driven Architecture for Managing Cold Starts, Background Wakeups, and Privacy Compliance in Modern Android Apps Image generated by AIDisclosure: This article was drafted by me and refined with the help of AI tools. Every growing Android project eventually spawns a two-headed "God Class." On one side, your Application class becomes a dumping ground for global infrastructure--third-party SDKs, crash reporters, and tracking tools. On the other side, your main entry point (typically the MainViewModel) gets choked with UI-blocking startup logic. It usually looks something like this: The Anti-Pattern: The Two-Headed God Class class MyApplication : Application() { override fun onCreate() { super.onCreate() // The framework dumping ground CrashReportingSDK.getInstance().setCollectionEnabled(true) HeavyUiSDK.initialize(context = this, ...) AnalyticsSDK.initialize(this, "API_KEY") // ... 50 more lines of spaghetti } }class MainViewModel : ViewModel() { init { // The UI-blocking dumping ground updateRemoteConfigs() checkUserSessionToken() processPendingDeepLinks() prefetchHomeFeedData() // ... UI cannot render until this finishes } } Splitting initialization across these two files creates major problems: It breaks the Single Responsibility Principle: The app's entry points are forced to orchestrate the inner workings of every single feature, tightly coupling your modules. It ignores process lifecycles: Application tasks run indiscriminately on every silent background wakeup, while MainViewModel tasks fail to re-trigger when the app returns to the foreground. It destroys testability: Hardcoding SDK initializations directly into your entry points makes it incredibly difficult to write isolated unit tests without complicated mocking setups. It complicates privacy compliance: A centralized dumping ground makes it extremely difficult to dynamically suspend tracking SDKs until user consent under global privacy regulations (such as GDPR, CCPA, and CPRA) is explicitly grant

## Setup On Device Gemma 4 Android Development on Emulator

DevFeed: [Setup On Device Gemma 4 Android Development on Emulator](<https://devfeed.tech/articles/setup-on-device-gemma-4-android-development-on-emulator-29460.md>)

Original publisher: [Read original article](<https://medium.com/mobile-app-development-publication/setup-on-device-gemma-4-android-development-on-emulator-738876f03733?source=rss----f9c208bdbb09---4>)

Author: Elye - A Dev By Grace

Published: 2026-09-11T14:27:55Z

Content type: tutorial

Language: en

Sources: [Mobile App Development Publication - Medium](<https://devfeed.tech/sources/mobile-app-development-publication-medium.md>)

Topics: [gemma4](<https://devfeed.tech/topics/gemma4.md>), [Android](<https://devfeed.tech/topics/android.md>), [Emulator](<https://devfeed.tech/topics/emulator.md>), [android-development](<https://devfeed.tech/topics/android-development.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [androiddev](<https://devfeed.tech/tags/androiddev.md>), [artificial-intelligence](<https://devfeed.tech/tags/artificial-intelligence.md>), [emulator](<https://devfeed.tech/tags/emulator.md>), [gemma](<https://devfeed.tech/tags/gemma.md>), [gemma-4](<https://devfeed.tech/tags/gemma-4.md>), [google](<https://devfeed.tech/tags/google.md>), [mobile-app-development](<https://devfeed.tech/tags/mobile-app-development.md>), [on-device](<https://devfeed.tech/tags/on-device.md>)

### AI overview

A tutorial explaining how to set up and run the Gemma 4 large language model locally on an Android Emulator, including downloading and testing the Google AI Edge Gallery sample app. It notes that emulator storage and memory may affect model use.

### Source excerpt

Create Android Project with Downloadable Android On Device Gemma 4 Model Continue reading on Mobile App Development Publication "

## Android Studio Quail Using On Device Gemma 4 Experience

DevFeed: [Android Studio Quail Using On Device Gemma 4 Experience](<https://devfeed.tech/articles/android-studio-quail-using-on-device-gemma-4-experience-29456.md>)

Original publisher: [Read original article](<https://medium.com/mobile-app-development-publication/android-studio-quail-using-on-device-gemma-4-experience-0924103051eb?source=rss----f9c208bdbb09---4>)

Author: Elye - A Dev By Grace

Published: 2026-09-09T11:28:45Z

Content type: tutorial

Language: en

Sources: [Mobile App Development Publication - Medium](<https://devfeed.tech/sources/mobile-app-development-publication-medium.md>)

Topics: [Android Studio](<https://devfeed.tech/topics/android-studio.md>), [gemma4](<https://devfeed.tech/topics/gemma4.md>), [Large Language Model](<https://devfeed.tech/topics/llm.md>), [Development](<https://devfeed.tech/topics/development.md>)

Tags: [agent](<https://devfeed.tech/tags/agent.md>), [android](<https://devfeed.tech/tags/android.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [android-studio](<https://devfeed.tech/tags/android-studio.md>), [development](<https://devfeed.tech/tags/development.md>), [gemma](<https://devfeed.tech/tags/gemma.md>), [gemma-4](<https://devfeed.tech/tags/gemma-4.md>), [llm](<https://devfeed.tech/tags/llm.md>), [local](<https://devfeed.tech/tags/local.md>), [memory](<https://devfeed.tech/tags/memory.md>), [mobile-app-development](<https://devfeed.tech/tags/mobile-app-development.md>), [on-device](<https://devfeed.tech/tags/on-device.md>)

### AI overview

This article describes using the on-device Gemma 4 model in Android Studio Quail for Android development. It outlines selecting the local model option, choosing Gemma in Model Providers, and downloading a model, while noting the need for a fast machine with substantial memory.

### Source excerpt

How's Android Studio Quail support for On-Device LLM Model Doing? Continue reading on Mobile App Development Publication "

## From Permissions to Sessions: Rethinking Location Access in Android 17

DevFeed: [From Permissions to Sessions: Rethinking Location Access in Android 17](<https://devfeed.tech/articles/from-permissions-to-sessions-rethinking-location-access-in-android-17-22946.md>)

Original publisher: [Read original article](<https://proandroiddev.com/from-permissions-to-sessions-rethinking-location-access-in-android-17-5a13124b777d?source=rss----c72404660798---4>)

Author: Nav Singh

Published: 2026-09-09T01:15:51Z

Content type: tutorial

Language: en

Sources: [ProAndroidDev - Medium](<https://devfeed.tech/sources/proandroiddev-medium.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [android-development](<https://devfeed.tech/topics/android-development.md>), [implementation](<https://devfeed.tech/topics/implementation.md>), [ui](<https://devfeed.tech/topics/ui.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [android-permissions](<https://devfeed.tech/tags/android-permissions.md>), [android17](<https://devfeed.tech/tags/android17.md>), [androiddev](<https://devfeed.tech/tags/androiddev.md>), [compose](<https://devfeed.tech/tags/compose.md>), [development](<https://devfeed.tech/tags/development.md>), [feature](<https://devfeed.tech/tags/feature.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [permission](<https://devfeed.tech/tags/permission.md>)

### AI overview

A tutorial on implementing Android 17's system-rendered Location Button in Jetpack Compose. The button uses the USE_LOCATION_BUTTON permission and grants precise location for the current session, with local rendering fallback on older Android versions or when remote rendering fails.

### Source excerpt

Image generated using Gemini In this article, we will learn how to implement the new 📍Location button introduced in Android 17 in Jetpack Compose-based Android applications. Android 17 adds a system-rendered 📍Location Button that we can drop into the layout via a Jetpack library, and tapping it gives the app precise location for that session only, gated by a new USE_LOCATION_BUTTON permission. What the feature is Android now exposes a system-owned, standard location button that we can embed in our UI instead of designing a custom control. When the user taps it, the system handles the permission flow, then grants the app precise location for the current session only, rather than long-lived access. How it changes permissions Instead of immediately requesting ACCESS_FINE_LOCATION (and maybe ACCESS_COARSE_LOCATION) at runtime, we declare the new USE_LOCATION_BUTTON permission to host the button. <!-- Standard Coarse and Fine Location Permissions + onlyForLocationButton --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:usesPermissionFlags="onlyForLocationButton"/> <!-- Required system permission for rendering the LocationButton --> <uses-permission android:name="android.permission.USE_LOCATION_BUTTON" />Developer benefits Less custom permission boilerplate: We lean on system UX and the Jetpack library for the hardest parts of location consent. [versions] locationbuttonCompose = "1.0.0-alpha01" [libraries] androidx-locationbutton-compose = { group = "androidx.core.locationbutton", name = "locationbutton-compose", version.ref = "locationbuttonCompose" } Higher trust and clarity for users: the control looks and behaves consistently across apps, and session-only precise access is easier to understand than broader access. Implementation As we all know, Android development is now Compose-first, so we will implement it using the LocationButton composable provided by th

## From Permissions to Sessions: Rethinking Location Access in Android 17

DevFeed: [From Permissions to Sessions: Rethinking Location Access in Android 17](<https://devfeed.tech/articles/from-permissions-to-sessions-rethinking-location-access-in-android-17-25982.md>)

Original publisher: [Read original article](<https://proandroiddev.com/from-permissions-to-sessions-rethinking-location-access-in-android-17-5a13124b777d?source=rss-711ab22c5c77------2>)

Author: Nav Singh

Published: 2026-09-03T18:18:32Z

Content type: tutorial

Language: en

Sources: [Stories by Nav Singh 🇨🇦 on Medium](<https://devfeed.tech/sources/stories-by-nav-singh-on-medium.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>), [ui](<https://devfeed.tech/topics/ui.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [android-permissions](<https://devfeed.tech/tags/android-permissions.md>), [android17](<https://devfeed.tech/tags/android17.md>), [androiddev](<https://devfeed.tech/tags/androiddev.md>), [branding](<https://devfeed.tech/tags/branding.md>), [consent](<https://devfeed.tech/tags/consent.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [jetpack](<https://devfeed.tech/tags/jetpack.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [layout](<https://devfeed.tech/tags/layout.md>), [permissions](<https://devfeed.tech/tags/permissions.md>)

### AI overview

A tutorial on implementing Android 17's system-rendered Location Button in Jetpack Compose applications. It explains session-only precise location access, the USE_LOCATION_BUTTON permission, the required Jetpack library, fallback rendering, and UI customization.

### Source excerpt

Image generated using Gemini In this article, we will learn how to implement the new 📍Location button introduced in Android 17 in Jetpack Compose-based Android applications. Android 17 adds a system-rendered 📍Location Button that we can drop into the layout via a Jetpack library, and tapping it gives the app precise location for that session only, gated by a new USE_LOCATION_BUTTON permission. What the feature is Android now exposes a system-owned, standard location button that we can embed in our UI instead of designing a custom control. When the user taps it, the system handles the permission flow, then grants the app precise location for the current session only, rather than long-lived access. How it changes permissions Instead of immediately requesting ACCESS_FINE_LOCATION (and maybe ACCESS_COARSE_LOCATION) at runtime, we declare the new USE_LOCATION_BUTTON permission to host the button. <!-- Standard Coarse and Fine Location Permissions + onlyForLocationButton --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:usesPermissionFlags="onlyForLocationButton"/> <!-- Required system permission for rendering the LocationButton --> <uses-permission android:name="android.permission.USE_LOCATION_BUTTON" />Developer benefits Less custom permission boilerplate: We lean on system UX and the Jetpack library for the hardest parts of location consent. [versions] locationbuttonCompose = "1.0.0-alpha01" [libraries] androidx-locationbutton-compose = { group = "androidx.core.locationbutton", name = "locationbutton-compose", version.ref = "locationbuttonCompose" } Higher trust and clarity for users: the control looks and behaves consistently across apps, and session-only precise access is easier to understand than broader access. Implementation As we all know, Android development is now Compose-first, so we will implement it using the LocationButton composable provided by th

## Animating between numbers in Jetpack Compose

DevFeed: [Animating between numbers in Jetpack Compose](<https://devfeed.tech/articles/animating-between-numbers-in-jetpack-compose-25182.md>)

Original publisher: [Read original article](<https://joebirch.co/android/animating-between-numbers-in-jetpack-compose/>)

Author: hitherejoe

Published: 2026-09-02T12:37:43Z

Content type: tutorial

Language: en

Sources: [Joe Birch](<https://devfeed.tech/sources/joe-birch.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [ui](<https://devfeed.tech/topics/ui.md>), [API](<https://devfeed.tech/topics/api.md>), [Tooling](<https://devfeed.tech/topics/tooling.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [android-apps](<https://devfeed.tech/tags/android-apps.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [androiddev](<https://devfeed.tech/tags/androiddev.md>), [animation](<https://devfeed.tech/tags/animation.md>), [api](<https://devfeed.tech/tags/api.md>), [app-development](<https://devfeed.tech/tags/app-development.md>), [apps](<https://devfeed.tech/tags/apps.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [jetpackcompose](<https://devfeed.tech/tags/jetpackcompose.md>), [mobile-app-development](<https://devfeed.tech/tags/mobile-app-development.md>), [ui](<https://devfeed.tech/tags/ui.md>)

### AI overview

This tutorial explains how to animate changing numerical portfolio values in Jetpack Compose. It uses animateFloatAsState with a target value and a tween animation configured with a 500ms duration and FastOutSlowInEasing.

### Source excerpt

When it comes to displaying portfolio data inside of Sleevd, users can change the selected filters which will adjust the portfolio values based on that selection. Alongside the main graph, we show the total portfolio value along with some small statistics for collection counts. When the user moves between the filter options, the values of... Continue reading ->

## Proficient Android AI training program addresses AI-agent workflows for Android teams

DevFeed: [Proficient Android AI training program addresses AI-agent workflows for Android teams](<https://devfeed.tech/articles/android-development-is-changing-fast-don-t-be-the-engineer-catching-up-later-37908.md>)

Original publisher: [Read original article](<https://newsletter.jorgecastillo.dev/p/android-development-is-changing-fast>)

Author: Jorge Castillo

Published: 2026-08-25T07:21:15Z

Content type: opinion

Language: en

Sources: [Effective Android](<https://devfeed.tech/sources/effective-android.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [android-development](<https://devfeed.tech/topics/android-development.md>), [AI-assisted coding](<https://devfeed.tech/topics/ai-assisted-coding.md>), [AI Agent](<https://devfeed.tech/topics/ai-agent.md>), [Development](<https://devfeed.tech/topics/development.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>)

Tags: [ai-agents](<https://devfeed.tech/tags/ai-agents.md>), [ai-coding-agents](<https://devfeed.tech/tags/ai-coding-agents.md>), [android](<https://devfeed.tech/tags/android.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [productivity](<https://devfeed.tech/tags/productivity.md>), [workflows](<https://devfeed.tech/tags/workflows.md>)

### AI overview

The author describes common problems Android teams encounter when using AI coding agents, including repeated context, nondeterministic output, poorly reviewed code, generic prompts, fragile tests, and oversized pull requests. The article announces Proficient Android AI, a practical training program focused on improving AI-agent workflows for Android engineers and teams.

### Source excerpt

Proficient Android AI teaches Android engineers how to get ahead with AI agents now: better output, fewer wasted tokens, more deterministic results, and workflows built for real Android teams.

## Build intelligent Android apps: Introduction to Jetpacker

DevFeed: [Build intelligent Android apps: Introduction to Jetpacker](<https://devfeed.tech/articles/build-intelligent-android-apps-introduction-to-jetpacker-22681.md>)

Original publisher: [Read original article](<http://android-developers.googleblog.com/2026/07/build-intelligent-android-apps-introduction-jetpack.html>)

Author: Android Developers (noreply@blogger.com)

Published: 2026-07-21T13:00:00Z

Content type: tutorial

Language: en

Sources: [Android Developers Blog](<https://devfeed.tech/sources/android-developers-blog-3.md>)

Topics: [android-development](<https://devfeed.tech/topics/android-development.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>), [On-device AI](<https://devfeed.tech/topics/on-device-ai.md>), [Inference](<https://devfeed.tech/topics/inference.md>), [genai](<https://devfeed.tech/topics/genai.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>), [App](<https://devfeed.tech/topics/app.md>), [ui](<https://devfeed.tech/topics/ui.md>), [Google](<https://devfeed.tech/topics/google.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [apps](<https://devfeed.tech/tags/apps.md>), [genai](<https://devfeed.tech/tags/genai.md>), [google](<https://devfeed.tech/tags/google.md>), [inference](<https://devfeed.tech/tags/inference.md>), [on-device](<https://devfeed.tech/tags/on-device.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [ui](<https://devfeed.tech/tags/ui.md>)

### AI overview

This introduction to a technical blog series presents Jetpacker, an open-source Android showcase app built for Google I/O. It outlines choices involving on-device, cloud, and hybrid inference, Android system integration, and agentic flows, with later posts promising implementation guidance and code examples.

### Source excerpt

Posted by Jolanda Verhoef, Senior Developer Relations Engineer, Android Developer Relations Building GenAI features in your app usually means navigating through various models, APIs and architecture choices: Execution location: Where does your model run? On device, in the cloud, or both? Complexity: How complex is your setup? Are you doing a single inference call or do you need a more agentic flow? In-app or Android System: Should your feature be built into your Android app or does it fit better as an Android system integration? In this blog post series we'll navigate these choices with you. We will take you along on a journey, starting with a basic mobile app and transforming it into a personalized, intelligent, and agentic experience. Jetpacker: a demo travel app Jetpacker is a technical showcase app that our team built from the ground up for this year's Google I/O (built using Antigravity). At its core, Jetpacker helps users plan, explore, and enjoy their next big adventure. It shows an overview of your trips, the itinerary of each trip, and details of each event on that trip. Of course following all best practices of Android development, including a beautifully expressive Material UI design. And best of all? It's fully open source! Today we are publishing a series of technical blog posts diving deep into each of these features. We'll provide detailed implementation steps, code snippets, and architectural insights to help you build your own intelligent Android applications. On-device intelligence On-device features in Jetpacker: Summarizing trip itineraries, managing expenses, and voice notes Using an on-device model comes with no additional cloud inference costs, means you don't have to worry about internet connectivity, and lets users be confident that private information will be processed locally, on the device, without any of their data being sent to the cloud. In Jetpacker, we chose on-device inference for three of our features: The trip overview feature tra

## Practical Kotlin Multiplatform: Setting up the Kotlin Multiplatform Networking Module with Ktor

DevFeed: [Practical Kotlin Multiplatform: Setting up the Kotlin Multiplatform Networking Module with Ktor](<https://devfeed.tech/articles/practical-kotlin-multiplatform-setting-up-the-kotlin-multiplatform-networking-module-with-ktor-25190.md>)

Original publisher: [Read original article](<https://joebirch.co/android/practical-kotlin-multiplatform-setting-up-the-kotlin-multiplatform-networking-module-with-ktor/>)

Author: hitherejoe

Published: 2026-07-10T16:16:31Z

Content type: tutorial

Language: en

Sources: [Joe Birch](<https://devfeed.tech/sources/joe-birch.md>)

Topics: [Kotlin Multiplatform](<https://devfeed.tech/topics/kotlin-multiplatform.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Ktor](<https://devfeed.tech/topics/ktor.md>), [networking](<https://devfeed.tech/topics/networking.md>), [REST API](<https://devfeed.tech/topics/rest-api.md>), [Authentication](<https://devfeed.tech/topics/authentication.md>), [Firebase](<https://devfeed.tech/topics/firebase.md>), [Gradle](<https://devfeed.tech/topics/gradle.md>), [implementation](<https://devfeed.tech/topics/implementation.md>), [Android](<https://devfeed.tech/topics/android.md>), [iOS](<https://devfeed.tech/topics/ios.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [androiddev](<https://devfeed.tech/tags/androiddev.md>), [app-development](<https://devfeed.tech/tags/app-development.md>), [authentication](<https://devfeed.tech/tags/authentication.md>), [firebase](<https://devfeed.tech/tags/firebase.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [ios](<https://devfeed.tech/tags/ios.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [ktor](<https://devfeed.tech/tags/ktor.md>), [library](<https://devfeed.tech/tags/library.md>), [mobile-app-development](<https://devfeed.tech/tags/mobile-app-development.md>), [module](<https://devfeed.tech/tags/module.md>), [networking](<https://devfeed.tech/tags/networking.md>), [rest-api](<https://devfeed.tech/tags/rest-api.md>)

### AI overview

A tutorial series installment that sets up a Kotlin Multiplatform networking module with Ktor for shared Android and iOS code. It describes building a portable Firebase Authentication and Firestore REST API layer without relying on platform-specific SDKs.

### Source excerpt

This post is part one of a series adapted from Practical KMP, my book on building production Kotlin Multiplatform apps for Android and iOS. Part 1: Creating the Kotlin Multiplatform Module In this part of the book, we'll build the complete authentication remote store, defining a repository that handles every operation our app needs for... Continue reading ->

## Google IO 26: Gemini, Big Rocks, Opportunities for Android

DevFeed: [Google IO 26: Gemini, Big Rocks, Opportunities for Android](<https://devfeed.tech/articles/google-io-26-gemini-big-rocks-opportunities-for-android-29457.md>)

Original publisher: [Read original article](<https://medium.com/mobile-app-development-publication/google-io-26-gemini-big-rocks-opportunities-for-android-2d71e00c9bfb?source=rss----f9c208bdbb09---4>)

Author: Elye - A Dev By Grace

Published: 2026-07-05T09:06:38Z

Content type: article

Language: en

Sources: [Mobile App Development Publication - Medium](<https://devfeed.tech/sources/mobile-app-development-publication-medium.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [Google](<https://devfeed.tech/topics/google.md>), [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [AI Models](<https://devfeed.tech/topics/ai-models.md>), [android-development](<https://devfeed.tech/topics/android-development.md>), [AI tools for developers](<https://devfeed.tech/topics/ai-tools-for-developers.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [ai-models](<https://devfeed.tech/tags/ai-models.md>), [ai-tools-for-developers](<https://devfeed.tech/tags/ai-tools-for-developers.md>), [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [androiddev](<https://devfeed.tech/tags/androiddev.md>), [gemini](<https://devfeed.tech/tags/gemini.md>), [google](<https://devfeed.tech/tags/google.md>), [google-io](<https://devfeed.tech/tags/google-io.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [mobile-app-development](<https://devfeed.tech/tags/mobile-app-development.md>)

### AI overview

This article reviews Google I/O 26 with a focus on Gemini models, developer tools, the Android ecosystem, Android 17, and opportunities involving UI, performance, and AI.

### Source excerpt

In the AI Age, Google continue to thrive in its mobile ecosystem Continue reading on Mobile App Development Publication "

## Как мы мигрируем навигацию на Compose в Android-приложениях с 400+ экранами

DevFeed: [Как мы мигрируем навигацию на Compose в Android-приложениях с 400+ экранами](<https://devfeed.tech/articles/compose-android-400-30667.md>)

Original publisher: [Read original article](<https://habr.com/ru/companies/hh/articles/1044842/>)

Author: horseunnamed (hh.ru)

Published: 2026-06-09T08:00:40Z

Content type: article

Language: ru

Sources: [HeadHunter RU](<https://devfeed.tech/sources/headhunter-ru.md>)

Topics: [Compose](<https://devfeed.tech/topics/compose.md>), [Android](<https://devfeed.tech/topics/android.md>), [ui](<https://devfeed.tech/topics/ui.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [compose](<https://devfeed.tech/tags/compose.md>), [hh-ru](<https://devfeed.tech/tags/hh-ru.md>), [migration](<https://devfeed.tech/tags/migration.md>), [mobile-development](<https://devfeed.tech/tags/mobile-development.md>), [modo](<https://devfeed.tech/tags/modo.md>), [navigation](<https://devfeed.tech/tags/navigation.md>), [refactoring](<https://devfeed.tech/tags/refactoring.md>), [tag-08a48a9394c3](<https://devfeed.tech/tags/tag-08a48a9394c3.md>), [tag-ae979152fd5d](<https://devfeed.tech/tags/tag-ae979152fd5d.md>), [tag-f538878e20ff](<https://devfeed.tech/tags/tag-f538878e20ff.md>), [ui](<https://devfeed.tech/tags/ui.md>), [vj](<https://devfeed.tech/tags/vj.md>)

### AI overview

An Android tech lead at hh.ru describes the ongoing migration of two Android applications from Fragment-based navigation toward a Compose-first approach. The article explains the scale of the migration, the hierarchy of navigation containers, nested navigation flows, and multistack navigation between main application sections.

### Source excerpt

Привет, Хабр! Меня зовут Константин Дубинко, я -- Android-техлид в hh.ru. Сейчас мы заканчиваем большой переезд навигации в двух Android-приложениях -- для соискателей и работодателей. В этой статье я покажу, как у нас там устроена навигация, почему мы решили отказаться от Fragment-навигации и как превратили хаотичную миграцию с "островками" новой архитектуры в управляемый процесс с метриками и понятным планом работ. Заодно расскажу, какие решения сработали, какие -- нет, и что я сделал бы иначе, если бы начинал заново. Читать далее

## Android 17: 15 Important Changes to Keep Your App Working

DevFeed: [Android 17: 15 Important Changes to Keep Your App Working](<https://devfeed.tech/articles/android-17-15-important-changes-to-keep-your-app-working-29453.md>)

Original publisher: [Read original article](<https://medium.com/mobile-app-development-publication/android-17-15-important-changes-to-keep-your-app-working-99a93ae85f54?source=rss----f9c208bdbb09---4>)

Author: Elye - A Dev By Grace

Published: 2026-05-24T14:13:07Z

Content type: tutorial

Language: en

Sources: [Mobile App Development Publication - Medium](<https://devfeed.tech/sources/mobile-app-development-publication-medium.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [Development](<https://devfeed.tech/topics/development.md>), [android-development](<https://devfeed.tech/topics/android-development.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [app-development](<https://devfeed.tech/tags/app-development.md>), [coding](<https://devfeed.tech/tags/coding.md>), [development](<https://devfeed.tech/tags/development.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [mobile-app-development](<https://devfeed.tech/tags/mobile-app-development.md>), [performance](<https://devfeed.tech/tags/performance.md>), [software-development](<https://devfeed.tech/tags/software-development.md>)

### AI overview

This article outlines 15 changes developers should consider when preparing Android apps for Android 17, with emphasis on maintaining compatibility, performance, security, and Play Store compliance.

### Source excerpt

Prepare Your App for a More Secure, High Performance, and Android XR Ready Future. Continue reading on Mobile App Development Publication "

## An Android Developer's Journey from Learning to Build Apps to Practicing the Craft

DevFeed: [An Android Developer's Journey from Learning to Build Apps to Practicing the Craft](<https://devfeed.tech/articles/leave-me-behind-22819.md>)

Original publisher: [Read original article](<http://androidessence.com/leave-me-behind/>)

Author: Adam McNeilly

Published: 2026-05-17T00:00:00Z

Content type: opinion

Language: en

Sources: [Android Essence](<https://devfeed.tech/sources/android-essence.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [android-development](<https://devfeed.tech/topics/android-development.md>), [Java](<https://devfeed.tech/topics/java.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [AdventureX 2026](<https://devfeed.tech/topics/adventurex2026.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [app](<https://devfeed.tech/tags/app.md>), [hackathons](<https://devfeed.tech/tags/hackathons.md>), [java](<https://devfeed.tech/tags/java.md>), [learning](<https://devfeed.tech/tags/learning.md>), [programming](<https://devfeed.tech/tags/programming.md>)

### AI overview

The author reflects on learning Android development, beginning with a todo list app and later developing and maintaining applications with practical benefits. The article emphasizes learning from courses, practicing by building, and connecting with other software engineers through hackathons.

### Source excerpt

"If you don't learn how to use AI, you're going to be left behind." So leave me behind. I learned to build Android applications in 2014. I was in college taking a Java programming class, when a classmate shared a free online course to learn Android development. The goal was short: build a todo list app with local storage. When I completed the minimum requirements, I unplugged my phone from my laptop and went over to my parents to show them what I built. I often refer to this as my "lightbulb moment". Here in my hands was a real, tangible piece of software that I built and could interact with. It wasn't the first time I programmed something, but it was the first time I had an application on a device that I could carry over and show someone. The app lived in my pocket, always available when I needed it, to help me stay organized and productive.

## How Compose is changing UI development

DevFeed: [How Compose is changing UI development](<https://devfeed.tech/articles/new-big-challenger-in-ui-development-39255.md>)

Original publisher: [Read original article](<https://kt.academy/article/compose_new_challenger>)

Published: 2026-05-11T00:00:00Z

Content type: opinion

Language: en

Sources: [Kt. Academy](<https://devfeed.tech/sources/kt-academy.md>)

Topics: [Compose](<https://devfeed.tech/topics/compose.md>), [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Android](<https://devfeed.tech/topics/android.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Web Development](<https://devfeed.tech/topics/web-development.md>), [React](<https://devfeed.tech/topics/react.md>), [Vue.js](<https://devfeed.tech/topics/vue.md>), [Web](<https://devfeed.tech/topics/web.md>), [wasm](<https://devfeed.tech/topics/wasm.md>)

Tags: [adaptive](<https://devfeed.tech/tags/adaptive.md>), [android](<https://devfeed.tech/tags/android.md>), [android-compose](<https://devfeed.tech/tags/android-compose.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [compose](<https://devfeed.tech/tags/compose.md>), [desktop](<https://devfeed.tech/tags/desktop.md>), [frontend-development](<https://devfeed.tech/tags/frontend-development.md>), [ios](<https://devfeed.tech/tags/ios.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [react](<https://devfeed.tech/tags/react.md>), [screenshot-testing](<https://devfeed.tech/tags/screenshot-testing.md>), [workshop-learning-programming](<https://devfeed.tech/tags/workshop-learning-programming.md>)

### AI overview

This video transcript argues that Compose, a Kotlin-based declarative UI framework, is expanding beyond Android to iOS, desktop, and websites. It highlights Compose's shared tooling, adaptive layouts, previews, screenshot testing, and native animations while acknowledging weaker browser debugging support than traditional web tools.

### Source excerpt

How Compose is changing the game in UI development.

## Android Development on Android: A Self-Contained Setup

DevFeed: [Android Development on Android: A Self-Contained Setup](<https://devfeed.tech/articles/android-development-on-android-a-self-contained-setup-38660.md>)

Original publisher: [Read original article](<https://krossovochkin.com/posts/2026_04_26_android_development_on_android/>)

Published: 2026-04-26T00:00:00Z

Content type: tutorial

Language: en

Sources: [Vasya Drobushkov](<https://devfeed.tech/sources/vasya-drobushkov.md>)

Topics: [Termux](<https://devfeed.tech/topics/termux.md>), [android-development](<https://devfeed.tech/topics/android-development.md>), [Command-line interface](<https://devfeed.tech/topics/cli.md>), [Gradle](<https://devfeed.tech/topics/gradle.md>), [Java](<https://devfeed.tech/topics/java.md>), [Git](<https://devfeed.tech/topics/git.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [android-studio](<https://devfeed.tech/tags/android-studio.md>), [build](<https://devfeed.tech/tags/build.md>), [cli](<https://devfeed.tech/tags/cli.md>), [development](<https://devfeed.tech/tags/development.md>), [git](<https://devfeed.tech/tags/git.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [java](<https://devfeed.tech/tags/java.md>)

### AI overview

A practical guide to setting up Android development directly on an Android phone with Termux. It covers installing the JDK, Android command-line tools, platform and build tools, Gradle, and a Termux-compatible aapt2 binary, then cloning and assembling a project and authenticating Gemini.

### Source excerpt

I use my phone on a daily basis for dozens of various things. This is truly my pocket computer that helps me with many different tasks. Since the first time I had an Android phone until nowadays, the flexibility of the platform has been very astonishing Recently, I've learned about Termux - it is a UNIX terminal running on the phone. Yes, just directly on a mobile phone you have access to git, ssh, curl, and other terminal commands. It is very powerful by itself to be able to connect to a remote server from a phone and do sth, but one thing came to my mind - whether it can be used to work on Android projects

## Android Skills: Expert Instructions for Your AI Agent

DevFeed: [Android Skills: Expert Instructions for Your AI Agent](<https://devfeed.tech/articles/android-skills-expert-instructions-for-your-ai-agent-24902.md>)

Original publisher: [Read original article](<https://blog.blundellapps.co.uk/android-skills-expert-instructions-for-your-ai-agent/>)

Author: blundell

Published: 2026-04-24T22:10:46Z

Content type: tutorial

Language: en

Sources: [Blundell](<https://devfeed.tech/sources/blundell.md>)

Topics: [Android skills](<https://devfeed.tech/topics/android-skills.md>), [Agent Skills](<https://devfeed.tech/topics/agent-skills.md>), [AI Agent](<https://devfeed.tech/topics/ai-agent.md>), [Claude Code](<https://devfeed.tech/topics/claude-code.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>), [GitHub](<https://devfeed.tech/topics/github.md>)

Tags: [agent-skills](<https://devfeed.tech/tags/agent-skills.md>), [ai](<https://devfeed.tech/tags/ai.md>), [ai-agent](<https://devfeed.tech/tags/ai-agent.md>), [android](<https://devfeed.tech/tags/android.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [android-skills](<https://devfeed.tech/tags/android-skills.md>), [androiddev](<https://devfeed.tech/tags/androiddev.md>), [claude-code](<https://devfeed.tech/tags/claude-code.md>), [gemini](<https://devfeed.tech/tags/gemini.md>), [github](<https://devfeed.tech/tags/github.md>), [intermediate](<https://devfeed.tech/tags/intermediate.md>), [reference](<https://devfeed.tech/tags/reference.md>), [reference-ai-androiddev-claude-code-gemini](<https://devfeed.tech/tags/reference-ai-androiddev-claude-code-gemini.md>), [skills](<https://devfeed.tech/tags/skills.md>)

### AI overview

This tutorial explains Google's Android skills repository and the open agent-skills format, then shows how to make the skills available in Claude Code instead of using the repository's default Gemini CLI setup.

### Source excerpt

Google just published a set of Android skills a collection of expert, AI-optimised instructions covering the most common and painful Android development workflows. (Upgrading to AGP 9, migrating XML layouts to Compose, wiring up Navigation 3.) AI automated step-by-step procedures grounded in official Android best practices. The GitHub repo defaults to wiring them into Gemini [...] The post Android Skills: Expert Instructions for Your AI Agent first appeared on Blundell.

## A Practical Guide to Paging 3 in Jetpack Compose

DevFeed: [A Practical Guide to Paging 3 in Jetpack Compose](<https://devfeed.tech/articles/a-practical-guide-to-paging-3-in-jetpack-compose-29452.md>)

Original publisher: [Read original article](<https://medium.com/mobile-app-development-publication/a-practical-guide-to-paging-3-in-jetpack-compose-e88f56c5b2df?source=rss----f9c208bdbb09---4>)

Author: Elye - A Dev By Grace

Published: 2026-04-07T08:16:16Z

Content type: tutorial

Language: en

Sources: [Mobile App Development Publication - Medium](<https://devfeed.tech/sources/mobile-app-development-publication-medium.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Android](<https://devfeed.tech/topics/android.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [GraphQL](<https://devfeed.tech/topics/graphql.md>), [API](<https://devfeed.tech/topics/api.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>), [mobile-app-development](<https://devfeed.tech/topics/mobile-app-development.md>), [App](<https://devfeed.tech/topics/app.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [androiddev](<https://devfeed.tech/tags/androiddev.md>), [api](<https://devfeed.tech/tags/api.md>), [graphql](<https://devfeed.tech/tags/graphql.md>), [guide](<https://devfeed.tech/tags/guide.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [mobile-app-development](<https://devfeed.tech/tags/mobile-app-development.md>), [programming](<https://devfeed.tech/tags/programming.md>)

### AI overview

A practical tutorial on using Paging 3 with Jetpack Compose to paginate server data from a GraphQL API in an Android application. It covers the limitations of loading very large lists at once and introduces built-in handling for loading states, retries, scroll-triggered fetching, and empty states.

### Source excerpt

How To Elegantly Page Your Server Data on Your Android App Continue reading on Mobile App Development Publication "

## Exploring CompositionLocal API internals in Jetpack Compose

DevFeed: [Exploring CompositionLocal API internals in Jetpack Compose](<https://devfeed.tech/articles/exploring-compositionlocal-api-internals-in-jetpack-compose-25717.md>)

Original publisher: [Read original article](<https://blog.shreyaspatil.dev/exploring-compositionlocal-api-internals-in-jetpack-compose/>)

Author: Shreyas Patil

Published: 2026-03-09T05:19:42Z

Content type: article

Language: en

Sources: [Shreyas Patil's Blog](<https://devfeed.tech/sources/shreyas-patil-s-blog.md>)

Topics: [Compose](<https://devfeed.tech/topics/compose.md>), [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [API](<https://devfeed.tech/topics/api.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [compose](<https://devfeed.tech/tags/compose.md>), [data](<https://devfeed.tech/tags/data.md>), [deep-dive](<https://devfeed.tech/tags/deep-dive.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [internals](<https://devfeed.tech/tags/internals.md>), [jetpack](<https://devfeed.tech/tags/jetpack.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [source](<https://devfeed.tech/tags/source.md>)

### AI overview

A deep dive into Jetpack Compose's CompositionLocal API, explaining how values flow implicitly through the composition tree and how the system is implemented with class hierarchies, value holders, persistent maps, and Composer integration.

### Source excerpt

Deep dive into the internals of Jetpack Compose's CompositionLocal API. Trace how data flows implicitly through the composition tree under the hood.

[Next page](<https://devfeed.tech/tags/android-development.md?cursor=WyIyMDI2LTAzLTA5VDA1OjE5OjQyKzAwOjAwIiwgIjJkNmFiYzQ4LTZlM2EtNDdlNC1iOGZlLTMwNzcwOTdmYWNjZSJd>)