【React Native】ExpoアプリをAndroidアプリ用にパッケージ化してapkを作成する手順

はじめに

React Nativeでスマートフォンアプリを開発するときは、Expoを利用すると、作成中のアプリを実機向けにパッケージ化し、iPhoneやAndroidの実機で簡単に確認できます。

Windows11+WSL上で作成したExpo/React Nativeアプリなら、WSLからEAS Buildへアップロードして、Android用のAPKをクラウドビルドできます。Andoird Studioでローカルビルド環境を構築しなくても進められます。EAS Build自体がExpoのクラウド上でビルドする仕組みだからです。

今回は、Android実機に直接インストールできる「.apk」を作る方法を中心に説明します。

WindowsのWSLで起動したExpoアプリをiPhone実機で確認する手順は、こちらの記事で解説しています。

全体の流れ

WSL
 ↓
React Native / Expoプロジェクト
 ↓
EAS CLIをインストール
 ↓
Expoアカウントへログイン
 ↓
EAS Build設定
 ↓
eas.json設定
 ↓
EASへソースコード送信
 ↓
ExpoクラウドでAndroidビルド
 ↓
.apk を取得

1.WSLでプロジェクトへ移動

WSLを起動して、React Nativeプロジェクトへ移動します。

cd ~/projects/my-app

対象プロジェクトで、

ls

を実行して、

app
assets
package.json
node_modules

などが存在することを確認します。

2.Expoアプリが正常に動くことを確認

EAS Buildする前に、一度Expoで正常に動くか確認しておくことをお勧めします。

npx expo start

Expo GoアプリからQRコードを読み取って、アプリが正常に起動することを確認します。

3. EAS CLIをインストール

npm install -g eas-cli

を実行します。

インストール状況を確認

eas --version

例えば、

eas-cli/23.x.x

のように表示されればOKです。

4.Expoアカウントへログイン

EAS Buildを使うにはExpoアカウントが必要です。

eas login

を実行します。

すると、

Email or username
Password

などを聞かれます。

Expoアカウントを入力してください。

ログイン確認

eas whoami

自分のExpoユーザ名が表示されればOKです。

5.app.jsonを確認する

例えば現在、

{
  "expo": {
    "name": "my-app",
    "slug": "my-app",
    "version": "1.0.0"
  }
}

のようになっているとします。

Androidアプリとしてビルドする場合は、「android.package」を設定しておくことをおすすめします。

例えば、

{
  "expo": {
    "name": "MyApp",
    "slug": "my-app",
    "version": "1.0.0",

    "android": {
      "package": "com.example.myapp"
    }
  }
}

という形です。

android.packageとは

Androidアプリを一意に識別するIDです。

例えば、

com.example.myapp

です。

Google Playへ公開する場合、このPackage Nameは重要になります。

基本的には、

com.会社名.アプリ名

の形にしておけば分かりやすいです。

6.EAS Buildを設定

プロジェクトルートで、

eas build:configure

を実行します。

Expo公式でもEAS Buildの初期設定コマンドとしてこちらが案内されています。

途中で、

Which platforms would you like to configure for EAS Build?

のように聞かれる場合があります。

今回はAndroidなので、

Android

を選択します。

設定が終わると、プロジェクト直下に

eas.json

が作成されます。

つまり、

my-app
├── app
├── assets
├── app.json
├── eas.json
├── package.json
└── ...

となります。

7.eas.jsonを確認する

標準では概ね次のような構成になります。

{
  "build": {
    "development": {
      "developmentClient": true,
      "distribution": "internal"
    },
    "preview": {
      "distribution": "internal"
    },
    "production": {}
  }
}

これは現在のExpo公式ドキュメントでも示されている基本構成です。

ここで重要なのが、

development
preview
production

です。

用途によって使い分けます。

profile用途
development開発用
preview社内テスト・実機確認
productionGoogle Play公開用

8.まずAPKを作る

今回まずおすすめなのはこちらです。

Androidスマホへ直接インストールできるAPKを作る。

