Flutterで初めてのリリースビルド

#Flutter アプリをグーグルストアに公開する
今回は公式ドキュメントを見てもわからなかったのでリサーチしたところ、何とか公開までたどり着きました。

[公式ドキュメント](https://flutter.dev/docs/deployment/android)

#準備
git でバージョン管理をしているならブランチをrelease1.0.0に移動させましょう。特に重要ではありませんがしていると便利です。

##アプリアイコンを作成
今回はflutter_launcher_iconsというpackageを使用してアイコンを作成します。このパッケージはandroid用アイコンのpngファイルを作成して自動であるべきディレクトリーに配置してくれる便利アプリです。このパッケージを使用するために3つのpngファイルを用意します。

アイコンはillustratorなどで1024 ×　1024で作りましょう

##参照リンク
[参照リンク](https://medium.com/@psyanite/how-to-add-app-launcher-icons-in-flutter-bd92b0e0873a)
[ドキュメンテーション](https://pub.dev/packages/flutter_launcher_icons)


1.前面
![foreground.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373270/ed37fe02-b96f-150e-a32b-5d9a3e1b741b.png)
2.背面
![background.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373270/8c4d1342-2e3f-d822-810e-675c2a595c75.png)
3.アイコンの全体
![icon.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373270/aab2d5fc-6fef-8e4e-7760-dfde38f29ddf.png)


三つのアイコンを/assets/icon/に移動する
それぞれをbackground.png, foreground.png, icon.pngと名付ける

##アプリアイコンを宣言
```pubspec.yaml
dev_dependencies:

  flutter_launcher_icons: ^0.7.0


//改行している箇所に注意
//flutter pub get
flutter_icons:
  ios: true
  android: true
  image_path_ios: "assets/icon/icon.png"
  image_path_android: "assets/icon/icon.png"
  adaptive_icon_background: "assets/icon/background.png"
  adaptive_icon_foreground: "assets/icon/foreground.png"

```

android/app階層に作成する

```key.properties
storePassword=<storepassword>
keyPassword=<keyPasword>
keyAlias=<aliaName>
storeFile=<place you saved your key.jks in local>
```

```local.properties
sdk.dir=C:\\Users\\YOURNAME\\AppData\\Local\\Android\\sdk
flutter.sdk=C:\\flutter <-flutterSDKの場所
flutter.buildMode=release
flutter.versionName=1.0.0
flutter.versionCode=1
```

この部分を削除して

```android/app/build.gradle
android {
```

こちらのコードを追加する。

```android/app/build.gradle
   def keystoreProperties = new Properties()
   def keystorePropertiesFile = rootProject.file('key.properties')
   if (keystorePropertiesFile.exists()) {
       keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
   }

   android {
```

この部分を削除して、、

```android/app/build.gradle
   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.debug
       }
   }
```

こちらのコードを挿入する

```android/app/build.gradle
   signingConfigs {
       release {
           keyAlias keystoreProperties['keyAlias']
           keyPassword keystoreProperties['keyPassword']
           storeFile file(keystoreProperties['storeFile'])
           storePassword keystoreProperties['storePassword']
       }
   }
   buildTypes {
       release {
           signingConfig signingConfigs.release
       }
   }
```

app階層に新しいproguard-rules.proファイルを追加する
内容はこちらをコピペしてください

```android/app/proguard-rules.pro
## Flutter wrapper
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.**  { *; }
-keep class io.flutter.util.**  { *; }
-keep class io.flutter.view.**  { *; }
-keep class io.flutter.**  { *; }
-keep class io.flutter.plugins.**  { *; }
-dontwarn io.flutter.embedding.**
```

！！注意！！
公式ではここでpro fileを有効にしろと書かれていますかAPKのビルドに失敗するので無効にします


公式では
```/android/app/build.gradle
android {

    ...

    buildTypes {

        release {

            signingConfig signingConfigs.release

            minifyEnabled true
            useProguard true

            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

        }
    }
}
```


実際にはこう

```android/app/build.gradle
android {

    ...

    buildTypes {

        release {

            signingConfig signingConfigs.release

            minifyEnabled false
            useProguard false

        }
    }
}
```

このコマンドを実行するとandroidディレクトリー階層にbuildファイルが作成されます

```
flutter build bundle
```

このコマンドで/build/app/outputs/apk/release/にapk fileが生成されるのでそれをgoogleコンソールにアップロードすると完了です。

```
flutter build apk
```

実機にrelease build版アプリをインストールする場合は下記のコマンドをじっこうする（USBなどで実機が接続されていることを確認しましょう）

```
flutter install
```
エミュレーターの場合はinstall failedとなります。ただいま原因究明中です。

次回にアップデートを行う際にはpubspec.yamlファイルでflutterのversionを変更することでapkのバージョンを変更できます。build apkコマンドを行う前に変更しましょう。

```pubspec.yaml
version: 1.0.0+2
```
#リンク（参照元）

[参照元](https://github.com/flutter/flutter/issues/15100)

#まとめ
ちなみにこちらが私の公開したアプリです。良ければ使ってみてください
[Shot Spinner: for Android](https://play.google.com/store/apps/details?id=com.renkon117.shot_spinner)
[Shot Spinner: for iOS](https://apps.apple.com/jp/app/special-shot-spinner/id1488052788?l=en)


#公開したアプリ(補足)
##Shot Spinner![Screenshot_1571429697.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373270/04dc57a0-c536-b546-8036-45f030504cb4.png)
![Screenshot_1571429685.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373270/574cceae-5de1-85fc-a5fc-a2bdb6630091.png)
![Screenshot_1571429692.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373270/7d6ffa0c-bcc9-0c91-6ea4-38c871e805a0.png)



#Flutter関連記事
[Flutter 入門　-textFieldを開いたときにkeyboardを表示しない-
](https://qiita.com/Renkon117/items/1e6f972b4a60c25718d4)
[Flutterでtodo Listを作ってみた　－初心者必見－](https://qiita.com/Renkon117/items/30175c2a4e6ebd835ca1)
[flutterでQRコードリーダーを作ってみた
](https://qiita.com/Renkon117/items/39c031c7123ecc193294)
[ルーレットアプリ作ってみた](https://qiita.com/Renkon117/items/5f34bd3c7d7489c554ee)