Google Play ConsoleにBundleファイルをアップロードしたところ、
「現在、お客様のアプリは API レベル 30 を対象にしています。セキュリティとパフォーマンスが最適化された最新の API を利用するには、API レベル 31 以上を対象にする必要があります。アプリの対象 API レベルを 31 以上に変更してください。」
というエラーが出ました。
俗に言うAndroid 12対応をしなければいけなくなりました。
そこで、Android 12対応させるために、bundle.gradleのtargetSdkVersionを30から31に書き換えました。(安直ですね。)
すると、以下のエラーが発生しました。
Execution failed for task ':app:processReleaseMainManifest'. > Manifest merger failed : android:exported needs to be explicitly specified for element <receiver#com.dexterous.flutterlocalnotifications.ScheduledNotificationBootReceiver>. Apps targeting Android 12 and higher are required to specify an explicit value for `android:exported` when the corresponding component has an intent filter defined. See https://developer.android.com/guide/topics/manifest/activity-element#exported for details.
どうやら、Android 12対応をするには、AndroidManifest.xmlファイルのactivityタグにandroid:exported属性を書かないといけないようです。(面倒臭いな)
さっそく追記してみることにします、、、が
すでにもう書かれていますね。どうしたらいいのでしょうか。
これは、Flutterで使用するpluginの内部でも同様にAndroidManifest.xmlを持っており、そちらのManifestにandroid:exportedが書かれていないことがある、つまりAndroid APIレベル31に対応していないプラグインであることがあるそうです。
よくよくエラーを見てみると、<receiver#com.dexterous.flutterlocalnotifications.ScheduledNotificationBootReceiver>
という記述があるので、flutter_local_notificationプラグインが原因なのかな、と辺りをつけました。
私が使用していたのはバージョン6.1.1のものですが、Manifestファイルを確認するとやはり記述が見当たりません。
そこで、pub.devでflutter_local_notificationを見てみます。
すでに9.9.1まで到達しているんですね。
最低限、Android 12に対応している9.0.0にアップすることにしました。
改めて確認すると、9.0.0を確認するとandroid:exported属性が付与されていました。
この状態でBundleファイルをアップロードします。