Continuity is The Father of Success

Androidアプリとかゲームとか。毎日続けてるものについて。

Flutter Meetup Tokyo #8に参加しました & Android App Bundleの話

参加してきました。会場はナビタイムジャパンさん。

flutter-jp.connpass.com

表参道駅、いつもどの改札から出るとどこに近いのか分からなくなるので、ちょっと苦手です。

Meetupの話

開始15分前ぐらいに着、そのままモニターの接続チェックなんかをしながら開始を待つなど。 Meetupへの参加も4回目になるので、Meetupで知り合った方ともお話することも多くなってきました。 最近はなかなかFlutterを書く時間を確保できないのですが、参加後にモチベーションが上がるので何とか前に進めている気がします。

LTの話

運営時、時間管理は大切だなーと。 LT中はなかなか経過時間など気づきにくいものですが、そこをサポートすることも必要なのだなと学びがありました。

個人的にグッときたのはYasutaka Kawamotoさんの"アプリ内課金プラグインの現状"です。

5つの同じ機能を実現しようとするプラグインを見比べた時、それぞれの実装の良し悪しが出るなーと考えながら聞いてました。 オープンソースは、こういう時にコードを見比べられるのが嬉しいですよね。

github.com

github.com

この2つの実装の違いを眺めて、しばらくプラグインの勉強をしようと思いました。

Android App Bundleの話

Flutter 1.2から対応が入ったAndroid App Bundle(AAB)対応の話をしました。

speakerdeck.com

話した内容は下記の感じです。

FlutterでAndroid App Bundleが使えるようになった

Android App Bundleについては下記Blog内の画像を見た後に、公式サイトをみるとわかりやすいかなと思います。

ブログ

android-developers.googleblog.com

公式サイト

developer.android.com

使い方

flutter build apkflutter build appbundle にするだけ。 成果物が apk から aab に変わり、パスが少し変わるだけで大きな違いはありません。

嬉しいこと

apk 配信から aab 配信に変えると配信時のアプリサイズを抑えることができます。 ところでFlutterのアプリも小さくなるんですかね?

試してみました。 利用したアプリはWebView Checker です。 Play Storeはこちら。

play.google.com

実験結果と考察

minSDK build apk build appbundle
16 5.46MB 5.40~5.42MB
21 5.47MB 5.43~5.46MB

ちょっと小さくなったかな……? といった感じの微妙な結果になっています。

この微妙な感じは下記のような理由によるものではないかなと考えています。

  1. PNG/JPGなどの画像リソースを含めていない
  2. NDKを利用するようなライブラリを含めていない
  3. リソースファイルが少ない
画像リソース

WebView Checker内にはアプリアイコンぐらいしか画像リソースがない、というのが大きな理由になりそうです。

なお、Flutter内の Icon は下記のコードを見る限り画像リソースではない模様です*1。 このためFlutterらしくアプリを作ると、削減するための画像リソースを含めてアプリ開発する方が難しいのかもしれません。

flutter/icons.dart at master · flutter/flutter · GitHub

flutter/icon_data.dart at master · flutter/flutter · GitHub

ライブラリ

Android App Bundleによるアプリサイズ削減の大きな要素として、プロセッサのアーキテクチャごとにNDKで作られたライブラリ(C++で書かれたライブラリ)を配信することができる点があります。 しかしながら、Flutterの標準的なコードを読む限りこれらのライブラリ要素は見当たりませんでした。

動画やとんでもなく計算量の多い何かをFlutterアプリでさせない限り、これらの問題は発生しないように見えます。 アプリに多くのライブラリを入れていくような開発であれば、効果が期待できるのではないでしょうか。

リソースファイル

WebView Checkerは特に多言語対応をしていないため、どの場合でも英語しか表示されません。 このため、言語リソースの分割配信が行われるアプリではありませんでした。 多言語対応を進めていけば、この問題は発生するのかもしれません。

ただ言語リソースはどれだけ記述してもサイズは大きくならないので、この観点からの削減はあまり期待されるものではなさそうです。

Android App Bundle配信のまとめ

  • ビルドの切り替えは簡単
  • アプリサイズは小さくなる、ちょっとだけ
  • ライブラリ利用やPNG画像をアプリに含めるなどしているなら、取り組む価値はある

裏話

今回の資料を作るにあたり、結構な数のビルドを回してPlay Storeにあげまくりました。

f:id:D_R_1009:20190331182841p:plain

f:id:D_R_1009:20190331182916p:plain

というのも、Android App Bundleの"配信サイズ"はGoogle Play Store上でしか確認できない(さらに厳密にいうと、実際にダウンロードしないとわからない)のです。 appbundle でビルドするたびにストアへあげ直し、minSDKを変更すればまたリリースビルドを回し、Store上で別バージョンのアプリと認識させるためにVersionCodeを更新し……といったジミーな作業が続きました。辛かった。

あと、そろそろFlutterでちゃんとしたアプリを作らないとこういったテストもしにくいなーと感じてます。 iOSアプリを作るとなるとプライバシーポリシーもしっかり考えないといけないので若干腰が重いのですが、がっつり作り込みたいですね!

終わりに

次回のFlutter Meetup Tokyoにも参加して、Flutter力を高めていきたいです!! ガンバルゾー!

*1:今回の資料作るために初めて読んで知った