Edited at

【Flutter】Androidアプリのリリースビルドをしてみる

FlutterでAndroidアプリのリリースビルドをしてみたのでメモです。

詳細 & 最新情報は Preparing an Android App for Release - Flutter を参照してください。


環境


  • Flutter 0.1.5

  • Dart 2.0.0-dev.28.0


手順


1. keystore作成

いつも通りに作ります。

(参考) Sign Your App | Android Studio


2. key.properties作成


android/key.properties

storePassword=<password from previous step>

keyPassword=<password from previous step>
keyAlias=key
storeFile=<location of the key store file, e.g. /Users/<user name>/key.jks>


3. build.gradle編集

まず android の上にkeystoreの設定を追記します。


android/app/build.gradle

+def keystorePropertiesFile = rootProject.file("key.properties")

+def keystoreProperties = new Properties()
+keystoreProperties.load(new FileInputStream(keystorePropertiesFile))

android {

次に buildTypes をこのように書き換えます。


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
- }
-}
+signingConfigs {
+ release {
+ keyAlias keystoreProperties['keyAlias']
+ keyPassword keystoreProperties['keyPassword']
+ storeFile file(keystoreProperties['storeFile'])
+ storePassword keystoreProperties['storePassword']
+ }
+}
+buildTypes {
+ release {
+ signingConfig signingConfigs.release
+ }
+}


4. APKをビルド

Flutterプロジェクトのルートディレクトリに移動後、以下のコマンドを実行します。

普段開発しているときは画像未使用の簡素なアプリなのにapkサイズが30MBくらいあるのですが、リリースビルドでは9.2MBになっていました。

$ flutter build apk

Initializing gradle... 1.0s
Resolving dependencies... 8.1s
Running 'gradlew assembleRelease'...
Skipping AOT snapshot build. Fingerprint match.
Built build/app/outputs/apk/release/app-release.apk (9.2MB).

ちなみにインストールするときはflutterコマンドを使います。(adbでもインストールできます)

$ flutter install

Macを使っている場合はこれで生成したapkのディレクトリをFinderでシュッと開けます。

$ open build/app/outputs/apk/release/


ハマったこと

dart2を使っている場合はビルドするときに --preview-dart-2 オプションをつけないと起動直後に例の真っ赤な心温まる画面(エラー画面)が出ます。

$ flutter build apk --preview-dart-2

Initializing gradle... 0.7s
Resolving dependencies... 0.8s
Running 'gradlew assembleRelease'... 16.6s
Built build/app/outputs/apk/release/app-release.apk (9.5MB).

このことがドキュメントに書いてなかったのでPR出してみました。

https://github.com/flutter/website/pull/907


補足

Flutterで作ったアプリということを忘れていつも通りにGenerate Signed APKやろうとしたら出来なくて調べてたらFlutterで作ってたことを思い出して公式ドキュメントにたどり着きました。

必要最低限の部分だけメモしているので詳細 & 最新情報は Preparing an Android App for Release - Flutter を参照してください。(大事なことなので2回)

上記公式ドキュメントの変更履歴は History for android-release-build.md - flutter/website で確認できます。


リンク

Preparing an Android App for Release - Flutter

https://flutter.io/android-release/