# Blundell

Android Developer Tutorials

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

## Pair Programming With Your AI Agent

DevFeed: [Pair Programming With Your AI Agent](<https://devfeed.tech/articles/pair-programming-with-your-ai-agent-24913.md>)

Original publisher: [Read original article](<https://blog.blundellapps.co.uk/pair-programming-with-your-ai-agent/>)

Author: blundell

Published: 2026-09-06T21:50:09Z

Content type: tutorial

Language: en

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

Topics: [AI Agent](<https://devfeed.tech/topics/ai-agent.md>), [Local AI](<https://devfeed.tech/topics/local-ai.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [Command-line interface](<https://devfeed.tech/topics/cli.md>)

Tags: [agent](<https://devfeed.tech/tags/agent.md>), [ai](<https://devfeed.tech/tags/ai.md>), [ai-agent](<https://devfeed.tech/tags/ai-agent.md>), [androiddev](<https://devfeed.tech/tags/androiddev.md>), [antigravity](<https://devfeed.tech/tags/antigravity.md>), [cli](<https://devfeed.tech/tags/cli.md>), [gemini](<https://devfeed.tech/tags/gemini.md>), [geminicli](<https://devfeed.tech/tags/geminicli.md>), [intermediate](<https://devfeed.tech/tags/intermediate.md>), [intermediate-reference-ai-androiddev-gemini-geminicli-pairing](<https://devfeed.tech/tags/intermediate-reference-ai-androiddev-gemini-geminicli-pairing.md>), [pair](<https://devfeed.tech/tags/pair.md>), [pairing](<https://devfeed.tech/tags/pairing.md>), [programming](<https://devfeed.tech/tags/programming.md>), [reference](<https://devfeed.tech/tags/reference.md>), [terminal](<https://devfeed.tech/tags/terminal.md>)

### AI overview

This tutorial presents sessions with a local AI agent as pair programming and maps four classic pairing styles--unstructured, Driver/Navigator, Strong-Style Pairing, and Ping Pong--to AI-assisted development. It uses Antigravity CLI for examples while noting that the approach is not specific to that tool.

### Source excerpt

This post explains how to treat a session with a local AI agent as a pair programming session, and how the four classic pairing styles map onto working with one. I'll use Antigravity CLI for the concrete examples, though nothing here is specific to it. Swap in whichever agent sits in your terminal. The idea [...] The post Pair Programming With Your AI Agent first appeared on Blundell.

## Google I/O 2026: The Sessions Worth Your Time

DevFeed: [Google I/O 2026: The Sessions Worth Your Time](<https://devfeed.tech/articles/google-i-o-2026-the-sessions-worth-your-time-24910.md>)

Original publisher: [Read original article](<https://blog.blundellapps.co.uk/google-i-o-2026-the-sessions-worth-your-time/>)

Author: blundell

Published: 2026-06-02T17:22:00Z

Content type: opinion

Language: en

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

Topics: [Google](<https://devfeed.tech/topics/google.md>), [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [Android](<https://devfeed.tech/topics/android.md>), [Model Context Protocol](<https://devfeed.tech/topics/model-context-protocol.md>), [Jetpack](<https://devfeed.tech/topics/jetpack.md>), [App](<https://devfeed.tech/topics/app.md>)

Tags: [2026](<https://devfeed.tech/tags/2026.md>), [agent](<https://devfeed.tech/tags/agent.md>), [agentic](<https://devfeed.tech/tags/agentic.md>), [ai](<https://devfeed.tech/tags/ai.md>), [android](<https://devfeed.tech/tags/android.md>), [androiddev](<https://devfeed.tech/tags/androiddev.md>), [antigravity](<https://devfeed.tech/tags/antigravity.md>), [generative-ui](<https://devfeed.tech/tags/generative-ui.md>), [google](<https://devfeed.tech/tags/google.md>), [google-i-o](<https://devfeed.tech/tags/google-i-o.md>), [google-io](<https://devfeed.tech/tags/google-io.md>), [intermediate](<https://devfeed.tech/tags/intermediate.md>), [jetpack](<https://devfeed.tech/tags/jetpack.md>), [mcp](<https://devfeed.tech/tags/mcp.md>), [reference](<https://devfeed.tech/tags/reference.md>), [reference-androiddev-google-io](<https://devfeed.tech/tags/reference-androiddev-google-io.md>)

### AI overview

An opinionated guide to the Google I/O 2026 sessions most relevant to developers. It highlights Gemini updates, agent transaction protocols, generative UI in Google Search, and Android App Functions, which are presented as being in preview and enabling assistants to call app capabilities.

### Source excerpt

Like every year, I binge-watched I/O. And like every year I came out the other side with more links than time. A fire-hose of announcements, most of which you'll never touch, a handful of which will change how you work next week. Here I filter for you. Links to the sessions are inline so you [...] The post Google I/O 2026: The Sessions Worth Your Time first appeared on Blundell.

## 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.

## Local AI Setup Guide for Android Developers

DevFeed: [Local AI Setup Guide for Android Developers](<https://devfeed.tech/articles/zero-to-ai-an-android-developer-s-vital-local-setup-24918.md>)

Original publisher: [Read original article](<https://blog.blundellapps.co.uk/zero-to-ai-an-android-developers-vital-local-setup/>)

Author: blundell

Published: 2026-01-18T14:03:28Z

Content type: tutorial

Language: en

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

Topics: [android-development](<https://devfeed.tech/topics/android-development.md>), [Ollama](<https://devfeed.tech/topics/ollama.md>), [gemma](<https://devfeed.tech/topics/gemma.md>), [Large Language Model](<https://devfeed.tech/topics/llm.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [beginner](<https://devfeed.tech/tags/beginner.md>), [beginner-reference](<https://devfeed.tech/tags/beginner-reference.md>), [gemma](<https://devfeed.tech/tags/gemma.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [intermediate](<https://devfeed.tech/tags/intermediate.md>), [llm](<https://devfeed.tech/tags/llm.md>), [local](<https://devfeed.tech/tags/local.md>), [offline](<https://devfeed.tech/tags/offline.md>), [ollama](<https://devfeed.tech/tags/ollama.md>), [reference](<https://devfeed.tech/tags/reference.md>)

### AI overview

A Day 1 setup guide for Android developers that recommends AI-focused browser resources and Ollama for running open-source models locally. It discusses Gemma 3, including its multimodal capabilities, 128k-token context window, and hardware considerations.

### Source excerpt

Forget just installing Android Studio and calling it a day. To operate at scale, you need a local environment that augments your engineering intuition with LLM-powered efficiency. Here is your Day 1 guide to setting up your machine for success. The post Zero to AI: An Android Developer's Vital Local Setup first appeared on Blundell.

## Using Google Gemini in a Python Script to Fix Static Analysis Issues

DevFeed: [Using Google Gemini in a Python Script to Fix Static Analysis Issues](<https://devfeed.tech/articles/linting-automated-ai-powered-static-analysis-with-gemini-24911.md>)

Original publisher: [Read original article](<https://blog.blundellapps.co.uk/linting-automated-ai-powered-static-analysis-with-gemini/>)

Author: blundell

Published: 2025-09-23T16:24:26Z

Content type: tutorial

Language: en

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

Topics: [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [Code quality](<https://devfeed.tech/topics/code-quality.md>), [Python](<https://devfeed.tech/topics/python.md>), [Google](<https://devfeed.tech/topics/google.md>), [Large Language Model](<https://devfeed.tech/topics/llm.md>), [Refactoring](<https://devfeed.tech/topics/refactoring.md>), [context window](<https://devfeed.tech/topics/context-window.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [androiddev](<https://devfeed.tech/tags/androiddev.md>), [build](<https://devfeed.tech/tags/build.md>), [code-quality](<https://devfeed.tech/tags/code-quality.md>), [context-window](<https://devfeed.tech/tags/context-window.md>), [detekt](<https://devfeed.tech/tags/detekt.md>), [gemini](<https://devfeed.tech/tags/gemini.md>), [google](<https://devfeed.tech/tags/google.md>), [intermediate](<https://devfeed.tech/tags/intermediate.md>), [python](<https://devfeed.tech/tags/python.md>), [refactoring](<https://devfeed.tech/tags/refactoring.md>), [reference](<https://devfeed.tech/tags/reference.md>), [reference-ai-androiddev-detekt-gemini](<https://devfeed.tech/tags/reference-ai-androiddev-detekt-gemini.md>)

### AI overview

This tutorial describes building a Python script that uses Google Gemini to automatically fix static analysis issues. It discusses the limitations of one-shot fixes, including LLM context-window limits, and explains how to curate the context sent to the model.

### Source excerpt

Tired of fixing endless linting errors? What if an AI could do it for you? In this post, we'll walk through how to build a Python script that uses Google's Gemini to automatically fix static analysis issues, exploring the process and the lessons learned along the way. This is a journey from a simple idea [...] The post Linting, Automated: AI-Powered Static Analysis with Gemini first appeared on Blundell.

## Google I/O 2025: AI developments and implications for Android developers

DevFeed: [Google I/O 2025: AI developments and implications for Android developers](<https://devfeed.tech/articles/google-i-o-2025-ai-unleashed-what-android-devs-need-to-know-24909.md>)

Original publisher: [Read original article](<https://blog.blundellapps.co.uk/google-i-o-2025-ai-unleashed-what-android-devs-need-to-know/>)

Author: blundell

Published: 2025-05-23T12:47:47Z

Content type: article

Language: en

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

Topics: [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [Android](<https://devfeed.tech/topics/android.md>), [Google](<https://devfeed.tech/topics/google.md>), [On-device AI](<https://devfeed.tech/topics/on-device-ai.md>), [Google AI](<https://devfeed.tech/topics/google-ai.md>), [gemma](<https://devfeed.tech/topics/gemma.md>)

Tags: [2025](<https://devfeed.tech/tags/2025.md>), [ai](<https://devfeed.tech/tags/ai.md>), [android](<https://devfeed.tech/tags/android.md>), [androiddev](<https://devfeed.tech/tags/androiddev.md>), [blog-post](<https://devfeed.tech/tags/blog-post.md>), [developer](<https://devfeed.tech/tags/developer.md>), [google](<https://devfeed.tech/tags/google.md>), [intermediate](<https://devfeed.tech/tags/intermediate.md>), [reference](<https://devfeed.tech/tags/reference.md>)

### AI overview

This article reviews Google I/O 2025 keynote themes related to Gemini, on-device AI, the Gemma family, and AI-assisted Android development. It also discusses reported growth in Google's processed token volume and the implications for Android developers.

### Source excerpt

The intro before the intro. Like every year I watched the keynote & developer keynote with excitement, taking my usual notes and reactive thoughts as it streams. This year though instead of myself turning those thoughts into a blog post, I asked Gemini to do it! This post is the outcome of using Gemini's new [...] The post Google I/O 2025: AI Unleashed - What Android Devs Need to Know! first appeared on Blundell.

## Choosing Wisely: for vs. forEach in Kotlin (A Thinking Dev's Perspective)

DevFeed: [Choosing Wisely: for vs. forEach in Kotlin (A Thinking Dev's Perspective)](<https://devfeed.tech/articles/choosing-wisely-for-vs-foreach-in-kotlin-a-thinking-dev-s-perspective-24905.md>)

Original publisher: [Read original article](<https://blog.blundellapps.co.uk/choosing-wisely-for-vs-foreach-in-kotlin-a-thinking-devs-perspective/>)

Author: blundell

Published: 2025-04-04T14:25:30Z

Content type: article

Language: en

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

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

Tags: [androiddev](<https://devfeed.tech/tags/androiddev.md>), [code](<https://devfeed.tech/tags/code.md>), [dev](<https://devfeed.tech/tags/dev.md>), [foreach](<https://devfeed.tech/tags/foreach.md>), [functional](<https://devfeed.tech/tags/functional.md>), [intermediate](<https://devfeed.tech/tags/intermediate.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [loops](<https://devfeed.tech/tags/loops.md>), [programming](<https://devfeed.tech/tags/programming.md>), [readability](<https://devfeed.tech/tags/readability.md>), [reference](<https://devfeed.tech/tags/reference.md>), [reference-androiddev-kotlin](<https://devfeed.tech/tags/reference-androiddev-kotlin.md>), [structure](<https://devfeed.tech/tags/structure.md>), [syntax](<https://devfeed.tech/tags/syntax.md>)

### AI overview

This Kotlin development article argues against reflexively choosing forEach. It compares forEach with traditional for loops and dedicated functional operators, emphasizing readability, explicit control, side effects, and clearer data flow.

### Source excerpt

The forEach loop, are you using it without thinking? In Kotlin, empirically forEach is often the go-to loop, it's pragmatically close at reach in the IDE auto-complete, but is it always the right choice? This post argues that for loops deserve more consideration, offering clarity and control that forEach sometimes lacks. Let's discuss why a [...] The post Choosing Wisely: for vs. forEach in Kotlin (A Thinking Dev's Perspective) first appeared on Blundell.

## Getting Started with Gemma 3 LLM on Android for On-Device Inference

DevFeed: [Getting Started with Gemma 3 LLM on Android for On-Device Inference](<https://devfeed.tech/articles/get-started-with-gemma-3-llm-on-android-now-24908.md>)

Original publisher: [Read original article](<https://blog.blundellapps.co.uk/get-started-with-gemma-3-llm-on-android-now/>)

Author: blundell

Published: 2025-03-12T22:11:14Z

Content type: tutorial

Language: en

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

Topics: [gemma](<https://devfeed.tech/topics/gemma.md>), [On-device AI](<https://devfeed.tech/topics/on-device-ai.md>), [Large Language Model](<https://devfeed.tech/topics/llm.md>), [Android](<https://devfeed.tech/topics/android.md>), [Inference](<https://devfeed.tech/topics/inference.md>), [MediaPipe](<https://devfeed.tech/topics/mediapipe.md>), [App](<https://devfeed.tech/topics/app.md>), [Fine-tuning](<https://devfeed.tech/topics/fine-tuning.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [androiddev](<https://devfeed.tech/tags/androiddev.md>), [fine-tuning](<https://devfeed.tech/tags/fine-tuning.md>), [gemma](<https://devfeed.tech/tags/gemma.md>), [inference](<https://devfeed.tech/tags/inference.md>), [intermediate](<https://devfeed.tech/tags/intermediate.md>), [llm](<https://devfeed.tech/tags/llm.md>), [mediapipe](<https://devfeed.tech/tags/mediapipe.md>), [on-device](<https://devfeed.tech/tags/on-device.md>), [reference](<https://devfeed.tech/tags/reference.md>), [tutorial](<https://devfeed.tech/tags/tutorial.md>)

### AI overview

A tutorial for integrating the Gemma 3 1B open-weight language model into an Android app for on-device inference. It covers downloading the model after installation, using MediaPipe for inference, and the trade-offs involving model size, performance, and device compatibility.

### Source excerpt

This post gets you started with the new Gemma 3 model for on-device inference. Giving you the simplest steps to get started with AI on Android. Gemma 3 1B is a new model size in the Gemma family of open weight models. When deploying small language models (SLMs) in production settings, models need to be small [...] The post Get started with Gemma 3 LLM on Android now! first appeared on Blundell.

## Room Debug DAOs in Android: Streamlining Your Workflow

DevFeed: [Room Debug DAOs in Android: Streamlining Your Workflow](<https://devfeed.tech/articles/room-debug-daos-in-android-streamlining-your-workflow-24915.md>)

Original publisher: [Read original article](<https://blog.blundellapps.co.uk/room-debug-daos-in-android-streamlining-your-workflow/>)

Author: blundell

Published: 2025-02-22T20:53:27Z

Content type: tutorial

Language: en

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

Topics: [LineageOS](<https://devfeed.tech/topics/lineageos.md>), [debug](<https://devfeed.tech/topics/debug.md>), [Tutorial](<https://devfeed.tech/topics/tutorial.md>), [Databases](<https://devfeed.tech/topics/databases.md>), [Persistence](<https://devfeed.tech/topics/persistence.md>), [Code generation](<https://devfeed.tech/topics/code-generation.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [androiddev](<https://devfeed.tech/tags/androiddev.md>), [code-generation](<https://devfeed.tech/tags/code-generation.md>), [database](<https://devfeed.tech/tags/database.md>), [debug](<https://devfeed.tech/tags/debug.md>), [debug-tools](<https://devfeed.tech/tags/debug-tools.md>), [developer-tools](<https://devfeed.tech/tags/developer-tools.md>), [intermediate](<https://devfeed.tech/tags/intermediate.md>), [persistence](<https://devfeed.tech/tags/persistence.md>), [reference](<https://devfeed.tech/tags/reference.md>), [reference-androiddev-database-debug-tools-room](<https://devfeed.tech/tags/reference-androiddev-database-debug-tools-room.md>), [room](<https://devfeed.tech/tags/room.md>), [tutorial](<https://devfeed.tech/tags/tutorial.md>)

### AI overview

This tutorial explains how to create debug-only Room DAOs in Android using separate debug and release source sets. The approach adds developer-focused database operations, such as deleting all cached items, to debug builds while keeping them unavailable in production builds.

### Source excerpt

This blog post explains how to create Room DAOs specifically for your Android debug build. These debug-only DAOs enable you to implement developer-centric features without affecting your production app. Keeping your codebase clean is essential for long-term maintainability. Debug-only DAOs help achieve this by isolating developer tools from user-facing features. Consider an app that caches [...] The post Room Debug DAOs in Android: Streamlining Your Workflow first appeared on Blundell.

## Using a Custom Gradle Plugin to Configure the BugSee Android SDK

DevFeed: [Using a Custom Gradle Plugin to Configure the BugSee Android SDK](<https://devfeed.tech/articles/android-bugsee-sdk-ignore-the-docs-do-this-instead-24899.md>)

Original publisher: [Read original article](<https://blog.blundellapps.co.uk/android-bugsee-sdk-ignore-the-docs-do-this-instead/>)

Author: blundell

Published: 2025-01-30T21:43:46Z

Content type: tutorial

Language: en

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

Topics: [Android](<https://devfeed.tech/topics/android.md>), [Gradle](<https://devfeed.tech/topics/gradle.md>), [configuration](<https://devfeed.tech/topics/configuration.md>), [SDKs](<https://devfeed.tech/topics/sdks.md>), [Library](<https://devfeed.tech/topics/library.md>), [iOS](<https://devfeed.tech/topics/ios.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [gradle-plugin](<https://devfeed.tech/tags/gradle-plugin.md>), [intermediate](<https://devfeed.tech/tags/intermediate.md>), [ios](<https://devfeed.tech/tags/ios.md>), [libraries](<https://devfeed.tech/tags/libraries.md>), [monitoring](<https://devfeed.tech/tags/monitoring.md>), [reference](<https://devfeed.tech/tags/reference.md>), [sdk](<https://devfeed.tech/tags/sdk.md>)

### AI overview

This tutorial explains how to configure the BugSee Android SDK through a custom Gradle plugin. It moves dependency setup, library initialization, token configuration, settings, and plugin application into a more modular structure with clearer separation of concerns.

### Source excerpt

When introducing 3rd party libraries (like BugSee), often their configuration is dumped into your build.gradle/application:onCreate and mixed with everything else. This post shows you how to have cleaner, more maintainable code by creating your own gradle plugin. BugSee is a Flight recorder for your iOS and Android apps "See video, network and logs that led [...] The post Android Bugsee SDK: Ignore the Docs, Do THIS Instead first appeared on Blundell.

## Android Dynamic Animated SVGs (with Lottie Dynamic Properties)

DevFeed: [Android Dynamic Animated SVGs (with Lottie Dynamic Properties)](<https://devfeed.tech/articles/android-dynamic-animated-svgs-with-lottie-dynamic-properties-24900.md>)

Original publisher: [Read original article](<https://blog.blundellapps.co.uk/android-dynamic-animated-svgs-with-lottie-dynamic-properties/>)

Author: blundell

Published: 2025-01-04T20:24:47Z

Content type: tutorial

Language: en

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

Topics: [Android](<https://devfeed.tech/topics/android.md>), [Tutorial](<https://devfeed.tech/topics/tutorial.md>), [SVG](<https://devfeed.tech/topics/svg.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [androiddev](<https://devfeed.tech/tags/androiddev.md>), [animation](<https://devfeed.tech/tags/animation.md>), [compose](<https://devfeed.tech/tags/compose.md>), [demo](<https://devfeed.tech/tags/demo.md>), [dependencies](<https://devfeed.tech/tags/dependencies.md>), [experimental](<https://devfeed.tech/tags/experimental.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [intermediate](<https://devfeed.tech/tags/intermediate.md>), [intermediate-tutorial-android-androiddev-animation-compose-lottie-svg](<https://devfeed.tech/tags/intermediate-tutorial-android-androiddev-animation-compose-lottie-svg.md>), [lottie](<https://devfeed.tech/tags/lottie.md>), [project](<https://devfeed.tech/tags/project.md>), [reference](<https://devfeed.tech/tags/reference.md>), [rotation](<https://devfeed.tech/tags/rotation.md>), [scale](<https://devfeed.tech/tags/scale.md>), [svg](<https://devfeed.tech/tags/svg.md>), [tutorial](<https://devfeed.tech/tags/tutorial.md>)

### AI overview

A tutorial on using Lottie Dynamic Properties in Android to control animation properties such as color, opacity, scale, and rotation at runtime. It explains how to identify Lottie KeyPaths from resolved in-memory code and apply dynamic property changes to Lottie images.

### Source excerpt

Learn how to have runtime control of all parts of an animation or image, the color, opacity, scale, rotation .. any property within your SVG animation using Lottie Dynamic Properties. This tutorial is going to explain Lottie Dynamic Properties. Dynamic Properties are a way of controlling at runtime, the different parts of your animation. You [...] The post Android Dynamic Animated SVGs (with Lottie Dynamic Properties) first appeared on Blundell.

## OCR with Gemini LLM on Android

DevFeed: [OCR with Gemini LLM on Android](<https://devfeed.tech/articles/ocr-with-gemini-llm-on-android-24912.md>)

Original publisher: [Read original article](<https://blog.blundellapps.co.uk/ocr-with-gemini-llm-on-android/>)

Author: blundell

Published: 2024-04-06T13:44:56Z

Content type: tutorial

Language: en

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

Topics: [AI Models](<https://devfeed.tech/topics/ai-models.md>), [API](<https://devfeed.tech/topics/api.md>), [Large Language Model](<https://devfeed.tech/topics/llm.md>), [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [SDKs](<https://devfeed.tech/topics/sdks.md>), [Google](<https://devfeed.tech/topics/google.md>), [LineageOS](<https://devfeed.tech/topics/lineageos.md>), [multimodal](<https://devfeed.tech/topics/multimodal.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [ai-models](<https://devfeed.tech/tags/ai-models.md>), [android](<https://devfeed.tech/tags/android.md>), [api](<https://devfeed.tech/tags/api.md>), [build](<https://devfeed.tech/tags/build.md>), [code](<https://devfeed.tech/tags/code.md>), [gemini](<https://devfeed.tech/tags/gemini.md>), [generative](<https://devfeed.tech/tags/generative.md>), [generative-ai](<https://devfeed.tech/tags/generative-ai.md>), [google](<https://devfeed.tech/tags/google.md>), [google-gemini](<https://devfeed.tech/tags/google-gemini.md>), [images](<https://devfeed.tech/tags/images.md>), [intermediate](<https://devfeed.tech/tags/intermediate.md>), [llm](<https://devfeed.tech/tags/llm.md>), [multimodal](<https://devfeed.tech/tags/multimodal.md>), [recognition](<https://devfeed.tech/tags/recognition.md>), [reference](<https://devfeed.tech/tags/reference.md>), [reference-android-gemini-llm](<https://devfeed.tech/tags/reference-android-gemini-llm.md>), [sdk](<https://devfeed.tech/tags/sdk.md>)

### AI overview

A quick introduction to setting up the Gemini API client SDK on Android for optical character recognition on images. The article explains using Gemini's multimodal models, API keys, Gradle dependencies, and image prompts to automate detection of high temperatures or increased power consumption.

### Source excerpt

This artical is a quick introduction into setting up the Gemini API client SDK on Android to perform Optical Character Recognition (OCR) on images. Let's jump straight in: The Gemini API gives you access to the latest generative AI models from Google. Gemini is a series of multimodal generative AI models developed by Google. Gemini [...] The post OCR with Gemini LLM on Android first appeared on Blundell.

## Emoji error! Using the latest Compose with compileSDK \< 34

DevFeed: [Emoji error! Using the latest Compose with compileSDK \< 34](<https://devfeed.tech/articles/emoji-error-using-the-latest-compose-with-compilesdk-34-24907.md>)

Original publisher: [Read original article](<https://blog.blundellapps.co.uk/emoji-error-using-the-latest-compose-with-compilesdk-34/>)

Author: blundell

Published: 2023-11-22T18:00:00Z

Content type: tutorial

Language: en

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

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

Tags: [android](<https://devfeed.tech/tags/android.md>), [androiddev](<https://devfeed.tech/tags/androiddev.md>), [compose](<https://devfeed.tech/tags/compose.md>), [dependencies](<https://devfeed.tech/tags/dependencies.md>), [errors](<https://devfeed.tech/tags/errors.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [intermediate](<https://devfeed.tech/tags/intermediate.md>), [reference](<https://devfeed.tech/tags/reference.md>), [reference-androiddev-compose-gradle](<https://devfeed.tech/tags/reference-androiddev-compose-gradle.md>)

### AI overview

A tutorial explains how to use Compose versions above 1.5.0 when an Android app remains on compileSdk below 34. Newer Compose dependencies can pull in emoji libraries that require newer Android SDK features; the proposed workaround is to force emoji2 to version 1.3.0 through Gradle until compileSdk can be upgraded.

### Source excerpt

Wanting to use the latest versions of Compose, but your app compileSdk is falling behind? I've been there! If you have a compileSdk < 34 but want to use Compose version > 1.5.0 you'll come across a horrid build error. Let's fix that! The error is question is this: Compose dependencies with a version > [...] The post Emoji error! Using the latest Compose with compileSDK < 34 first appeared on Blundell.

## Setting JDK level in Android Gradle builds

DevFeed: [Setting JDK level in Android Gradle builds](<https://devfeed.tech/articles/setting-jdk-level-in-android-gradle-builds-24917.md>)

Original publisher: [Read original article](<https://blog.blundellapps.co.uk/setting-jdk-level-in-android-gradle-builds/>)

Author: blundell

Published: 2023-11-18T09:51:40Z

Content type: tutorial

Language: en

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

Topics: [Gradle](<https://devfeed.tech/topics/gradle.md>), [Java](<https://devfeed.tech/topics/java.md>), [Android](<https://devfeed.tech/topics/android.md>), [toolchain](<https://devfeed.tech/topics/toolchain.md>), [modules](<https://devfeed.tech/topics/modules.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [androiddev](<https://devfeed.tech/tags/androiddev.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [intermediate](<https://devfeed.tech/tags/intermediate.md>), [intermediate-reference-androiddev-gradle-java-jdk](<https://devfeed.tech/tags/intermediate-reference-androiddev-gradle-java-jdk.md>), [java](<https://devfeed.tech/tags/java.md>), [jdk](<https://devfeed.tech/tags/jdk.md>), [module](<https://devfeed.tech/tags/module.md>), [reference](<https://devfeed.tech/tags/reference.md>), [toolchain](<https://devfeed.tech/tags/toolchain.md>)

### AI overview

A practical guide to configuring Java and JVM versions in Android Gradle projects. It recommends Java 17 when possible, Java 11 for compatibility issues, and explicit version settings for every module.

### Source excerpt

The correct, complete, 2024, settings to configure the Java version in Gradle for Android. The post Setting JDK level in Android Gradle builds first appeared on Blundell.

## Dependency Injection in Legacy Code

DevFeed: [Dependency Injection in Legacy Code](<https://devfeed.tech/articles/dependency-injection-in-legacy-code-24906.md>)

Original publisher: [Read original article](<https://blog.blundellapps.co.uk/dependency-injection-in-legacy-code/>)

Author: blundell

Published: 2023-10-19T12:26:59Z

Content type: tutorial

Language: en

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

Topics: [Dependency injection](<https://devfeed.tech/topics/dependency-injection.md>), [Dagger](<https://devfeed.tech/topics/dagger.md>), [Android](<https://devfeed.tech/topics/android.md>), [android-development](<https://devfeed.tech/topics/android-development.md>), [legacy](<https://devfeed.tech/topics/legacy.md>), [Development](<https://devfeed.tech/topics/development.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [dagger](<https://devfeed.tech/tags/dagger.md>), [dependency-injection](<https://devfeed.tech/tags/dependency-injection.md>), [development](<https://devfeed.tech/tags/development.md>), [intermediate](<https://devfeed.tech/tags/intermediate.md>), [legacy](<https://devfeed.tech/tags/legacy.md>), [legacy-code](<https://devfeed.tech/tags/legacy-code.md>), [reference](<https://devfeed.tech/tags/reference.md>)

### AI overview

This tutorial explains how to use Dagger and Hilt entry points to inject dependencies into Android legacy singletons and other classes that are not managed by the current architecture. It focuses on cases where the legacy code can access a Context and describes defining an entry-point interface for required bindings.

### Source excerpt

This post explains how you can inject dependencies into Android legacy singletons, or any classes that aren't conforming to your current Android architecture, using Dagger & Hilt. I'll cut straight to the chase, if you have a reference to Context, (which you usually always do in spaghetti legacy code) then you can use your normal [...] The post Dependency Injection in Legacy Code first appeared on Blundell.

## Set Activity Screen Brightness without Permission

DevFeed: [Set Activity Screen Brightness without Permission](<https://devfeed.tech/articles/set-activity-screen-brightness-without-permission-24916.md>)

Original publisher: [Read original article](<https://blog.blundellapps.co.uk/set-activity-screen-brightness-without-permission/>)

Author: blundell

Published: 2023-08-23T09:02:23Z

Content type: tutorial

Language: en

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

Topics: [Android](<https://devfeed.tech/topics/android.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [androiddev](<https://devfeed.tech/tags/androiddev.md>), [intermediate](<https://devfeed.tech/tags/intermediate.md>), [legibility](<https://devfeed.tech/tags/legibility.md>), [override](<https://devfeed.tech/tags/override.md>), [permission](<https://devfeed.tech/tags/permission.md>), [qr-code](<https://devfeed.tech/tags/qr-code.md>), [reference](<https://devfeed.tech/tags/reference.md>), [reference-tutorial-androiddev-qr-code-screen-brightness](<https://devfeed.tech/tags/reference-tutorial-androiddev-qr-code-screen-brightness.md>), [screen-brightness](<https://devfeed.tech/tags/screen-brightness.md>), [tutorial](<https://devfeed.tech/tags/tutorial.md>)

### AI overview

A tutorial explains how to temporarily adjust an Android Activity's screen brightness programmatically without requesting Android permissions. The brightness value ranges from 0 to 1, and the setting resets when the Activity is no longer visible.

### Source excerpt

I wanted to brighten the screen, but all articles said you needed Android permissions. Codswallop! Here's how! The post Set Activity Screen Brightness without Permission first appeared on Blundell.

## build.gradle.kts conversion for Android Studio Empty Activity

DevFeed: [build.gradle.kts conversion for Android Studio Empty Activity](<https://devfeed.tech/articles/build-gradle-kts-conversion-for-android-studio-empty-activity-24904.md>)

Original publisher: [Read original article](<https://blog.blundellapps.co.uk/build-gradle-kts-conversion-for-android-studio-empty-activity/>)

Author: blundell

Published: 2023-07-05T09:45:18Z

Content type: tutorial

Language: en

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

Topics: [Android Studio](<https://devfeed.tech/topics/android-studio.md>), [Gradle](<https://devfeed.tech/topics/gradle.md>), [Groovy](<https://devfeed.tech/topics/groovy.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [configuration](<https://devfeed.tech/topics/configuration.md>), [ide](<https://devfeed.tech/topics/ide.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-studio](<https://devfeed.tech/tags/android-studio.md>), [androiddev](<https://devfeed.tech/tags/androiddev.md>), [blog](<https://devfeed.tech/tags/blog.md>), [build](<https://devfeed.tech/tags/build.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [explainer](<https://devfeed.tech/tags/explainer.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [groovy](<https://devfeed.tech/tags/groovy.md>), [intermediate](<https://devfeed.tech/tags/intermediate.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [reference](<https://devfeed.tech/tags/reference.md>), [reference-android-androiddev-gradle-groovy-kotlin](<https://devfeed.tech/tags/reference-android-androiddev-gradle-groovy-kotlin.md>), [update](<https://devfeed.tech/tags/update.md>)

### AI overview

A quick tutorial converts the default Groovy build.gradle files from Android Studio's Empty Activity template into Kotlin DSL build.gradle.kts files. It also points to Google's and Gradle's guidance on converting build configuration scripts and notes that Kotlin DSL was announced as the new default.

### Source excerpt

Quick blog posting showing you the build.gradle.kts version of the default build.gradle file from the "empty activity" Android Studio template. This post will go stale fast, get it whilst its hot. 🙂 The original templates come from the New Project, other templates are explained here: https://developer.android.com/studio/projects/templates Google has an explainer of converting build configuration scripts [...] The post build.gradle.kts conversion for Android Studio Empty Activity first appeared on Blundell.

## Android Job Interview - Take-Home Test Cheat Sheet

DevFeed: [Android Job Interview - Take-Home Test Cheat Sheet](<https://devfeed.tech/articles/android-job-interview-take-home-test-cheat-sheet-24901.md>)

Original publisher: [Read original article](<https://blog.blundellapps.co.uk/android-job-interview-take-home-test-cheat-sheet/>)

Author: blundell

Published: 2023-05-25T21:08:18Z

Content type: tutorial

Language: en

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

Topics: [Android](<https://devfeed.tech/topics/android.md>), [Code Challenge](<https://devfeed.tech/topics/code-challenge.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [Learning](<https://devfeed.tech/topics/learning.md>), [Google](<https://devfeed.tech/topics/google.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [androiddev](<https://devfeed.tech/tags/androiddev.md>), [best-practices](<https://devfeed.tech/tags/best-practices.md>), [cheat-sheet](<https://devfeed.tech/tags/cheat-sheet.md>), [coding](<https://devfeed.tech/tags/coding.md>), [getting-started](<https://devfeed.tech/tags/getting-started.md>), [google](<https://devfeed.tech/tags/google.md>), [intermediate](<https://devfeed.tech/tags/intermediate.md>), [interview](<https://devfeed.tech/tags/interview.md>), [job](<https://devfeed.tech/tags/job.md>), [learn](<https://devfeed.tech/tags/learn.md>), [reference](<https://devfeed.tech/tags/reference.md>), [reference-android-androiddev-interview](<https://devfeed.tech/tags/reference-android-androiddev-interview.md>)

### AI overview

This tutorial explains how to approach a typical Android take-home test as part of a job interview. It discusses the purpose of the exercise and recommends following official Android developer practices to produce a submission that interviewers and collaborators can understand.

### Source excerpt

Learn the steps needed in a typical Android take home test. Giving you the tools and knowledge you need to ace this part of any Android interview process. The post Android Job Interview - Take-Home Test Cheat Sheet first appeared on Blundell.

## Preparing for Android Job Interviews: A Guide to the Typical Interview Process

DevFeed: [Preparing for Android Job Interviews: A Guide to the Typical Interview Process](<https://devfeed.tech/articles/proven-prepping-for-easy-android-interviews-in-2023-24914.md>)

Original publisher: [Read original article](<https://blog.blundellapps.co.uk/proven-prepping-for-easy-android-interviews-in-2023/>)

Author: blundell

Published: 2023-05-16T21:19:15Z

Content type: tutorial

Language: en

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

Topics: [Android](<https://devfeed.tech/topics/android.md>), [App](<https://devfeed.tech/topics/app.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [androiddev](<https://devfeed.tech/tags/androiddev.md>), [blog](<https://devfeed.tech/tags/blog.md>), [hiring](<https://devfeed.tech/tags/hiring.md>), [intermediate](<https://devfeed.tech/tags/intermediate.md>), [interviewing](<https://devfeed.tech/tags/interviewing.md>), [interviews](<https://devfeed.tech/tags/interviews.md>), [personal-experience](<https://devfeed.tech/tags/personal-experience.md>), [process](<https://devfeed.tech/tags/process.md>), [reference](<https://devfeed.tech/tags/reference.md>), [reference-android-androiddev-interviewing-interviews](<https://devfeed.tech/tags/reference-android-androiddev-interviewing-interviews.md>)

### AI overview

This personal-experience guide describes common stages of an Android job interview, including an introductory conversation and take-home exercise. It offers preparation advice such as reviewing the job candidate's CV, researching the company, following the exercise rubric, and documenting code decisions.

### Source excerpt

This post aims to demystify some of the steps in a typical Android interview process. We'll discuss steps, strategies, targets and solutions. Getting you better prepared to get your next Android role. This blog is from personal experience, caveat up front that your experience could be completely different, but I've been through A LOT of [...] The post Proven Prepping for Easy Android Interviews in 2023 first appeared on Blundell.

## Applying a 3rd Party Gradle Plugin as a Composite Plugin

DevFeed: [Applying a 3rd Party Gradle Plugin as a Composite Plugin](<https://devfeed.tech/articles/applying-a-3rd-party-gradle-plugin-as-a-composite-plugin-24903.md>)

Original publisher: [Read original article](<https://blog.blundellapps.co.uk/applying-a-3rd-party-gradle-plugin-as-a-composite-plugin/>)

Author: blundell

Published: 2023-01-10T10:29:19Z

Content type: tutorial

Language: en

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

Topics: [Gradle](<https://devfeed.tech/topics/gradle.md>), [Android Studio](<https://devfeed.tech/topics/android-studio.md>), [Android Library](<https://devfeed.tech/topics/android-library.md>), [Template](<https://devfeed.tech/topics/template.md>)

Tags: [android-studio](<https://devfeed.tech/tags/android-studio.md>), [androiddev](<https://devfeed.tech/tags/androiddev.md>), [build](<https://devfeed.tech/tags/build.md>), [composite-build](<https://devfeed.tech/tags/composite-build.md>), [dropbox](<https://devfeed.tech/tags/dropbox.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [gradle-plugin](<https://devfeed.tech/tags/gradle-plugin.md>), [intermediate](<https://devfeed.tech/tags/intermediate.md>), [intermediate-tutorial-androiddev-composite-build-gradle-plugin](<https://devfeed.tech/tags/intermediate-tutorial-androiddev-composite-build-gradle-plugin.md>), [library](<https://devfeed.tech/tags/library.md>), [multi-module-project](<https://devfeed.tech/tags/multi-module-project.md>), [plugin](<https://devfeed.tech/tags/plugin.md>), [project](<https://devfeed.tech/tags/project.md>), [reference](<https://devfeed.tech/tags/reference.md>), [tutorial](<https://devfeed.tech/tags/tutorial.md>)

### AI overview

A tutorial on wrapping a third-party Gradle plugin in a custom plugin and including it through a Gradle composite build. Using Dropbox's Affected Module Detector as an example, it shows how a multi-module Android project can use the plugin's tasks while extending its behavior without forking or republishing it.

### Source excerpt

This post shows you how to wrap a 3rd party Gradle plugin in your own plugin, so that you can interactive with it programmatically. The post Applying a 3rd Party Gradle Plugin as a Composite Plugin first appeared on Blundell.