BLOG

ブログ

2022/12/12 プログラミング

Android 12でスプラッシュ画面のアイコンが表示されていなかった件

この記事を書いた人 K.Y

最近SwiftでiOS開発をしていたのですが、ふとした機会にFlutterを触る機会がありました。
スプラッシュ画面を実装する際に、Android 12のスプラッシュの挙動を確認したのでそれについて記載します。きっかけは、Android Studioでのデバッグビルド時にアイコンが表示されていなかったので、何か設定が必要なのかなと考えたからです。

※ この記事はスプラッシュ画面のアイコンの動きを確認しているもので、スプラッシュの設定やプッシュ通知の設定を紹介しているものではありませんのでご注意ください。

環境

  • MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports)
  • macOS Monterey バージョン12.1
  • Android Studio Chipmunk | 2021.2.1 Patch 2
  • Flutter 3.3.1 • channel stable / Dart 2.18.0 • DevTools 2.15.0
  • Google Pixel 3a(Android 12、実機)
  • Google Pixel 5(Android 13、Emulator)

Android 12のスプラッシュ画面のアイコンの挙動

スプラッシュ画面

Android 12からSplashScreen APIが追加され、特に何も設定しなくても、アプリ起動時に自動でランチャーアイコンが表示されるようになりました。

こんな感じ

Android 11以降でスプラッシュ画面を実装していた場合、Android 12にアップデートするとスプラッシュ画面が重複するなどの問題が起こるので対応をする必要があります。

既存のスプラッシュ画面の実装を Android 12 以降に移行する

今回知りたかったのは移行方法ではなく、Android Studioでのデバッグビルド時に、アイコンが表示されていない件です。

デバッグビルド時

ホームからアプリをタップして起動した際はアイコンが表示されていたのに、Android Studio(IDE)でビルド時はアイコンが表示されていません。その他にも、設定から起動する際や、プッシュ通知から起動する時も表示はされていませんでした。

設定から開く際は別にいいかなと思っていたんですが、プッシュ通知から開かれる際はアイコンが表示されされてほしいと考えていたので、今回調べるに至りました。

結論から言うと

Google開発チームのコメントによると、これは意図した動きみたいでした。
プッシュ通知などで表示される場合は、アイコンのアニメーションが動いている途中にスプラッシュ画面が閉じられるようなことがあるためアイコンを空にしているようです。

↑リンクのコメントには、起動中のアプリのスプラッシュ画面を表示する方法も記述してありますが、非公式みたいです。

あんまり日本語でこれについて書いてくれてる人が少なかったので、アイコンが映らないことがデフォルトの動きだと知るのに苦戦してしまいました。(当然過ぎる動きなので誰も書いてないだけかもしれませんが。。)

今回調べるきっかけ的には知りたかった内容はここで終わりなのですが、どうやら8月にリリースされたAndroid 13だと、アイコン表示の制限が設定できるみたいなのでせっかくなのでそれについても動きを見てみました。

おまけ:Android 13のスプラッシュアイコン制御

Android 13から新たに、windowSplashScreenBehaviorという属性が追加されました。

Android 12での挙動を解決するために実装されたようです。

参考:Android 13 changelog: A deep dive by Mishaal Rahman

公式にも以下の内容が記載されています。

新しい windowSplashScreenBehavior 属性を使用すると、Android 13 以降では、スプラッシュ画面にアイコンを常に表示するかどうかをより細かく制御できるようになります。

https://developer.android.com/about/versions/13/features?hl=ja#splash-screens

設定できる値は2種類あり、デフォルト(default)の動きと、SPLASH_SCREEN_STYLE_EMPTY が指定されていない限り、アイコンが表示されるもの(icon_preferred)です。

SPLASH_SCREEN_STYLE_EMPTYとはスプラッシュ画面にアイコンを表示しないようにするためのフラグのようです。(SPLASH_SCREEN_STYLE_EMPTYに関しては名前が変わってSPLASH_SCREEN_STYLE_SOLID_COLORになってました)

参考:https://developer.android.com/sdk/api_diff/t-beta1-incr/changes/android.window.SplashScreen

では早速icon_preferredを設定して動きを見てみましょう!

Android 13の動き

アプリタップ起動(左)、デバッグビルド時(右)


こちらに関しては設定を行う前からきちんとアイコンが表示されていました。

設定からの起動は相変わらずアイコン表示されてなかったので、icon_preferred記述後、設定から開きます。

きちんと表示されるようになりました。そんな流れでプッシュ通知時の起動を見てみると

プッシュ通知

あれ・・・?表示されていない。。
プッシュ通知時にもアイコンは表示される認識でしたが、今回は確認できませんでした。

もしかしたら設定が足りていないだけかもしれないので、今後も調査しつつ何かわかったら追記していこうと思います。



株式会社ウイングドアは福岡のシステム開発会社です。
現在、私達と一緒に"楽しく仕事が出来る仲間"として、新卒・中途採用を絶賛募集しています!
ウイングドアの仲間達となら楽しく仕事できるかも?と興味をもった方、
お気軽にお問い合わせ下さい!

アーカイブ