Android12へのアプリ対応中のこと…
なんと次のようなエラーが発生
Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.
PnedingIntent...…?
アプリではそれを使ってませんでした。
それなのにエラーが出て少し困惑です。
その対処法が分かったのでメモしときます。
このページの目次
このエラーはAndroid12への対応中に起こった
Android12以降へのアプリ対応
▼ より正確に書くなら次の対応です
- targetSdkVersionを31にする
- compileSdkVersionを31にする
- それに伴う不具合などの対応
▼ build.gradleをこのように修正した
1 2 3 4 5 6 7 8 9 10 |
android { compileSdkVersion 31 /// <= ここ buildToolsVersion "30.0.3" defaultConfig { applicationId "com.hoge.hoge" minSdkVersion 21 targetSdkVersion 31 /// <= ここ versionCode 1 versionName "1.0.0" |
ここからが問題です。
そうするとAndroid12以降ではホーム画面から起動されるランチャーActivityに android:exported="true" を設定しないとエラーで落ちてしまうみたいです。
だから次のように修正が必要ということ
▼ AndroidManifest.xmlの修正例
1 2 3 4 5 6 7 |
<activity android:name=".MainActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> |
もし targetSdkVersion を31以上にしたなら上記のような
android:exported="true" の追加が必要。
※ ただしtargetSdkVersionが30以下なら対応しなくても落ちない模様
その対処は問題ありませんでした。
PendingIntentを使ってないのにエラーで落ちてしまう
そして冒頭のエラーに遭遇しました。
▼ より具体的なエラー内容
Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent. 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.
このPendingIntentというのはアプリ側で通知表示したりするとき、その通知をタップしたときの遷移先Activityを指定するのに使われるアレです。
でもそのアプリではPendingIntentは使ってません。
どうやら使用しなくても該当エラーが発生するようです。
対処法はwork-runtime-ktxライブラリを入れるだけ
その対処法はとても簡単でした。
▼ 次のライブラリを導入するだけです。
1 |
androidx.work:work-runtime-ktx:2.7.1 |
▼ build.gradleでのインストール例
1 2 |
/// 追加(最新バージョンは2.7.1) implementation "androidx.work:work-runtime-ktx:2.7.1" |
追加したら Sync now を押せば完了です。
そしたらアプリビルドを実行
Android12エミュレータで正常に動きました。
アプリのtargetSdkVersionを31以上にするなら要警戒!
Android12以降への対応は次では不十分
- targetSdkVersionを31にする
- compileSdkVersionを31にする
実際にAndroid12の入ったエミュレータなりを用意し、
アプリインストしてエラーが出ないか確かめるのが確実です。
Androidのエラー・解決策関係とかの関連記事
Androidアプリ開発はエラーとの戦いとも言えます。
最後にそういったエラー・解決策の関連記事を紹介
▼ “emulator-5554 unauthorized” エラーの解決策
▼ ”Declare your Ad ID permission” への対処法
▼ ”Invalid Gradle JDK configuration found” の対処法
このブログではこういうAndroid関連のことも書いてます。
もし良ければご覧ください。ではまた