メインコンテンツへスキップ

Google Playストアへの公開

Androidでは、すべてのアプリをインストールする前に、証明書でデジタル署名する必要があります。AndroidアプリケーションをGoogle Playストア経由で配布するには、リリースキーで署名する必要があり、そのキーは今後のすべてのアップデートに使用する必要があります。2017年以降、Google Playによるアプリ署名機能のおかげで、Google Playが署名リリースを自動的に管理できるようになりました。ただし、アプリケーションバイナリをGoogle Playにアップロードする前に、アップロードキーで署名する必要があります。Android Developersドキュメントのアプリケーションへの署名ページで、このトピックについて詳しく説明しています。このガイドでは、そのプロセスを簡単に説明し、JavaScriptバンドルをパッケージ化するために必要な手順をリストします。

情報

Expoを使用している場合は、ExpoガイドのApp Storeへのデプロイを参照して、Google Playストア向けにアプリをビルドおよび送信してください。このガイドは、すべてのReact Nativeアプリで動作し、デプロイプロセスを自動化します。

アップロードキーの生成

keytoolを使用して、プライベート署名キーを生成できます。

Windows

Windowsでは、keytoolを管理者としてC:\Program Files\Java\jdkx.x.x_x\binから実行する必要があります。

keytool -genkeypair -v -storetype PKCS12 -keystore my-upload-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

このコマンドは、キーストアとキーのパスワード、およびキーの識別名フィールドを要求します。その後、キーストアをmy-upload-key.keystoreという名前のファイルとして生成します。

キーストアには、10000日間有効な単一のキーが含まれています。エイリアスは、後でアプリに署名するときに使用する名前であるため、エイリアスをメモしておいてください。

macOS

macOSで、JDKのbinフォルダの場所が不明な場合は、次のコマンドを実行して見つけてください

/usr/libexec/java_home

これにより、JDKのディレクトリが出力され、次のようなものが表示されます

/Library/Java/JavaVirtualMachines/jdkX.X.X_XXX.jdk/Contents/Home

cd /your/jdk/pathコマンドを使用してそのディレクトリに移動し、以下に示すようにsudo権限でkeytoolコマンドを使用します。

sudo keytool -genkey -v -keystore my-upload-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
注意

キーストアファイルをプライベートに保つことを忘れないでください。アップロードキーを紛失した場合や、それが侵害された場合は、これらの手順に従ってください

Gradle変数の設定

  1. my-upload-key.keystoreファイルをプロジェクトフォルダのandroid/appディレクトリに配置します。
  2. ~/.gradle/gradle.propertiesまたはandroid/gradle.propertiesファイルを編集し、以下を追加します(*****を正しいキーストアパスワード、エイリアス、およびキーパスワードに置き換えます)。
MYAPP_UPLOAD_STORE_FILE=my-upload-key.keystore
MYAPP_UPLOAD_KEY_ALIAS=my-key-alias
MYAPP_UPLOAD_STORE_PASSWORD=*****
MYAPP_UPLOAD_KEY_PASSWORD=*****

これらは、アプリに署名するためにGradle構成で後で使用できるグローバルGradle変数になります。

gitの使用に関する注意

上記のGradle変数をandroid/gradle.propertiesではなく~/.gradle/gradle.propertiesに保存すると、それらがgitにチェックインされなくなります。変数追加する前に、ユーザーのホームディレクトリに~/.gradle/gradle.propertiesファイルを作成する必要がある場合があります。

セキュリティに関する注意

パスワードをプレーンテキストで保存したくない場合、macOSを実行している場合は、キーチェーンアクセスアプリに資格情報を保存することもできます。その後、~/.gradle/gradle.propertiesの最後の2行をスキップできます。

アプリのGradle構成への署名構成の追加

完了する必要がある最後の構成手順は、アップロードキーを使用して署名されるリリースビルドを設定することです。プロジェクトフォルダのandroid/app/build.gradleファイルを編集し、署名構成を追加します。

...
android {
...
defaultConfig { ... }
signingConfigs {
release {
if (project.hasProperty('MYAPP_UPLOAD_STORE_FILE')) {
storeFile file(MYAPP_UPLOAD_STORE_FILE)
storePassword MYAPP_UPLOAD_STORE_PASSWORD
keyAlias MYAPP_UPLOAD_KEY_ALIAS
keyPassword MYAPP_UPLOAD_KEY_PASSWORD
}
}
}
buildTypes {
release {
...
signingConfig signingConfigs.release
}
}
}
...

リリースAABの生成

