Flutterアプリのリリース手順メモ

自分が行っているFlutterアプリのリリース手順をメモ

  1. バージョン番号を上げる

    android/app/build.gradle

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    android {
    ....
    defaultConfig {
    applicationId "com.exp.fuku.myapplication"
    minSdkVersion 16
    targetSdkVersion 28

    // カウントアップ
    // 内部のバージョン番号として使用する整数
    versionCode 5

    // カウントアップ
    // ユーザーに表示するバージョン番号
    versionName "1.0.5"

    pubspec.yaml

    1
    2
    # カウントアップ
    version 1.0.5
  1. Gitでタグをつけておく

    1
    2
    3
    git commit -m "修正版リリースに伴う、バージョン番号の更新"
    git tag -a v1.0.5 -m "release v1.0.5"
    git tag
  1. GitHubへコードとタグをプッシュ

    1
    2
    git push origin master
    git push origin v1.0.5
  1. GitHubでリリースを作る

    1. release > Draft a new release ボタンをクリック

    2. リリース内容を入力

      内容 設定例
      Tag Version v1.0.5
      Release Title v1.0.5
      Describe release v1.0.5
      This is pre-release off
    3. 「Publish release」ボタンをクリック

  1. Google Playで配信するAPKファイルを生成

    1
    flutter build appbundle

    APKファイルの出力先

    1
    build/app/outputs/bundle/app.aab
  1. Google Playで配信する

    1. Google Play Console にログイン

    2. すべてのアプリ > 対象アプリ > リリース管理 > アプリのリリース

    3. 製品版 > 管理 > リリースを作成

      内容 設定値
      追加する Android App Bundle と APK app.aab をアップロード
      このリリースの新機能 リリース説明文
    4. 「保存」をクリック

    5. 「確認」をクリック

    6. 「製品版として公開を開始」をクリック

Flutterアプリのアイコンを変更

Flutterでは、アイコンの生成は下記ライブラリを使うと便利

flutter_launcher_icons

  1. ライブラリをインストール

    pubspec.yaml

    1
    2
    3
    4
    5
    6
    dev_dependencies:
    flutter_test:
    sdk: flutter

    # ここに追記
    flutter_launcher_icons: ^0.7.3
    1
    flutter packages get
  2. アイコン画像へのパスを指定

    pubspec.yaml

    1
    2
    3
    4
    5
    # 
    flutter_icons:
    image_path: "assets/icon/icon.png"
    android: true
    ios: true
  3. アイコンの生成 (画像を変更したら、再度このコマンドを実行する)

    1
    flutter pub run flutter_launcher_icons:main

Flutterアプリの名称を変更

android/app/src/main/AndroidManifest.xml

1
2
3
4
5
<application 
android:name="io.flutter.app.FlutterApplication"
android:label="アプリ名"
android:icon="@mipmap/ic_launcher">
</application>

Flutterレイアウト

Containerクラスの基本形

1
2
3
4
5
Container(
child: ウィジェット,
padding: [ EdgeInsets ],
alignment: [ Alignment ]
)

EdgeInsets

内容 設定値
全方向で余白を指定 EdgeInsets.all( [double] )
個別に余白を指定 EdgeInsets.fromLTRB( 左, 上, 右, 下 )
個別に余白を指定 EdgeInsets.only( left:左, top:上, right:右, bottom:下 )
左右に余白を指定 EdgeInsets.symmetric( horizontal:値 )
上下に余白を指定 EdgeInsets.symmetric( vertical:値 )

Alignment

内容 設定値
左上に配置 topLeft
中央上に配置 topCenter
右上に配置 topRight
左中央に配置 centerLeft
中央に配置 center
右中央に配置 centerRight
左下に配置 bottomLeft
中央下に配置 bottomCenter
右下に配置 bottomRight

Columnクラスの基本形

1
2
3
4
5
6
Column(
mainAxisAlignment: [ MainAxisAlignment ],
mainAxisSize: [ MainAxisSize ],
crossAxisAlignment: [ CrossAxisAlignment ],
children: <Widget>[ ... ]
)

Rowクラスの基本形

1
2
3
4
5
6
Row(
mainAxisAlignment: [ MainAxisAlignment ],
mainAxisSize: [ MainAxisSize ],
crossAxisAlignment: [ CrossAxisAlignment ],
children: <Widget>[ ... ]
)

MainAxisAlignment

内容 設定値
ウィジェットと順に並ぶ向きで、先頭に配置 start
ウィジェットと順に並ぶ向きで、中央に配置 center
ウィジェットと順に並ぶ向きで、末尾に配置 end
要素間のスペースを均等配置 spaceBetween
要素間のスペースを均等配置、開始終了スペースは自動 spaceAround
要素間のスペースを均等配置、開始終了スペースも均等 spaceEvenly

CrossAxisAlignment

内容 設定値
ウィジェットと交差に並ぶ向きで、先頭に配置 start
ウィジェットと交差に並ぶ向きで、中央に配置 center
ウィジェットと交差に並ぶ向きで、末尾に配置 end
ウィジェットと交差に並ぶ向きで、画面一杯まで要素を広げる stretch

MainAxisSize

内容 設定値
ウィジェットを最小サイズにする min
ウィジェットを最大サイズにする max

Stackクラスの基本形

ウィジェットを重ねて表示する

1
2
3
4
5
6
7
Stack(
children: <Widget>[
Container(),
Container(),
Container(),
]
)

Alignクラスの基本形

ウィジェットごとに配置を指定する

1
2
3
4
5
6
7
Column(
children: <Widget>[
Align(alignment: [ Alignment ], child: ウィジェット),
Align(alignment: [ Alignment ], child: ウィジェット),
Align(alignment: [ Alignment ], child: ウィジェット),
]
)

Expandedクラスの基本形

ウィジェットを画面一杯で均等表示する

1
2
3
4
5
6
7
Column(
children: <Widget>[
Expanded(child: ウィジェット),
Expanded(child: ウィジェット),
Expanded(child: ウィジェット),
]
)

Paddingクラスの基本形

余白を作るのためのウィジェット

1
2
3
4
5
6
7
Column(
children: <Widget>[
Expanded(child: ウィジェット),
Padding(padding: [ EdgeInsets ]),
Expanded(child: ウィジェット),
]
)

SizedBoxクラスの基本形

決まったサイズのウィジェットを使う

1
2
3
4
5
6
7
Column(
children: <Widget>[
SizedBox(width: 幅, height: 高さ, child: ウィジェット),
SizedBox(width: 幅, height: 高さ, child: ウィジェット),
SizedBox(width: 幅, height: 高さ, child: ウィジェット),
]
)

開発フロー

  1. GitHubで issue 作成

  2. ローカルで branch 作成

    1
    git checkout -b ブランチ名
  3. リモートにpushして、作業開始をチームに共有

    1
    git push origin ブランチ名
  4. ローカルで開発してコミット

  5. ローカル branchを最新にして、リモートにpush

    1
    2
    git pull origin ブランチ名
    git push origin ブランチ名
  6. GitHub上で、MergeRequest する

    1. 「Compare & pull request」ボタンをクリック

    2. コメントに「close issue番号」を書いておくと、マージと同時にissueが閉じるので便利

    3. 「Create pull request」ボタンをクリック

    4. 「Merge pull request」ボタンをクリック

    5. 「Configrm merge」ボタンをクリック

    6. 「Delete branch」ボタンをクリック

  7. マージ内容をローカルに反映

    1
    2
    git checkout master
    git pull origin master
  8. ローカルのリモートブランチを削除 (prune: 取り除く)

    1
    gir remote prune origin
  9. ローカルの作業ブランチを削除

    1
    git branch -d ブランチ名

Android Studio のショートカットキー

コード整形

Command + Option + L キーを押す

Git Commit

Command + K キーを押す

Git Push

Command + Shift + K キーを押す

クイックアクション

Option + Enter キーを押す

文脈に応じた便利な機能を呼び出す

定義元へジャンプ

Command + クリック

Flutter Widget でラップする

Android Studio のショートカット

  1. Widgetを選択

  2. Option + Enter キーを押す

  3. メニューから、Wrap with new widget を押す

SSL証明書の有効期限チェック

コマンド

1
openssl x509 -noout -dates -in path/certfile

便利ツールのリンク集

個人開発でよく使うサイト
忘れて、毎回探すのが大変なので、まとめておく
随時、加筆修正

アプリ開発

Androidのアイコン生成

Android Asset Studio

アイコンをダウンロード

iconmonstr

iconfinder

flaticon

ICOOON MONO

オリジナルロゴの作成

hatchful

アプリ用アイコンのサイズにリサイズしてくれる

App Icon Maker

ダミー画像を作成

placehold

ダミーのJSONレスポンスを返してくれるAPIサービス

JSONPlaceholder

プライバシーポリシーの生成

App Privacy Policy Generator

フリー画像

pixabay

プレスリリース

リリース告知

予約TOP10

レビュー記事の投稿

Android Plus 週刊アスキー

レビューの依頼

app-liv

applink

meeti

appnavi

参考URL

イラレやフォトショ要らず!アプリアイコンをCacooで作ろう

Hexo 手順

記事を作成

1
hexo new post "My New Post"

固定ページを作成

1
hexo new page "My New Page"

ローカルサーバーを起動

1
hexo server

静的ファイルを生成

1
hexo generate
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×