Google Play Storeへの公開

Android では、すべてのアプリをインストールする前に、証明書によるデジタル署名を行う必要があります。 Google Play ストア経由で Android アプリケーションを配布するには、リリース キーで署名する必要があり、そのキーを今後のすべての更新に使用する必要があります。 2017年以降、App Signing by Google Playの機能により、Google Playが自動的に署名リリースを管理することが可能になっています。 しかし、アプリケーションバイナリがGoogle Playにアップロードされる前に、アップロードキーで署名される必要があります。 Android DevelopersのドキュメントにあるSigning Your Applicationsのページで、このトピックの詳細が説明されています。 このガイドでは、このプロセスの概要を説明し、JavaScript バンドルをパッケージ化するために必要な手順を一覧で示します。 Windows では、keytoolC:\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

Copy

このコマンドは、鍵ストアと鍵のパスワード、および鍵の識別名フィールドを尋ねるプロンプトが表示されます。 そして、my-upload-key.keystore.

というファイルとして鍵ストアを生成します。

鍵ストアには、10000日間有効な1つの鍵が含まれています。 エイリアスは、後でアプリに署名するときに使用する名前なので、エイリアスのメモを忘れないでください。

Macでは、JDKのbinフォルダーがどこにあるかわからない場合、次のコマンドを実行して見つけます。

/usr/libexec/java_home

Copy

このような JDK ディレクトリを出力します:

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

コピー

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

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

Copy

Note: keystore ファイルは忘れずにプライベートにしておいてください。 万が一、アップロード鍵を紛失したり、漏洩した場合は、以下の手順に従ってください。

Gradle 変数の設定#

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

コピー

これらはGradleグローバル変数として、後でGradle configでアプリに署名するために使用する予定だ。

セキュリティに関する注意事項。 パスワードを平文で保存することに抵抗があり、macOS を実行している場合、Keychain Access アプリに資格情報を保存することもできます。 その後、~/.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#

ターミナルで以下を実行:

cd android
./gradlew bundleRelease

コピー

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

Note: gradle.propertiesorg.gradle.configureondemand=true を含まないことを確認し、これにより、リリース ビルドが JS とアセットをアプリ バイナリにバンドルせずにすむようにします。

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

Google Play で AAB 形式を受け入れるには、Google Play コンソールでアプリケーションに対して App Signing by Google Play を設定する必要があります。 App Signing by Google Play を使用していない既存のアプリを更新する場合は、移行セクションで設定変更の方法を確認してください。

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

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

npx react-native run-android –variant=release

Copy

Note that --variant release is only available if you have set up signing as described above.上記のように署名を設定しました。

すべてのフレームワークと JavaScript コードは APK のアセットにバンドルされているので、実行中のバンドル インスタンスを終了することができます。 これにより、ほぼすべての Android デバイスで動作する APK を共有することが容易になります。

android/app/build.gradle の次の行を変更することにより、各 CPU 用の APK を作成できます:

– ndk {
– abiFilters “armeabi-v7a”, “x86”
– }。
– def enableSeparateBuildPerCPUArchitecture = false
+ def enableSeparateBuildPerCPUArchitecture = true

コピー

これらのファイルを Google Play や Amazon AppStore などデバイス ターゲットに対応しているマーケットにアップロードすれば、ユーザーは自動的に該当 APK を取得することができます。 1 つのアプリに対して複数の APK をサポートしない APKFiles などの他のマーケットにアップロードする場合は、次の行も変更して、両方の CPU に対応するバイナリを含むデフォルトのユニバーサル APK を作成します。

– universalApk false // true の場合、ユニバーサル APK も生成
+ universalApk true // true の場合、ユニバーサル APK も生成

コピー

Proguard による APK サイズ削減を可能に (Optional)#

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

IMPORTANT: Proguard を有効にした場合、アプリを完全にテストすることを確認してください。 Proguard は、多くの場合、使用している各ネイティブ ライブラリに固有の構成を必要とします。 app/proguard-rules.pro.

Proguard を有効にするには、android/app/build.gradle:

/**
* リリース ビルドで Java バイトコードを縮小する Proguard を実行します。
*/

def enableProguardInReleaseBuilds = true

コピー

Migrating old Android React Native apps to use App Signing by Google Play#

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

Default Permissions#

By default, INTERNET permission is added to your Android app as pretty much all apps use it.これは、ほとんどのアプリが使用する権限です。 SYSTEM_ALERT_WINDOW 権限は、デバッグ モードでは Android APK に追加されますが、実稼働環境では削除されます。