ターミナルで次のコマンドを実行します

npx react-native build-android --mode=release

このコマンドは、アプリを実行するために必要なすべてのJavaScriptをAAB(Android App Bundle)にバンドルする、GradleのbundleReleaseを内部で使用します。JavaScriptバンドルや描画可能リソースをバンドルする方法を変更する必要がある場合(たとえば、デフォルトのファイル/フォルダ名やプロジェクトの一般的な構造を変更した場合)、android/app/build.gradleを参照して、これらの変更を反映するように更新する方法を確認してください。

注意

gradle.propertiesorg.gradle.configureondemand=trueが含まれていないことを確認してください。そうしないと、リリースビルドでJSとアセットのアプリバイナリへのバンドルがスキップされます。

生成されたAABは、android/app/build/outputs/bundle/release/app-release.aabにあり、Google Playにアップロードする準備ができています。

Google PlayでAAB形式を受け入れるには、Google Play Consoleでアプリケーションに対してGoogle Playによるアプリ署名を構成する必要があります。Google Playによるアプリ署名を使用していない既存のアプリを更新する場合は、移行セクションを参照して、その構成変更を実行する方法を確認してください。

アプリのリリースビルドのテスト

リリースビルドをPlayストアにアップロードする前に、必ず徹底的にテストしてください。最初に、既にインストールされているアプリの以前のバージョンをアンインストールしてください。プロジェクトルートで次のコマンドを使用してデバイスにインストールします

npm run android -- --mode="release"

上記の署名設定を行った場合にのみ、--mode releaseが使用可能であることに注意してください。

フレームワークとJavaScriptコードはすべてAPKのアセットにバンドルされているため、実行中のバンドラーインスタンスを終了できます。

他のストアへの公開

デフォルトでは、生成されたAPKには、x86x86_64ARMv7a、およびARM64-v8aのCPUアーキテクチャのネイティブコードが含まれています。これにより、ほぼすべてのAndroidデバイスで実行できるAPKを簡単に共有できます。ただし、これには、どのデバイスでも一部の未使用のネイティブコードが存在し、APKが不必要に大きくなるという欠点があります。

android/app/build.gradleファイルに次の行を追加することにより、各CPUのAPKを作成できます

android {

splits {
abi {
reset()
enable true
universalApk false
include "armeabi-v7a", "arm64-v8a", "x86", "x86_64"
}
}

}

Amazon AppStoreF-Droidなど、デバイスターゲティングをサポートするマーケットにこれらのファイルをアップロードすると、ユーザーは自動的に適切なAPKを取得します。単一のアプリに対して複数のAPKをサポートしていないAPKFilesなどの他のマーケットにアップロードする場合は、universalApk false行をtrueに変更して、両方のCPUのバイナリを含むデフォルトのユニバーサルAPKを作成します。

公式のAndroidドキュメントのこのページで推奨されているように、異なるバージョンコードも構成する必要があることに注意してください。

APKのサイズを縮小するためのProguardの有効化(オプション)

ProguardはAPKのサイズをわずかに縮小できるツールです。これは、アプリが使用していないReact Native Javaバイトコード(およびその依存関係)の部分を削除することで実現します。

重要

Proguardを有効にした場合は、アプリを十分にテストしてください。Proguardは、使用している各ネイティブライブラリに固有の構成が必要になることがよくあります。app/proguard-rules.proを参照してください。

Proguardを有効にするには、android/app/build.gradleを編集します。

/**
* Run Proguard to shrink the Java bytecode in release builds.
*/
def enableProguardInReleaseBuilds = true

Google Playによるアプリ署名を使用するための古いAndroid React Nativeアプリの移行

以前のバージョンのReact Nativeから移行する場合、アプリはGoogle Playによるアプリ署名機能を使用していない可能性があります。自動アプリ分割などのメリットを享受するため、これを有効にすることをお勧めします。古い署名方法から移行するには、まず新しいアップロードキーを生成し、次にandroid/app/build.gradleのリリース署名構成を、リリースキーの代わりにアップロードキーを使用するように置き換える必要があります(gradleに署名構成を追加するセクションを参照)。それが完了したら、Google Playヘルプウェブサイトの指示に従って、元のリリースキーをGoogle Playに送信する必要があります。

デフォルトのパーミッション

デフォルトでは、ほとんどすべてのアプリで使用されるため、INTERNETパーミッションがAndroidアプリに追加されます。SYSTEM_ALERT_WINDOWパーミッションはデバッグモードでAndroid APKに追加されますが、本番環境では削除されます。