DEV Community

Cover image for How to build a React Native android application locally with Expo 50
Ekim Kael
Ekim Kael

Posted on

How to build a React Native android application locally with Expo 50

If you have sensitive information that you don't want to get on the Internet and share with Expo, or if you don't have the money to wait your turn in the queue, it's possible to build your application locally, and that's what we're going to look at today.

IMPORTANT: You're more likely to get it right if you're on macOS or Linux. For Windows you need to have WSL installed.

1. eas(Expo Application Service) account

First of all, go to https://expo.dev/ and create an account. Otherwise it will be difficult to follow this article.

2. Install eas-cli

EAS CLI is the command-line application you'll use to interact with EAS services from your terminal. To install it, run the following command:



npm install -g eas-cli


Enter fullscreen mode Exit fullscreen mode

3. Login to your account



eas login


Enter fullscreen mode Exit fullscreen mode

4. Configuring the build

To configure your project's build, use the command



eas build configure


Enter fullscreen mode Exit fullscreen mode

This command also initiates your project on your account on the expo servers.

5. Credentials.json

This part is important when you want to produce the version of your application that will go on the AppStore or Google Play Store.
It contains the credentials and certificates your application will need to be signed and recognized by the Play Store (in our case).

If the credentials are located on your machine, you must specify this in the eas.json file, otherwise it will look for them in your online project.
To do this, you can add this line to your eas.json file on the appropriate build profile.



credentialsSource: 'local'


Enter fullscreen mode Exit fullscreen mode

6. Java 17

screenshot of error log when java 17 is not used

You must have Java installed on your machine, otherwise you'll get the above error. Version 17 is the recommended one. I haven't tested higher versions, so I can't say.

7. Environment variables

When you do a local build, EAS secrets are not supported. Instead, you need to use environment variables. If you have environment variables, expo will not take .env.local into account. So you'll need to create an .env file and then delete it every time you finish a build.

Don't add your .env file to your .gitignore file - it will be ignore.

We'll look at how to automate the whole process from step 5 onwards in a future article.

8. Files not to be committed:

As I said earlier, the informations contained in these files are sensitive, so it must not be possible to find them online:

  • credentials.json
  • Your keystore file (.jks)
  • .env

9. Launch the build

Once all the elements are ready, you just need to know the profile for which you want to produce the application and launch the command:



eas build --platform android --profile (development/preview/production) --local 


Enter fullscreen mode Exit fullscreen mode

screenshot of build startup

If you take the time to observe you'll see that Expo logs everything it does during the process and in the first 2 lines you can see that it:

  • loads environment variables
  • Uses local credentials (if specified)

Once the process has started, you wait a few minutes for it to finish and tell you where to find your application's compiler file, and voila!

screenshot of build completed without errors

Limitations

Some of the options available when building online are not available locally:

  • You can only do one build at a time and for one specific platform (android or iOS).

  • You'll have to update the expo.android.versionCode or expo.ios.buildNumber yourself.

  • Caching is not supported.

  • You must ensure that the environment has all the necessary tools:

    • Node.js/Yarn/npm
    • Fastlane (iOS only)
    • CocoaPods (iOS only)
    • Android SDK and NDK

I hope you've found this article useful, and I'll see you soon to automate the process. Ciao!

Top comments (1)

Collapse
 
skipperhoa profile image
Hòa Nguyễn Coder

thanks pro