作ったアプリの公開方法
使ったもの
やり方
1. アプリアイコンの作成と適用
Google Fontsから使えそうなアイコンを見つけて、Canvaで色をつける。その後、AppIcon GeneratorでAndroid, iOSに対応した画像セットを作成し、出力された画像データを適切なフォルダに配置する。
Android
your_flutter_project/
└── android/
└── app/
└── src/
└── main/
└── res/
├── mipmap-hdpi/
├── mipmap-mdpi/
├── mipmap-xhdpi/
├── mipmap-xxhdpi/
└── mipmap-xxxhdpi/
iOS
your_flutter_project/
└── ios/
└── Runner/
└── Assets.xcassets/
└── AppIcon.appiconset/
3. Google playに登録する
Google Play StoreにAndroidアプリをリリースする手順を参考に登録する。VScodeで開発したので、Android Studioの機能が使えなかったため、以下の対応をした。
4. Google play アプリ署名の登録方法
Google Play アプリ署名(Play App Signing)とは、Google に署名鍵(リリースキー)を安全に管理してもらい、開発者は「アップロード鍵」で署名して .aab を提出するだけでよくなる仕組みです。
アップロード鍵を用意するアップロード用キーストア(upload keystore)は、自分で作成・保管する必要があるファイルです。Google はそれを自動的に作成・提供は しません。下記のコマンドを実行して質問に答えることで、作成できた。
# アップロード用キーストア
keytool -genkey -v \
-keystore upload-keystore.jks \
-keyalg RSA -keysize 2048 -validity 10000 \
-alias upload
# 各コマンドの意味
keytool -genkey -v \
-keystore upload-keystore.jks \ # ← 作成するキーストアのファイル名
-keyalg RSA \ # ← 鍵のアルゴリズム(RSA)
-keysize 2048 \ # ← 鍵のビット数(2048bit)
-validity 10000 \ # ← 有効期間(日数)→ 約27年
-alias upload # ← この鍵の名前(別名)
コマンドを実行すると、以下のような質問(情報入力)が求められます:
Keystore password: ●●●●●●
Your name and surname:
Your organizational unit:
Your organization:
Your City or Locality:
Your State or Province:
Your Country Code (XX):
| 入力画面での質問 | `key.properties` での設定 |
| ----------------------------------- | --------------------- |
| **Enter keystore password:** | ✅ `storePassword` |
| **Enter key password for <alias>:** | ✅ `keyPassword` |
| **-alias upload** | ✅ `keyAlias` |
実行場所はどこでも良い。
| 条件. | 内容 |
| ------- | ------------------------------------------------------------------------- |
| 実行場所 | 任意のディレクトリでOK(例:ホームディレクトリ) |
| 出力先 | コマンドを実行した場所に `upload-keystore.jks` が作成されます |
| 次の作業 | Flutter プロジェクトの `android/key.properties` にそのファイルパスを指定します |
keytool -genkey コマンドを実行すると、キーストア(署名鍵)を作成するための対話形式の質問が表示されます。以下、それぞれの入力項目の意味と入力例を説明します。
# 入力項目の意味と入力例
| 質問 | 意味 | 入力例 |
| ---------------------------- | --------------------------- | --------------------------------- |
| **Keystore password** | `.jks` ファイル全体のパスワード | `MySecureStore123!`(自分で決める) |
| **Your name and surname** | 開発者の名前(実名または会社名) | `Taro Yamada` または `MyApp Inc.` |
| **Your organizational unit** | 部署名など(空欄でもOK) | `Development` |
| **Your organization** | 会社名または個人事業名 | `YamadaWorks` |
| **Your City or Locality** | 市区町村 | `Shibuya` |
| **Your State or Province** | 都道府県 | `Tokyo` |
| **Your Country Code (XX)** | 国コード(2文字) | `JP`(日本の場合) |
プロジェクトルート/androidフォルダにkey.propertiesを作成する
key.properties ファイルを作成して、下記内容を記述する。
storePassword=your_store_password
keyPassword=your_key_password
keyAlias=upload
storeFile=/Users/yourname/path/to/upload-keystore.jks
VScodeで.aab ファイルを作る
Flutter プロジェクトのルートディレクトリで、下記のコマンドを実行する。
flutter build appbundle
✓Buildメッセージが表示されていれば、Flutterは .aab ファイルを正常に生成できている。
✓ Built build/app/outputs/bundle/release/app-release.aab (24.3MB)
aabファイルをアップロードした際に、アップロードされた APK または Android App Bundle がデバッグモードで署名されています。APK または Android App Bundle はリリースモードで署名する必要があります。詳しくは、署名についての説明をご覧ください。と表示される場合は、android/app/build.gradleでリリースビルドでデバッグキーを使用している設定になっている可能性があります。
signingConfig = signingConfigs.debug
また、私はandroid/app/build.gradleファイルのandroid{}の先頭(pluginsブロックの前)に以下のコードが必要だったので、追記しました。
def keystorePropertiesFile = rootProject.file("key.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
修正箇所まとめ
android/app/build.gradleで先頭に下記を追加
def keystorePropertiesFile = rootProject.file("key.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
buildTypesの中身もsigningConfig = signingConfigs.debugを削除して、下記に書き換え。
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
また、signingConfigsも追記。
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
発生したトラブル
アプリは Android 15(API レベル 35) 以降を対象とする
FlutterでターゲットSDKを更新するには、次のようにtargetSdkの設定を変更
defaultConfig {
# 他の定義
targetSdk = 35
}
アプリバージョンを上げてから再び下記コマンドを実行し、aabファイルを作成する。
flutter clean
flutter build appbundle
作成されたaabファイルをplayコンソールにアップロードし、新しいリリースを作成することによって、トラブルを解消できる。
履歴
- [2025-07-26 Sat] keystoreについて追記。トラブルに関しては以下のようなプロンプトをGemini-cliに入力して原因を見つけてもらった。
flutter build appbundleを実行した際に作られたaabファイルをアップロードすると、アップロードされた APK または Android App
Bundle がデバッグモードで署名されています。APK または Android App Bundle
はリリースモードで署名する必要があります。詳しくは、署名についての説明をご覧ください。と言われてしまい、リリースすることができませんでした。key.propertiesは正しく設定できていると思うので、原因がよくわかりません。関連するファイルを確認して原因を見つけてください。