###自作Androidアプリで謎のクラッシュが発生
あまり今までアプリのクラッシュは発生していなかったのですが、
急に同じエラーが発生し始めたので調べてみました。
対象機種はすべてAndroid12です。
exception.class.missing._Unknown_: 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.
at android.app.PendingIntent.checkFlags (PendingIntent.java:375)
at android.app.PendingIntent.getBroadcastAsUser (PendingIntent.java:645)
at android.app.PendingIntent.getBroadcast (PendingIntent.java:632)
at androidx.work.impl.utils.ForceStopRunnable.getPendingIntent (ForceStopRunnable.java:5)
at androidx.work.impl.utils.ForceStopRunnable.isForceStopped (ForceStopRunnable.java:4)
at androidx.work.impl.utils.ForceStopRunnable.run (ForceStopRunnable.java:50)
at androidx.work.impl.utils.SerialExecutor$Task.run (SerialExecutor.java:2)
at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:641)
at java.lang.Thread.run (Thread.java:920)
###原因
どうやらtargetSdkVersionを31(Android12)に変更してからの事象っぽい。
しかし現在の開発環境はchromebook。Androidは9のまま。
所持しているスマホ実機は8.0と11で、12は確認できず。
Android12で起動時に即落ちしているらしい。
仕方ないので、旧開発環境のWindowsマシンを急遽復活させて
Android12エミュレータをインストールしてみました。
###まずいところはどこだ?
対応方法として2点でてきました。
1.google_mobile_ads
Google公式の広告パッケージです。
こいつがどうも悪いらしい。
広告非表示版となる有料版もパッケージはそのまま残していたのでクラッシュしていたのですが、
削除したら大丈夫になりました。
2.スプラッシュ画面
Android12からスプラッシュ画面の機能が入ったということを知らず、何も対応していませんでした。
###対応方法
1.build.gradleに以下を追加
最新版にしてもダメなので、色々検索した結果以下を入れてみたところOKになりました。
これでなぜ良くなったのか不明なのですが。
あと、バージョンは最新ではなく0.13.6にしています。
dependencies {
implementation 'androidx.work:work-runtime-ktx:2.7.0'
}
2.パッケージのバージョンアップ
flutter_native_splashを使用していますが、古いままでしたのでバージョンアップしました。
こちらも最新ではなく1.3.3で現状は動かしています。
1の対応もあったので、今なら最新にしても大丈夫なのかもしれませんが。
あと、Dartが2.15.1を要求されてしまったため、Flutterもバージョンを上げる必要が出てきました。
Flutterを2.8.1へ。2.10にいきなりするのはちょっと怖かったので。
あと、kotlinのバージョンが古いってことで1.6.10へ。(これは1の対応でだったか忘れましたが)
###その後
ということでエミュレータでの動作確認がOKになったので、
同じ対応を主開発環境であるchromebook側で入れて対応完了。
実機で確認できていないのでまだ不安はありますが。
早く実機スマホもAndroid12になってくれればいいのですが、いつになるのやら。
chromebookでもAndroid12Lのエミュレータが動かせるらしいので、とりあえずそれを試してみるのが良さそうではあるのですが。