Skip to main content

Building Standalone Apps

Standalone apps are self-contained native applications that can be distributed through app stores or other channels. This guide covers both cloud-based builds with EAS Build and local compilation.

Understanding Build Types

Expo supports two primary approaches to creating standalone builds: EAS Build is a cloud-based build service that compiles your app on remote servers. Benefits include:
  • No need to install Android Studio or Xcode locally
  • Consistent build environment across team members
  • Handles code signing automatically
  • Build from any operating system (Windows, Linux, macOS)
  • Integrated with EAS Submit for streamlined app store deployment

Local Builds

Local builds compile your app on your own machine. Use this when:
  • Company policies restrict use of third-party CI/CD services
  • You need to debug build failures in detail
  • You want complete control over the build environment

Building with EAS Build

1

Install and Configure EAS CLI

Configure your project for EAS Build:
This creates an eas.json file with default build profiles:
eas.json
2

Configure App Identifiers

Set your bundle identifiers in app.json:
app.json
3

Create Production Builds

This creates an AAB (Android App Bundle) by default, which is required for Google Play Store submissions.
4

Monitor Build Progress

EAS CLI displays a link to monitor your build:
You can also view all builds:

Local Build Configuration

Local builds require Android Studio (for Android) and Xcode (for iOS) to be installed and properly configured on your machine.

Running EAS Build Locally

You can run the same EAS Build process locally:
This replicates the cloud build environment on your machine. Environment Variables for Debugging:

Building with Native Tools

For complete control, you can use native build tools directly.
Step 1: Generate Native ProjectsIf using Continuous Native Generation:
Step 2: Build with Gradle
Output locations:
  • APK: android/app/build/outputs/apk/release/app-release.apk
  • AAB: android/app/build/outputs/bundle/release/app-release.aab

Build Profiles

Customize builds for different scenarios using profiles in eas.json:
eas.json

Build Profile Options

Common Options:
  • distribution: "store" | "internal" - Determines build artifacts
  • channel: EAS Update channel name for OTA updates
  • env: Environment variables available during build
  • credentialsSource: "remote" | "local" - Where to get signing credentials
Android Options:
  • buildType: "apk" | "app-bundle" - Output format
  • gradleCommand: Custom Gradle command
  • image: Build image version (e.g., "sdk-54")
iOS Options:
  • simulator: Build for simulator (development only)
  • buildConfiguration: "Debug" | "Release"
  • scheme: Xcode scheme to build

Build Output Types

Android Build Types

AAB (Android App Bundle) - Recommended for Store
  • Required by Google Play Store (for new apps since August 2021)
  • Smaller download size for users
  • Cannot be installed directly on devices
APK (Android Package) - For Testing
  • Can be installed directly on devices
  • Useful for internal distribution
  • Larger file size than AAB

iOS Build Types

App Store Distribution
  • For App Store submission
  • Requires distribution certificate
  • Works on physical devices only
Simulator Build (Development)
  • Runs on iOS Simulator
  • Faster build times
  • No code signing required
  • Cannot run on physical devices

Advanced Build Options

Auto-Increment Version

eas.json

Custom Build Scripts

Run custom scripts during the build process using eas-build-pre-install and eas-build-post-install hooks in package.json:
package.json

Resource Classes

For larger apps, use more powerful build machines:
eas.json

Troubleshooting

Build Failed with Out of Memory

Increase resource class or enable Hermes (Android):
app.json

iOS Build Fails with Provisioning Profile Issues

Clear credentials and regenerate:

Android Build Fails with Gradle Errors

Clear build cache:

Viewing Detailed Build Logs

  1. Click the build URL from EAS CLI output
  2. Navigate to the “Logs” tab
  3. Download full logs for offline analysis
For local builds, check the working directory:

Next Steps