はじめに
ReactNativeで開発しているアプリが完成の運びとなりました。
ストア公開はまだ先なのですが、リリースビルド時の手順を備忘として書いていきます。
keystore作成
リリースビルド作成に先立ち、keystoreファイルの作成が必要です。
keystoreファイルとはざっくり説明すると「開発者である個人または法人を特定するもの」です。
作成にはプロジェクトルートで下記のコマンドを実行します。
keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
対話形式でいくつかの質問(名前やらパスワードやら)に回答します。
回答し終えるとrelease-key.keystore
が作成されるので、これを
android/app
に移動します。
gradle.propertiesを修正
android/gradle.properties
に先ほど入力したパスワード等を記入します。PC全体の設定としたい場合は~/.gradle/gradle.properties
の方を修正してください。
MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
MYAPP_RELEASE_STORE_PASSWORD=【ストアパスワード】
MYAPP_RELEASE_KEY_PASSWORD=【キーパスワード】
build.gradleを修正
android/app/build.gradle
をgradle.properties
の値を参照するように修正します。
...
android {
/* 略 */
signingConfigs {
release {
if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {
storeFile file(MYAPP_RELEASE_STORE_FILE)
storePassword MYAPP_RELEASE_STORE_PASSWORD
keyAlias MYAPP_RELEASE_KEY_ALIAS
keyPassword MYAPP_RELEASE_KEY_PASSWORD
}
}
}
buildTypes {
release {
/* 略 */
signingConfig signingConfigs.release
}
}
}
android直下でリリースコマンドを実行
cd android
gradlew assembleRelease
これでandroid/app/build/outputs/apk/release
にapp-release.apk
が作成される...はずでしたが、自分の場合は下記のエラーに遭遇しました。
Execution failed for task ':app:mergeReleaseResources'.
...
com.android.builder.internal.aapt.v2.Aapt2Eception: Android resource compilation failed
【対象リソースパス】: error: failed to read PNG signature: file does not start with PNG signature.
どうやらプロジェクト内で使っていたPNGファイルのフォーマットがおかしかったようです(思えばスプラッシュのテストに使う画像の拡張子をjpgからpngにリネームしただけだった)。
上記を修正したところ正常にapkファイルが書き出されました。
やったー!
追記.GooglePlayStoreに公開できる状態にする
GooglePlayStoreに公開するためには、最適化と署名が必要になります。
Android直下でzipalignを実行
zipalign -f -v 4 app/build/outputs/apk/release/app-release.apk my-app.apk
zipalignしたAPKファイルに署名する
apksigner sign --ks app/my-release-key.keystore --ks-key-alias my-key-alias my-app.apk
keystore作成時に設定したパスワードを求められるので入力します。
これでGooglePlayStore公開可能なAPKファイルが作成されました!