LoginSignup
1

More than 1 year has passed since last update.

Android12でFLAG_IMMUTABLEでクラッシュする件の対応

Last updated at Posted at 2022-02-12

自作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のエミュレータが動かせるらしいので、とりあえずそれを試してみるのが良さそうではあるのですが。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1