This guide will help you get started with an Android project on Semaphore. If you’re new to Semaphore, please read our guided tour first.


Semaphore provides a set of tailored container images that Android developers can use as environments for their projects on Semaphore. These pre-built images provide Android SDK and other common tools needed to run Android projects out-of-the-box. All you need to do is configure the CI/CD steps that are specific for your project.

Semaphore supports both Android and React Native projects.

Additionally, you can run an Android emulator in Semaphore CI/CD jobs.

Example configuration#

Here's an example Android configuration:

version: v1.0
name: Android example
    type: e1-standard-2
    - name: main
      image: ''
  - name: Build
        - name: Hello Android
            - checkout
            - echo "hello world"

Here's an example configuration for React Native projects:

version: v1.0
name: React Native example
    type: e1-standard-2
    - name: main
      image: ''
  - name: Install dependencies
        - name: npm install and cache
            # Get the latest version of our source code from GitHub:
            - checkout
            # Restore dependencies from the cache. This command will not fail in
            # the event of a cache miss. In the event of a cache hit, npm install will
            # run very fast.
            # For more info on caching, see
            - cache restore
            - npm install

            # Store the latest version of node modules in the cache for reuse in
            # further blocks:
            - cache store
  - name: Run Android tests
          - checkout
          # Install Android emulator
          - sdkmanager "platform-tools" "platforms;android-24" "emulator"
          - sdkmanager "system-images;android-24;default;armeabi-v7a"
          - echo no | avdmanager create avd -n Nexus_S_API_24 -k "system-images;android-24;default;armeabi-v7a" --device "Nexus S"
        - name: Run tests
            - cache restore
            - npm test

Docker Hub rate limits

Please note that due to the introduction of rate limits on Docker Hub, any compose style pulls from the semaphoreci Docker Hub repository will be automatically redirected to the Semaphore Container Registry. This means that you will not have to authenticate in order to pull such images.

Android image variants#

The pre-built Android images are available on the Semaphore Container Registry.

The source code and Dockerfiles for these images are available in an open source repository: semaphoreci/docker-images.

The Semaphore Android images are based on the ubuntu:16.04 official Docker image. Jobs commands are executed by the root user.

There are Docker images for each recent version of Android. There are also variants with Node.js preinstalled for React Native development.

  • android:version is the basic image that comes with development utilities and is an optimal first choice.
  • android:version-node is an extension of the basic image and comes with Node.js (10.x) pre-installed.

For more information on using Docker images to define your Semaphore CI/CD environment, see the Custom CI/CD environment with Docker documentation.

Example projects#

Semaphore provides a demo React Native application with a working CI pipeline for Android and iOS that you can use to get started quickly:

Supported Android SDK versions#

  • build-tools;25.0.3
  • build-tools;26.0.1
  • build-tools;26.0.2
  • build-tools;27.0.0
  • build-tools;27.0.1
  • build-tools;27.0.2
  • build-tools;27.0.3
  • build-tools;28.0.0
  • build-tools;28.0.1
  • build-tools;28.0.2
  • build-tools;28.0.3
  • build-tools;29.0.0
  • build-tools;29.0.1
  • build-tools;29.0.2
  • platforms;android-25
  • platforms;android-26
  • platforms;android-27
  • platforms;android-28
  • platforms;android-29

Installed software#

  • ARM simmulator (libqt5widgets5)
  • Google Cloud SDK
  • apt
  • apt-transport-https
  • build-essential
  • bzip2
  • ca-certificates
  • curl
  • docker
  • docker-compose
  • git
  • gnupg
  • gradle
  • gzip
  • jq
  • lftp
  • locales
  • lsb-release
  • maven
  • mercurial
  • net-tools
  • netcat
  • openssh-client
  • parallel
  • ruby 2.6.1
  • software-properties-common
  • sudo
  • tar
  • tree
  • unzip
  • vim
  • wget
  • xvfb
  • zip

See Also#