Uncategorized

[Flutter/Android] Android 12対応すると android:exported needs to be explicitly specified for element と怒られた時の対処法

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ファイルをアップロードします。

-Uncategorized

© 2022 かずのアプリときどきキャンプ飯 Powered by AFFINGER5