Google Playのリリース前レポートで「Strongly consider using FLAG_IMMUTABLE」のクラッシュ報告 〜Android12関連〜

2022/6/29 Flutter エラー・バグ日記 

Google Play Consoleでアプリの更新リリースをしたところ、リリース前レポートで以下のクラッシュ報告が来てしまった。

 

Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubbles.

 

同時に、もう一つのクラッシュ報告(こちらの日記に記載)も来ていたが、本件の方が深刻だった。。

 

本記事はライトな日記思考で書いているので、詳細説明はしておらず、基本、テキストのみで画像とかは載せておりません。。m(_ _)m

解説記事ではないため、解決していない内容や、その時々の間違った解釈を述べてしまっている可能性が大いにありますので、何卒、ご了承ください。

 

Android 12だと発生するエラー

Google Play Consoleの画面は以下のとおり。

 

 

端末は「Pixel 2 (Virtual)」、OSは「Android 12(SDK 31)」となっている。

 

添付されている動画を見ると、確かに起動直後に落ちているっぽい。

 

エラー文によると、「FLAG_IMMUTABLEの使用を強く検討してください。」とのことだが、さっぱり意味がわからない。。

 

仕方なくググってみると、多くの情報が見つかった。

 

 

 

つまるところ、Android12(「targetSdkVersion」を31にしていたので対象)だと発生するらしい。

 

実機もエミューレーターもAndroid11(targetSdkVersion 30)だったので、Android12の検証ができていなかった。恥ずかしながら、盲点。。。

 

解決策を探すと、上記いずれの記事でも、「build.gradle」ファイルの「dependencies」に、以下の1文を追記すれば解消すると書かれている。

 

dependencies {
    // ↓これを追加
    implementation 'androidx.work:work-runtime-ktx:2.7.0'
}

 

ただ、「build.gradle」は2つ(プロジェクトレベルとアプリレベル)あるので、どっちの「build.gradle」?と悩む。。。

 

類似記事を見ても、意外と明記がなく、改めて1つ目のstackoverflowの記事に戻ってよく読むと、下の方に「build.gradle(app)」と書いてくださっている方がおり、「android/app/build.gradle」(アプリレベル)の方だと分かる。

 

なんとか解決策にたどり着けたっぽい。

 

途方に暮れそうなエラーだと思っていたので、本当にありがたい情報。

 

「androidx.work:work-runtime-ktx」とは?

しかし、そもそも「androidx.work:work-runtime-ktx」が、何のことだかさっぱりわからない。。。

 

気持ちが悪いので、軽く調べてみると、恐らくこちらのAndroid公式ページにある説明が該当している模様。

 

 

Androidのネイティブ開発をされている方には常識なのかもしれないが、、、「延期可能な(ただし確実に実行される必要がある)非同期タスクのスケジュールを簡単に設定する」には、「WorkManager」というAPIを使用しないといけない、ということらしい。

 

下記の記事などを見ると、Admobを使っていると必要になる模様(確かに自分のアプリでも導入している)。

 

 

で、先ほどのAndroid公式ページ中段によると、

 

Android 12(S)をターゲットとするアプリでは、WorkManager バージョン 2.7.0 が必要です。

 

とある。

 

また、こちらのページ

 

 

によると、

 

Android 12 以降をターゲットとするアプリでは、少数の特殊なケースを除き、バックグラウンドでの実行中にはフォアグラウンド サービスを開始できません。
・・・
アプリがバックグラウンドで動作しているときに、WorkManager を使用してスケジュールを設定し、優先処理を開始することを検討してください。

 

とのこと。

 

だから、上記1文が必要になったのか、と、分かったような、分からないようなレベルだが、一応納得。

 

Android 12での検証

修正はできても、実際にAndroid 12でクラッシュしないことを確認する必要があるが、自分の実機はAndroid11で検証できず。。。

 

そこで急ぎ、Android12のエミュレーターを作成して実行。

 

確かに、「androidx.work:work-runtime-ktx」の記載が無いと起動時にクラッシュするが、記載があるとクラッシュせず、普通に起動できた。

 

そこで、この修正を加えた上で、再度、Google Play Consoleにアップロードしたところ、今度はリリース前レポートで、Android12の端末でも問題なしの結果が返ってきた。

 

今まで、リリース前レポートでは警告止まりで、問題(エラー)は発生したことがなかったため、うっかり先にリリースしてしまった。。

 

今回の反省を活かし、今後はリリース前レポートの結果を確認してから、リリースするようにしよう。

 

\ Flutterの学習で役立ったコンテンツ・書籍 /

 

 

 


Dart入門 – Dartの要点をつかむためのクイックツアー
タイトルとURLをコピーしました