eas.jsonを次のようにします。

{
  "build": {
    "preview": {
      "distribution": "internal",
      "android": {
        "buildType": "apk"
      }
    },

    "production": {}
  }
}

ポイントはこちらです。

"android": {
  "buildType": "apk"
}

これを指定すると .apk が生成されます。

EASのデフォルトAndroidビルド形式は .aab なので、直接Android端末へインストールしたい場合はAPKを明示的に指定します。Expo公式でも android.buildType: "apk" がAPK生成方法として案内されています。

9.APKビルドを実行

WSLから

eas build --platform android --profile preview

を実行します。

短縮すると、

eas build -p android --profile preview

でも構いません。

初回は、いくつか質問されます。

例えばAndroid署名用のKeystoreについて、

Generate a new Android Keystore?

と聞かれる場合があります。

Yes

とすることで、EASに署名情報を管理してもらえます。

10.EASへファイルがアップロードされる

コマンドを実行すると、

Compressing project files
uploading to EAS Build

などと表示されます。

つまりWSL上のソースコードが、

WSL
↓
Expo EAS
↓
Androidビルドサーバ

ヘアップロードされます。

そのため、Windows側にAndroid SDKやGradleなどを完全に準備しなくてもEASクラウドでビルドできます。

11.EASのクラウド側でビルド

アップロード後、

Build details:
https://expo.dev/...

のようなURLが表示されます。

ブラウザで開くと、

Queued
↓
Build in progress
↓
Finished

という状態を確認できます。

正常終了すれば、

Build finished

となります。

12.APKをAndroidスマホヘ入れる

完成したBuildページからAPKを取得できます。

AndroidスマホでそのAPKを開き、

この提供元のアプリを許可

などを設定するとインストールできます。

これは通常のAndroid APKなので、Expo Goは不要です。

つまり、

Expo Go
   ↓
不要

MyApp.apk
   ↓
Androidへ直接インストール

となります。

13.Google Playへ出す場合AAB

Google Playへ公開するときはAPKではなく、基本的に

.aab

を作ります。

現在のEAS BuildではAndroid productionビルドのデフォルトがAABです。

eas.json

{
  "build": {
    "preview": {
      "distribution": "internal",
      "android": {
        "buildType": "apk"
      }
    },

    "production": {}
  }
}

そして、

eas build --platform android --profile production

を実行します。

すると、

MyApp.aab

相当のAndroid App Bundleが生成されます。

APKとAABの違い

ここは押さえておくと分かりやすいです。

  Android Build
                     │
            ┌────────┴────────┐
            │                 │
           APK               AAB
            │                 │
     直接インストール       Google Play
            │                 │
       動作確認用            公開用
形式APKAAB
拡張子.apk.aab
Androidへ直接インストール○×
テスト配布○△
Google Play公開基本×○
EAS標準production×○

Expo公式も、AABはGoogle Play向け、実機やエミュレーターへ直接インストールするならAPK、と区別しています。

今回おすすめするeas.json

今後Google Play公開まで考えるなら、最初から次の構成にしておくと便利です。

{
"build": {

"development": {
"developmentClient": true,
"distribution": "internal"
},

"preview": {
"distribution": "internal",
"android": {
"buildType": "apk"
}
},

"production": {}
}
}

こうすると、

実機確認

eas build -p android --profile preview

↓

APK

Google Play公開

eas build -p android --profile production

↓

AAB

という非常にわかりやすい運用になります。

最短手順だけまとめると

すでにExpoアプリが完成しているなら、実際にはこれだけです。

cd ~/projects/my-app

npm install -g eas-cli

eas login

eas whoami

eas build:configure

eas.json

{
  "build": {
    "preview": {
      "distribution": "internal",
      "android": {
        "buildType": "apk"
      }
    },
    "production": {}
  }
}

APK作成

eas build -p android --profile preview

Google Play用AAB

eas build -p android --profile production

これで 「WSLで開発 → EASクラウドビルド → APKで実機確認 → AABでGoogle Play公開」 という流れを作れます。