Androidアプリのリリースを行うのは初めてでしたので、備忘録をかねて残しておきます。扱い慣れたWebとは違い全く未知の領域なので不安がありましたが、幸いネット上の情報が多く問題なく進めていくことができました。
1.GooglePlayの開発者登録を行う
1-1.Googleアカウント作成
https://accounts.google.com/signup
Googleアカウントはいろいろなサービスに紐づくので、既にアカウントを持っている場合でも、開発用に新しく取得したほうが何かとよさそうです。
1-2.Google Play Consoleにログイン
https://developer.android.com/distribute/console/index.html
$25の支払を行います。
googleはこの約2500円を一度払うのみでOK。(Appleは年更新)
支払い後の画面。
残りの情報を入力し登録を完了させます。
登録完了で以下ページにアクセスできるようになります。
2.作ったアプリを公開するための準備
大まかに以下の手順が必要
- 公開用に、デジタル署名したパッケージファイル(apk)の準備
- GooglePlay ストアの掲載情報を登録する
- アプリのリリース情報を管理(追加)
2-1.build前の準備
2-1-1.keystoreを作成
keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
「my-release-key.keystore」が生成されるので、android/app配下に移動
生成時に入力した情報は大切に保管しておく。
2-1-2.andoroidディレクトリ内のManifestfileを変更
android/app/src/main/AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.*******">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:name=".MainApplication"
android:label="@string/app_name"
android:icon="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher_round"
android:allowBackup="false"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode"
android:launchMode="singleTask"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
</application>
</manifest>
android:versionCode
android:versionName
android:label
android:icon
を変更
参照先は「android/app/src/main/res/values/strings.xml」にあるのでそっちを書き換える
2-1-3.gradle.propertiesファイルを変更
android\gradle.propertiesでキーストアの設定を追加します。
my-key-aliasも任意のaliasで可
MYAPP_UPLOAD_STORE_FILE=my-release-key.keystore
MYAPP_UPLOAD_KEY_ALIAS=my-key-alias
MYAPP_UPLOAD_STORE_PASSWORD=*******
MYAPP_UPLOAD_KEY_PASSWORD=*******
2-1-4.build.gradleファイルの修正
app\guild.gradleファイルにリリース時用の設定を追記
signingConfigs {
debug {
storeFile file('debug.keystore')
storePassword 'android'
keyAlias 'androiddebugkey'
keyPassword 'android'
}
// 以下を追記
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 {
debug {
signingConfig signingConfigs.debug
}
release {
// Caution! In production, you need to generate your own keystore file.
// see https://facebook.github.io/react-native/docs/signed-apk-android.
// 以下をdebugからreleaseに変更
signingConfig signingConfigs.release
// --
minifyEnabled enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
}
}
2-2.Androidアプリを公開用にbuild
2-2-1.androidディレクトリ配下でbuildを実行
./gradlew assembleRelease
「apk」ファイルが「android\app\build\outputs\apk\release」配下にできあがります。
2-2-2.上記のファイルにデジタル署名を行う
jarsigner -verbose -keystore my-release-key.keystore app/build/outputs/apk/release/app-release.apk my-key-alias
※2-1-3~2-1-4でファイルを編集しておくとbuild時にデジタル署名をしてくれるので不要
2-2-3.zipalignを行いapkを最適化する
調べたが詳しくはわからないけどお約束事のようなものと書いてあったので、言われるがままにやる。
zipalign -v 4 <元のapkファイル名> <最適化後のapkファイル名>
zipalign -f -v 4 app/build/outputs/apk/release/app-release.apk outfile.apk
最適化されているか確認するのは以下のコマンド
zipalign -c -v 4
zipalignコマンドとか、いきなり登場したけどなんじゃと思ったら案の定エラー。
「’zipalign’ は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
AndroidStudioでAndroid SDK Managerの「Build-tools」をインストールする必要がありました。
zipalignまでのパスを通します
C:\Users\ユーザー名\AppData\Local\Android\sdk\build-tools\バージョン
パスを通すとなぜかAndroidStudioが起動しなくなりましたが、恐らくいまは無関係な部分なのでVSCodeからzipalignコマンドを再度実行するとうまくいきました。
これで署名&最適化されたapkファイルが生成されます。
2-2-4.リリース時のコマンドの違い
どうやらビルドファイルを生成するにはいくつかコマンドがあるよう。
./gradlew bundleRelease
./gradlew assembleRelease
./gradlew installRelease
それぞれの使用例は以下のようになってました。
I use assembleRelease
to build an apk that I want to share with other people.
I use installRelease
when I want to test a release build on a connected device.
I use bundleRelease
when I am uploading my app to the Play Store.
説明については以下で詳しく説明がありました。
https://stackoverflow.com/questions/57072558/whats-the-difference-between-gradlewassemblerelease-gradlewinstallrelease-and
上記で行うassembleReleaseの場合は「apk」ファイルが生成され、bundleReleaseでは「aab」ファイルが生成されます。
※英文を読む限り他の人に教えるのはassembleReleaseでいいように感じますが、以下で解説する実機検証はbundleリリースでのみうまくいきました。
googleplaystoreに公開時もbunbleReleaseが推奨されているようです。
ちょっとよくわかってないというのが正直なところ。
bundleリリースの場合も同様にzipalignは行うので、パスを書き換えてやります。
3.公開前にリリース版を使って実機検証
エミュレータでのテストしかやっていない、オープンβとして周りに配布したいという場合に便利なサービスがこちら。
https://deploygate.com/
リンクのサイトにaabをアップロードすれば本当に驚くほど簡単に実機へのインストールを行うことができました。
無料版でも一通りは使えるのでとてもオススメです。
4.ついにgoogle playにアプリを公開
GOOGLE PLAYにANDROIDアプリを公開ボタンから、言語、アプリ名を入力します。デフォルトの言語は日本限定でリリースしたい場合を除き、英語にしておくと良いらしいです。
このように情報入力が済んだ箇所からチェックマークがついていきます。
説明は日本語で特に難しい部分もなさそうでしたので、それぞれの入力については割愛します。
おつかれさまでした!
その他得た知見など
各サイズのアイコン一括生成に便利
https://resizeappicon.com/