Skip to main content
Building the Android half of a Duet project needs the Android SDK and a JDK on your Mac, alongside Xcode. Modaal checks for both and, when something is missing, shows an Action needed: install the Android SDK banner with a button that installs it. This guide explains what the banner means, what the button installs, and how to verify the result. What Claude Code alone cannot do on Android is on modaal.dev.

Before you start

A Mac with Xcode set up

The Android toolchain installs alongside your iOS setup — Set up Xcode first if you haven’t.

Disk space for the toolchain

The SDK components, the emulator system image and the JDK are a multi-gigabyte download. The setup prints the exact total it downloaded in its final receipt.

No admin password, no Homebrew

Everything installs user-local, under your home folder. Nothing asks for elevation and nothing touches a system package manager.

Android Studio users keep their SDK

If a SDK is already on the machine, the setup respects it and adds only the components that are missing.

What the banner means

On a project with Android in scope, Modaal probes for the toolchain — the SDK components, the JDK, and an emulator. When any of them is missing, the workspace shows the Action needed: install the Android SDK banner with an Install button and the list of what is missing.

What the button installs

The button opens Terminal and runs Modaal’s setup there, in a window you own — Google’s SDK licenses have to be accepted by you, and that happens in this window, not silently in the background. As of September 2026 the setup installs: It also creates your first emulator — a Pixel 8 on API 36, named Modaal_Pixel_8_API_36 — and pre-warms the Kotlin build toolchain the project compiles with (about a minute, ~440 MB), so the first real build doesn’t pay that cost. At the end, the setup offers to add the SDK and JDK environment exports to your shell profile, so your own terminal sees the same toolchain Modaal uses. You can decline — Modaal doesn’t need it.

Where everything lives

  • The SDK goes to ~/Library/Android/sdk — unless the machine already points at an SDK through the standard ANDROID_SDK_ROOT or ANDROID_HOME variables, in which case that location is used and only missing components are added.
  • The JDK goes to ~/Library/Java/JavaVirtualMachines, the user-local directory macOS resolves JDKs from — no admin password involved.
The setup’s final receipt lists every location, every component it installed or found already present, and the total it downloaded.

Verify it worked

Modaal picks the result up without a restart: the banner clears on the next prerequisites check, and the Run picker offers the new emulator alongside your iOS simulators. Ask Modaal to run the app on Android and it boots the emulator and launches your app there.

What the banner can show


Common questions

No. The setup respects an existing SDK found through ANDROID_SDK_ROOT or ANDROID_HOME, installs only missing components into it, and never removes anything. Your Android Studio projects keep working unchanged.
Google’s SDK licenses must be accepted before components can install, and declining ends the run without installing them. Run the setup again from the banner’s button and answer y at the license prompt.
Yes. Re-running is the repair path: every step checks what is already in place before acting, so a second run finishes what the first one couldn’t and changes nothing that succeeded.
No. The Swift-flavor Duet template and the iOS-only templates build with Xcode alone — see the two Duet templates. The banner appears only when a project has Android in scope.
From Tutorial 2 onward, yes: that page builds the Compose app, and every later page runs it. Tutorial 1 needs a JDK only. The series index lists every prerequisite with the tutorial that first needs it.
Toolchain in place? Start your first project and pick a Multiplatform card. What shipping an Android app involves beyond the build — the Play Console, signing keys, release tracks — is covered in how to build an Android app.
Still stuck? Join our community on Discord — we’re happy to help you get set up.
Last modified on September 8, 2026