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

結論:android/app/build.gradleに設定を追記する 

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で開発)

暗記用マーカー – シンプル穴埋め問題作成

Google Play で手に入れよう
Download on the App Store

 

超即ToDo –最短2タップで通知登録できるタスク管理アプリ

Google Play で手に入れよう
Download on the App Store

 

かんたんプリント管理:アラート・OCR文字認識・検索機能を搭載

Google Play で手に入れよう
Download on the App Store

 

シンプルメモ帳「BasicMemo」 – 文字カウント、ワンタッチ入力、タグ管理等の機能を搭載

Macのデスクトップ版もリリースしました。

Google Play で手に入れよう
Download on the App Store

 

個人アプリ開発で役立ったもの

おすすめの学習教材

\廉価かつ本場に近い感覚で学ぶならコレ/

 

超初心者向けでオススメな元Udemyの講座/

 

\Gitの基礎について無料で学べる/

 

おすすめの学習書籍

実用的image_pickerに関してかなり助けられた/

 

Dartの基礎文法を素早くインプットできる/


Dart入門 – Dartの要点をつかむためのクイックツアー

 

おすすめのソフトウェア

安くて高機能。アプリの独自ドメイン・紹介サイト構築に最適/

 

\アイコン作成・画面設計・クラウド保存…何でもできて超必須

 

おすすめのハードウェア

\リーズナブルな価格で検証端末を確保できる/

 

\目線の高さを調節しやすく、疲れにくい

 

\キータッチが超静音で心地よい/

 

おすすめのサポートアイテム

\部屋の中を仕切って、集中できる開発環境を作れる/

 

\部屋の中でも大き過ぎず、長時間座っても疲れない

 

\バグと格闘した後の肩こりを解消してくれる/

タイトルとURLをコピーしました