🌟

【Flutter】Android12への対応(2022/11以降必須)

2022/11/30に公開

みなさんこんにちは。

私が現在開発を担当しているFlutterアプリが1系なのですが、2022年11月からAndroid12への対応が必須になり、その際詰まってしまった部分がありました。
解決したのでその対応を備忘録として残しておこうと思います。
もし同じような状況でお困りの方の助けとなりましたら幸いです。

参考にさせていただいた記事はこちらです。(大変参考になりました、ありがとうございます!)

上記の記事で出てきた取り込む対象のパッケージについて、(私の勉強不足もあり)どこに記載すれば良いのかを試した後のコードです。

AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.MyApp"
    xmlns:tools="http://schemas.android.com/tools"> //こちらを追記
   <application
        android:label="MyApp"
        android:name="${applicationName}"
        android:icon="@mipmap/ic_launcher"
        tools:node="replace"> //こちらを追記
        <activity
            android:name=".MainActivity"
            android:exported="true" //この記載があることを確認
            android:launchMode="singleTop"
            android:theme="@style/LaunchTheme"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
            android:hardwareAccelerated="true"
            android:windowSoftInputMode="adjustResize">
            <!-- Specifies an Android theme to apply to this Activity as soon as
                 the Android process has started. This theme is visible to the user
                 while the Flutter UI initializes. After that, this theme continues
                 to determine the Window background behind the Flutter UI. -->
            <meta-data
              android:name="io.flutter.embedding.android.NormalTheme"
              android:resource="@style/NormalTheme"
              />
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        // ここから取り込みたいパッケージについて記載します
        <service
            android:name="io.flutter.plugins.firebasemessaging.FlutterFirebaseMessagingService"
            android:exported="false"
            tools:node="merge" />
        // ここまで
        <!-- Don't delete the meta-data below.
             This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
        <meta-data
            android:name="flutterEmbedding"
            android:value="2" />
    </application>
</manifest>

今回の対応では、インテントフィルターを含むアクティビティには明示的にexported属性を入れなければいけません。
AndroidManifestへの記載だけだと弾かれる場合があり、外部パッケージのアップデート(できればこれが良い)、もしくは今回のマージ対応で解決できると思います。
私の場合はFlutterバージョンの関係でパッケージアップデートが難しかったので、このような対応をしています。

コードの対象パッケージですが、Android12対応のエミュレーターへのインストール時に

io.flutter.plugins.firebasemessaging.FlutterFirebaseMessagingService

のパッケージがエラー対象として表示されていました。

PlayStoreでファイルアップ時にAPI12への対応を求められた場合は、まずローカル環境でAndroid12端末へインストールできるか試し、エラー対象のパッケージをアップデートするか、今回の対応のようにマージすると良いかと思います。

以上です。

Discussion