Flutter:「このファイルは Android 12 以降にはインストールできません。」のエラー
結論:「AndroidManifest.xml」に「android:exported = "true"」を設定する
2022/6/26 Flutter エラー・バグ日記
Google Playにリリース済のアプリを更新するため、Google Play Consoleに、.aabファイルをアップロードしたら、以下のエラーが発生。
アップロードされた APK または Android App Bundle には、インテント フィルタを使用するアクティビティ、アクティビティ エイリアス、サービス、またはブロードキャスト レシーバが含まれていますが、'android:exported' プロパティ セットは使用されていません。このファイルは Android 12 以降にはインストールできません。詳細: developer.android.com/about/versions/12/behavior-changes-12#exported
実際の画面は以下のとおり。
AppStoreへのアップロード時にエラーが出るのは慣れていたが、Google Playでは初めてだったので、戸惑う。。
必要な対処法は、エラーメッセージにあるリンク(Androidの公式ページ)内に書かれており、「android:exported」 を「true」に設定する必要があることは分かったが、それをどこに記述するのか、今ひとつわからない。
調べてみると、多くの方が記事を上げてくださっており、主に下記の記事を参照されているようだった。
結論としては、「AndroidManifest.xml」ファイル内の、「activity」タグ内に、
android:exported = “true”
を設定すれば良い模様。
確かにその通り追記して、Google Play Consoleにアップロードしたら、エラーは解消された。
この対応は、Flutter 2.10にアップグレードした際に必要だったことを思い出した。
※Flutter 2.10にアップグレードしたときの対応は、下記に記載
ただ、今回のアプリでは、2.10へのアップグレード時に、「android:exported」の設定をしなくても、ビルド時にエラーにならなかったので、対応せずに放置してしまっていた。
ビルド時にはエラーにならないが、Google Play Consoleにアップロードした時点でエラーになることもあるとは。。。
なお、この設定が必要になるのは、公式説明ページによると、「アプリ コンポーネントに LAUNCHER カテゴリが含まれている場合」とのこと。
こちらの記事でも解説されている。
確かに自分の「AndroidManifest.xml」ファイルにも「LAUNCHER」が設定されていた。
ではこの「LAUNCHER」っていったい何なの?ということだが、公式サイトの説明を読んでもよく分からなかったが、こちらの記事で分かりやすく説明いただいていた。
つまるところ、Androidのホームボタンを押すと起動できる「ホーム・ランチャーアプリ」として認識させたい場合に必要な設定らしい(実際に起動させるには、「DEFAULT」の設定も必要とのこと)。
なぜ「LAUNCHER」があると設定が必要になるのか、までは理解できていないが、、いったん解決できたので、ここまでで良しとしておく。
リリースしたアプリ(全てFlutterで開発)
個人アプリ開発で役立ったもの
おすすめの学習教材
\超初心者向けでオススメな元Udemyの講座/
\キャンペーン時を狙えば安価で網羅的な内容が学べる(日本語訳あり)/
\Gitの基礎について無料で学べる/
おすすめの学習書籍
\実用的。image_pickerに関してかなり助けられた/
\Dartの基礎文法を素早くインプットできる/