今回はFlutter製AndroidアプリをPlayストアにリリースするまでの手順を解説していきます。
リリースするには大きく3つのステップが必要になります。
- アプリを開発する
- リリースビルドをする
- Playストアにアプリをリリースする
この記事にたどり着いたという事はアプリは既に開発済みかと思うので、今回は②と③の箇所を解説していきます。
目次
環境
今回リリースしてみるアプリのflutter doctorはこんな感じです。
今回扱うバージョンでなくてもリリース方法は変わらないかと思うので安心して読んでみてください。
$ flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 2.2.2, on Mac OS X 10.15.4 19E2269 darwin-x64, locale ja-JP)
[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.2)
[✓] Xcode - develop for iOS and macOS
[✓] Chrome - develop for the web
[✓] Android Studio (version 4.1)
[✓] IntelliJ IDEA Ultimate Edition (version 2020.2.2)
[✓] VS Code (version 1.62.3)
[✓] Connected device (2 available)
• No issues found!
リリースビルドをする
keystoreファイルを作成する
Androidアプリをリリースビルドする際にはアプリを署名するためのkeystoreファイルと呼ばれるものが必要です。
keystoreファイルはコマンド一つ叩くだけで簡単に作成できます。
$ keytool -genkey -v -keystore ./key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
キーストアのパスワードを入力してください:
新規パスワードを再入力してください:
姓名は何ですか。
[Unknown]:
組織単位名は何ですか。
[Unknown]:
組織名は何ですか。
[Unknown]:
都市名または地域名は何ですか。
[Unknown]:
都道府県名または州名は何ですか。
[Unknown]:
この単位に該当する2文字の国コードは何ですか。
[Unknown]: JP
CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=81でよろしいですか。
[いいえ]: はい
10,000日間有効な2,048ビットのRSAのキー・ペアと自己署名型証明書(SHA256withRSA)を生成しています
ディレクトリ名: CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=JP
[./key.jksを格納中]
質問をいくつか聞かれますがが、こだわりが無ければパスワード以外には特に入力しなくても問題ないです。
入力したい方は適宜入力していきましょう。
今回はパスワードと国コードだけ入力しておきました。
ここで入力したパスワードは次の工程で必要になるので忘れないようにしてください。
作成されたkeystoreファイルはandroid/appの配下に置いておきます。
key.propertiesをつくる
次にkey.propertiesという設定ファイルをandroidディレクトリ配下に作成します。
▼android/key.properties
storePassword=<パスワード>
keyPassword=<パスワード>
keyAlias=key
storeFile=key.jks
storePasswordとkeyPasswordには先程作ったkeystoreで入力したパスワードを記載してください。
build.gradleを編集する
次にandroid/app配下のbuild.gradleを3箇所編集していきます。
▼android/app/build.gradle
// buildTypesの前とかに追記
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
storePassword keystoreProperties['storePassword']
}
}
buildTypes {
release {
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
signingConfig signingConfigs.release //←debugをreleaseに変える!
}
}
// 追記
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
AndroidManifest.xmlでアプリ名をつける
android:labelにアプリ名を記載しましょう。
▼android/app/src/main/AndroidManifest.xml
<application
android:label="アプリ名"
<!--中略-->
>
com.exampleを変更する
バンドルIDに「com.example」を使っている方は変更しないとリリースできないので、他のIDに変更しておきます。
プロジェクト内で「com.example」をgrepして一括置換するとスムーズです。
flutter cleanする
最後にflutter cleanコマンドを実行してキャッシュされたビルドが署名プロセスに影響を与えることを防ぎます。
$ flutter clean
リリースビルドする
ようやくリリースビルドを行っていきます。
昔はリリースビルドの形式で「apk」か「aab」のどちらかを選ぶ形でしたが、今は「aab」でのビルドが推奨になっているのでそちらで行っていきます。
$ flutter build appbundle
Running "flutter pub get" in app_name... 610ms
💪 Building with sound null safety 💪
Removed unused resources: Binary resource data reduced from 67KB to 52KB: Removed 21%
Running Gradle task 'bundleRelease'...
Running Gradle task 'bundleRelease'... Done 47.6s
✓ Built build/app/outputs/bundle/release/app-release.aab (16.6MB).
これで署名付きのAndroidアプリがビルド完了です!
このビルドしたアプリは後ほどGoogle Play Consoleに追加していくので消さないようにしてください。
Playストアにアプリをリリースする
Google Play Consoleに登録する
まずはGoogle Play Consoleに開発者として登録する必要がありますので下記のリンクから登録しましょう。
https://play.google.com/apps/publish/signup/
その際に25$ほどの手数料がかかります。
(Apple Developerと違って一度払えば後は追加料金は発生しませんし、比較的安価なので良心的ですね。)
アプリを作成する
「全てのアプリ」>「アプリの追加」
「アプリの詳細」を入力していきます。
これでアプリの作成は完了です。
アプリのセットアップをする
次にダッシュボードに表示される「アプリのセットアップ」の項目をひたすら埋めて行きます。
表示されている項目を上から順に記入していけば特に詰まる箇所無く進められると思います。
ちなみに「データセーフティ」の項目で既にインターネットに上がっているプライバシーポリシーの提示が求められます。
まだ作成できていない方は「GitHub Pagesでアプリのリリースに必要なプライバシーポリシーを簡単作成する」で簡単な作成方法を解説しているので良ければ参考にしてください。
GitHub Pagesでアプリのリリースに必要なプライバシーポリシーを簡単作成するアプリをアップロードする
次にアプリをPlayコンソールにアップロードしていきます。
左サイドバーの「製品版」>「新しいリリースを作成」を押します。
そうしたら遷移先画面の「App Bundle」の「アップロード」をクリックして先程リリースビルドしたアプリをアップロードしましょう。
リリースビルドしたアプリのパスは「プロジェクト名/build/app/outputs/bundle/release」で、拡張子が「.aab」のファイルです。
リリースノートを記載する
アップロードしたらリリースノートを記載します。
リリース名はアプリをアップロードした時に自動入力されます。
リリースノートにはそのリリースでのアップデート内容等を記載する箇所です。
初めてのリリースであれば「アプリをリリースしました」くらいでも問題ないと思います。
最後に画面右下の「リリースのレビュー」>「製品版として公開を開始」と押せばアプリの審査が開始されます。
※リリース済のアプリをアップデートする
既にリリース済の既存アプリをアップデートする場合は以下の手順でやりましょう。
新しいバージョンを設定
pubspec.yamlに記載のバージョンを更新します。
~~~
// バージョンを変更する。
// 「○.○.○」の所は変更しなくてもいいが「△」の数字は変える必要がある
// Ex. version: 1.2.0+3
version: ○.○.○+△
environment:
sdk: ">=2.12.0 <3.0.0"
~~~
リリースビルドを実行
$ flutter clean
$ flutter build appbundle
新しいリリースを作成する
playコンソールで「製品版」>「新しいリリース」を押します。
そこからは新規でアプリをリリースする手順と一緒で、リリースビルドしたaabファイルをアップロードして審査に出せば完了です。
お疲れさまでした
ここまででPlayストアにリリースするまでの手順は全て完了になります。
審査の期間としてはシンプルなアプリであれば1日、それなりのアプリであれば4,5日くらいの体感です。
アプリをリリースする機会はそう頻繁にあるわけでは無いと思うのでやり方を忘れたらまたこの記事を読み直してみてください。
抜けている箇所や質問等があれば指摘お待ちしております。
このブログでは他にもFlutter関係の記事を上げているので良ければそちらも参考にしてみてください。
【2022年最新】現役エンジニアがFlutter初学者向けおすすめ技術書3選を紹介!【Flutter】Widgetのサイズを変更できるSizedBoxの使い方【サンプルコードあり】
【Flutter】ElevatedButtonでイケてるボタンのレイアウトを簡単作成【サンプルコードあり】
よきFlutterライフをー
分かりやすく、助かりました!iOS版の手順書もお待ちしております。
お役に立てて嬉しいです!
iOS版も近々書きます!
参考にさせていただきます!
一つ質問があるのですが、ビルドしたり、クリーンしたりっていうのは、main(master)ブランチではなく他のブランチ切ってやった方がいいですか?
返信遅れて申し訳ありません。
mainブランチで問題ないです。
(最終的にアプリとして完成しているプログラムが反映されているブランチがmainだと思いますので。)
質問させて頂きます。
$ keytool -genkey -v -keystore ./key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
のコマンドを打ち込むと、
Could not find a command named “keytool”.
とエラーが出る場合はどの様に対処すればよいのでしょうか?
そのエラーでスタートから先に進めません。。。
keytoolのあるパスを直接指定してコマンドを実行する必要がありそうです。
flutter doctor -v
を叩いて
Android toolchain箇所の「Java binary at」 という部分に記述されているパスがkeytoolがある場所になります。
その場所をkeytoolの代わりに指定してコマンドを叩いてみてください。
参考として僕のkeytoolのパスを直接指定したコマンド例を↓に貼っておきます。
(パスはダブルクォーテーションで囲むのをお忘れなく)
“/Applications/Android\ Studio.app/Contents/jre/jdk/Contents/Home/jre/bin/keytool” -genkey -v -keystore ./key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
とても参考になりました!
ありがとうございます!