How to Build an Android React Native Application Using AWS CodePipeline

Dhruv Chevli / Sr. DevOps Engineer

In this blog post, we'll walk you through the process of using AWS CodePipeline, along with other AWS services, to build an Android React Native application. We'll be using an AWS CodeCommit Git repository to store our code and an S3 bucket to save the final generated APK.

Diagram

Requirements:

  • Android 31
  • Platform tools version: r34.0.4
  • Build tool: 30.0.2
  • Java 11
  • Node 16

Note: Ubuntu and Amazon Linux 2 platform runtimes only support Android 29, so we have installed Android 31 in AWS CodeBuild.

imgRuntime
imgCodebuild

Step-by-Step Guide to Build an Android React Native Application

1. Runtime Install Phase

In this phase, we need to set up the environment with the required tools and libraries:

  • Use Java 11
  • Use Node 16

2. Pre-Build Phase

Before building the application, we need to download and install the necessary Android tools and dependencies:

  • Download and install Android 31
  • Install Platform tools r34.0.4
  • Install Build tool 30.0.2
  • Install the npm package react-native-cli
  • Download the keystore file for signing the APK

3. Build Phase

In the build phase, we configure Gradle to include a task that prints the application's version name, which is useful for versioning the APK:

  • Note: Ensure you have created a Gradle task in app/build.gradle with the name printVersionName to print the version of the application.
  • Run the printVersionName command to print the app version
  • Execute the build command to build the Android application

4. Post-Build Phase

After the build is complete, we need to handle the generated APK:

  • Rename the APK and append the app version to the application name.
  • Move the APK to the designated S3 bucket.

Detailed AWS CodePipeline Setup

  • 1. Source Stage: Use AWS CodeCommit as the source repository for your React Native application code.
  • 2. Build Stage: Set up AWS CodeBuild with a buildspec.yml file to define the build steps. Below is the buildspec.yml configuration:

Note: There are some specific steps also added in the spec file as we download some files from pre-configured S3 bucket. For example, the aws-config.json file has additional configurations as the application using Amazon Cognito User Pool and few other endpoints.

We are using a simple workaround to upgrade the base NodeJS 16 LTS runtime with n 16 command.

version: 0.2
phases:
  install:
    runtime-versions:
      java: corretto11
      nodejs: 14
    commands:
      - n 16
  pre_build:
    commands:
      - node -v
      - npm install -y
      - export ANDROID_TOOLS_FILENAME="commandlinetools-linux-8512546_latest.zip"
      - wget https://dl.google.com/android/repository/$ANDROID_TOOLS_FILENAME -P ~ > /dev/null
      - wget https://dl.google.com/android/repository/platform-tools_r34.0.4-linux.zip -P ~ > /dev/null
      - unzip ~/$ANDROID_TOOLS_FILENAME -d ~ > /dev/null 2>&1
      - unzip ~/platform-tools_r34.0.4-linux.zip -d ~ > /dev/null 2>&1
      - mkdir -p /usr/local/android-sdk-linux/cmdline-tools
      - mv ~/cmdline-tools /usr/local/android-sdk-linux/cmdline-tools/latest
      - mv ~/platform-tools /usr/local/android-sdk-linux
      - export PATH=$PATH:/usr/local/android-sdk-linux/cmdline-tools/latest:/usr/local/android-sdk-linux/cmdline-tools/latest/bin:/usr/local/android-sdk-linux/platform-tools
      - export ANDROID_SDK_ROOT=/usr/local/android-sdk-linux
      - yes | sdkmanager --licenses > /dev/null
      - npm --version
      - yarn -v
      - sdkmanager "platform-tools" "platforms;android-31" > /dev/null
      - sdkmanager "build-tools;30.0.2" > /dev/null
      - echo Pre Build started on `date`
      - npm install -g react-native-cli
      - aws s3 cp s3://<bucket>/<application folder>/aws-config.json ./src/
      - cd android
      - pwd
      - aws s3 cp s3://<Path to s3>/<Keystorefile> ./app/
      - COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-4)
      - IMAGE_TAG=$${COMMIT_HASH:=latest}
      - ENVFILE=.env.development

  build:
    commands:
      - echo Build started on `date`
      - ./gradlew clean
      - APP_VERSION=$(./gradlew -q  printVersionName  | tail -n 1)
      - echo $APP_VERSION
      - ./gradlew -q printVersionName
      - ./gradlew assembleDevelopmentRelease

  post_build:
    commands:
      - echo Build completed on `date`
      - echo $APP_VERSION
      - echo $IMAGE_TAG
      - mv app/build/outputs/apk/development/release/app-development-release.apk app/build/outputs/apk/development/release/$APP_VERSION-$IMAGE_TAG.apk
      - aws s3 cp app/build/outputs/apk/development/release/$APP_VERSION-$IMAGE_TAG.apk s3://<Path to s3>
  • 3. Deploy Stage: Optionally, you can add a deployment stage to distribute the APK to testers or deploy it to an app store.

Summary

Using AWS CodePipeline to automate the build process for your Android React Native application can save significant time and effort. By following the steps outlined above, you can ensure a smooth CI/CD pipeline that efficiently handles the build and deployment of your application.

More articles

The Arrows, Not the Boxes: Systems Thinking for AWS Architects

You can configure an ALB flawlessly and explain IAM policies from memory. But can you articulate why an ALB is better than an NLB for your specific constraints? The different between "knowing AWS services" and "thinking in systems" is what separates engineers who implement from architects who design.

Read more

AWS CodeCommit Returns: What the Reversal Means for You

In an unprecedented reversal, AWS has restored CodeCommit to general availability after deprecating it in July 2024. This decision validates teams that remained committed to AWS-native git repositories while leaving migrated teams questioning their investment.

Read more

Tell us about your project

Our office

  • 425, Avadh Kontina
    Vip Road, Canal Road Corner, near CB patel club
    Surat, Gujarat 395007
    Google Map

© 2025 APPGAMBiT. All rights reserved.