Android Emulators

Run Android emulators with hardware acceleration on Namespace runners.

Namespace runners support hardware-accelerated Android virtualization using KVM. This enables fast Android emulator testing without the performance penalty of software emulation.

KVM is enabled by default on all Namespace runners, so no additional setup is required.

Getting started

Create a runner profile

We recommend using a dedicated profile for Android Emulator workflows.

Go to your runner profiles and create a profile named namespace-profile-android with:

  • Linux on amd64/x86 ( linux/amd64 )
  • Enough resources for your emulator, 4 vCPU x 8 GB RAM is a good starting point
  • Caching enabled to cache Gradle dependencies.

Then use the created profile as your runs-on label:

jobs:
  android-tests:
    runs-on: namespace-profile-android

Set up caching

Use namespacelabs/nscloud-cache-action to cache Gradle dependencies for faster builds:

- name: Set up Gradle cache
  uses: namespacelabs/nscloud-cache-action@v1
  with:
    cache: gradle

Set up JDK and Android SDK

Use actions/setup-java and android-actions/setup-android to install the required tooling:

- name: Set up JDK
  uses: actions/setup-java@v4
  with:
    distribution: temurin
    java-version: 17
 
- name: Set up Android SDK
  uses: android-actions/setup-android@v3

Run the emulator

Start an emulator and run your tests, for example by using the reactivecircus/android-emulator-runner action:

- name: Run Android tests
  uses: reactivecircus/android-emulator-runner@v2
  with:
    api-level: 30
    arch: x86_64
    script: ./gradlew connectedCheck

Full example

Here's a complete workflow for running Android tests:

name: Android Tests
 
on:
  push:
    branches: [main]
  pull_request:
 
jobs:
  android-tests:
    runs-on: namespace-profile-android
    steps:
      - name: Checkout repository
        uses: namespacelabs/nscloud-checkout-action@v7
 
      - name: Set up Gradle cache
        uses: namespacelabs/nscloud-cache-action@v1
        with:
          cache: gradle
 
      - name: Set up JDK
        uses: actions/setup-java@v4
        with:
          distribution: temurin
          java-version: 17
 
      - name: Set up Android SDK
        uses: android-actions/setup-android@v3
 
      - name: Run Android tests
        uses: reactivecircus/android-emulator-runner@v2
        with:
          api-level: 30
          arch: x86_64
          script: ./gradlew connectedCheck
Last updated