はじめに
Flutterアプリの制作は二度目ですが、前回の経験をまるごと忘れてしまったので、記事として残しておきます。よければLGTMお願いします。
Android Studio 起動!
Android Studioを起動して、アプリのディレクトリを開きましょう。
話はそこからです。
Android moduleを開く
アプリのプロジェクトからでは、Build -> Generate Signed Bundle / APK ...というアクションを行えないため、Android moduleを開く必要があります。

上のようにToolsメニューをたどって、Open Android module in Android Studioを押してください。
Signed APKを作成する

Build -> Generate Signed Bundle / APK...を押してください。

上のような画面が出てきます。
これは作成するのがApp BundleかAPKのどちらかを選ぶ画面です。
今回はAPKの方で作成するので、そちらを選択してNextを押します。

Nextで先に進むと、上のような画面になります。
(この画像では全ての欄が埋まっていますが、本来はどの欄も埋まっていません。)
赤枠で囲ってあるCreate new...を押してください。
すると、上のような画面になります。
ここでkeyStore, keyの設定をします。
一番上のKey store pathにはAPP_NAME/android/appを選んでおきます。
ファイルの名前はrelease.jksとしておきましょう。
(後でこの名前を使います。違う名前の場合は置き換えて考えてください。)
あとはPasswordを決めると、KeyStoreの設定は終わりです。
Keyの設定では、まずKeyの名前を決めます。
(なんでもいいのでkey0とかでいいと思います。)
次にKeyのパスワードを決めますが、特別な事情がない場合はKeyStoreと同じパスワードでいいでしょう。
ValidityはKeyの有効期間です。デフォルトでは25年になっています。
変更したければ変更しましょう。自分はそのままにしています。
次に開発者情報を入力します。
指定通りに入力を進めていきますが
- First and Last Name
- State or Province
- Country Code(XX)
の三つがあれば十分かなと自分は思っています。
KeyStoreとkeyの項目は、あとで必要になるので全てメモしておきましょう
入力を終えたら、OKを押します。
OKで先ほどのページに戻ってきます。
戻ってきたときには、すべての欄が埋まっているはずです。
Key passwordのRemember passwordsは自由にしてください。
欄が埋まっていることを確認したら、Nextを押します。
上のような画面に移動します。
Build Variantsをreleaseに設定します。
またSigrature VersionsもV1,V2の両方を選択するのが安牌でしょう。
以上を確認したらFinishを押します。
するとどこかにSigned APKが生成開始されるので待ちましょう。
(私は今回これを使わず、flutter buildコマンドからbuildできるようにしているので先に進みます。)
キーストアを参照する
これからアプリから作成したキーストアを参照します。

androidディレクトリにkeystore.propertiesというファイルを作ります。
ここに
- KeyStoreのパスワード(
storePassword) - keyのパスワード(
keyPassword) - keyの名前(
keyAlias) - jksファイルの場所(
storeFile)
をそれぞれ入力していきます。
(storeFileの箇所は、release.jksファイルをandroid/appディレクトリに作ったと思うので、release.jksと書いてください。)
このkeystore.propertiesには重要な情報が載っているため、GitHub等でだれもが見れる状態にしておいてはいけません。

そこでandroid/.gitignoreに
*.jks
keystore.properties
と書くことでそれを防止することができます。
Gradleファイルでの署名設定
android/app/build.gradleを開いてください。
そのとき、上のメニューバーにOpen for Editing in Android Studioというボタンがあると思うのでそれを押しましょう。

上の画像のようにandroid {...の上に黄色枠で囲った部分を追記してください。
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('keystore.properties')
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}

その後、50行目あたりにあるbuildTypesを消去して、

上の赤枠のように書き換えます。
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
storePassword keystoreProperties['storePassword']
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
android/app/build.gradleで変更できることに以下があります。
- Androidの対応OS(下の画像の赤丸)
- アプリのパッケージ名(
firebaseを利用する際に必要)
gradleファイルを編集した際は、Sync Nowで同期しておくのが良いでしょう。

これでgradleファイルでの署名設定は終了です。
APKファイルの生成
ここまでくれば、あとはコマンドを打ち込むだけです。
flutter build apk
というコマンドでapkファイルが生成されます。
注意
apkを分割してbuildした方がいいです。(アプリサイズが小さくなります。)
目的に合ったオプションをapkの後ろに付けてコマンドを叩きましょう。
ちなみに上のコマンドを叩くと、コマンドラインさんにも同じことを言われます。

コマンドを叩くと、上のようにbuild\app\autputs\flutter-apkディレクトリにapkファイルが生成されます。
このapkファイルをgoogle playにアップロードすることでアプリを世界にリリースできます!
お疲れさまでした!
おまけ:アプリのバージョンアップ
アプリのバージョンを管理するのはpubspec.yamlです。

versionに指定する数字は二つに分かれており、画像の例では
- 1.0.0 = VersionCode
- (+)1 = VersionNumber
となります。
アプリのバージョンアップに大事なのはVersionNumberの方です。
たとえVersionCodeを変更しても、VersionNumberがそのままだとアップデート用のapkファイルはアップロードできません。
逆にVersionNumberが違えば、VersionCodeが同じでもアップロードができます。
versionを正しく変更してapkファイルを作り、アプリのアップデートを行いましょう。
おわり
読んでいただいてありがとうございました!
この記事でリリーズビルドした方はLGTMをお忘れなく(笑)
twitterはこちらから
参考記事

