android12以上で起きるクラッシュを直すのにめちゃくちゃ苦労した話

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.

というクラッシュレポート。後々分かるのですが、結果的にAndroidのバージョンが12以上だと要求されるなにかしらのバージョンが足りてなくてクラッシュが起きてるっぽい。

とりあえず分からないからいろいろ調べて解決しました。

解決策

とにかくこのサイトが参考になりました。

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

Google Play Consoleでアプリの更新リリースをしたところ、リリース前レポートでクラッシュ報告が来てしまった。Android12(targetSdkVersion 31)だと発生するらしい。解…

簡単に言うとAndroid12以上ではWorkManagerのバージョン2.7.0以上の必要があるらしい。

それを解決するために

アプリの build.gradle のファイルのdependenciesに

implementation 'androidx.work:work-runtime-ktx:2.7.0'

を追記するだけでいいらしいのですが、そもそも恥ずかしい話 build.gradle ってどこで編集できるんだ?といろんなファイルを漁ったのですが、それっぽいのを見つけて追記しても関係ないらしく結局どこにあるかわからず頭が沸騰していました。

そこでそもそもGradleってなんだ? から調べようと参考にしたサイト↓

google翻訳して無理やり日本語になってますが、どうやら build.gradle はUnityのEditorで影響を与えられるらしいぞ? ということがわかりました。

ようやく希望の光が見えてきたので急ぎ足でUnityEditorを開き

ビルド設定→プレイヤー設定→公開設定→ビルド のカスタムメインGradleテンプレートにチェックを入れて 

アセット→plugin→android→mainTemplateを開いて

のように

implementation 'androidx.work:work-runtime-ktx:2.7.0' 

を追記しました。

これでようやくと思ったらビルドに失敗しました。。。

なんかよく分からないけどエラー文的にandroidxを使うって宣言してないっぽい。

次はカスタムGradleプロパティテンプレートにチェックを入れて同じようにgradleTemplate.properties

android.useAndroidX=true

android.enableJetifier=true

を追記すればOKだそうです。

ちなみにデフォルトなのか分かりませんが開いた時からこの記述があったので何も編集せずにただチェックつけただけで終わりました。

これでビルドは成功!

そしてplay consoleでアップロードしてテストしてみたら無事にクラッシュ報告が消えてました!

ユーザー補助機能の軽微な問題はボタンが小さいかもよ?とか色が見づらいかもよっていう大きな影響を与えない程度の問題だったのでこれで一安心。

良かったけど、完璧に理解しないまま謎を解いた感じでもやもやするという微妙な感じで終わりっ!

まとめ

play consoleで同じようなクラッシュ報告が出た場合は

カスタムメインGradleテンプレート

implementation ‘androidx.work:work-runtime-ktx:2.7.0’

を追記して

もし必要があれば

カスタムGradleプロパティテンプレート

android.useAndroidX=true

android.enableJetifier=true

を追記しましょう。

今回苦戦した元凶でもある脱出ゲームアプリ ぜひプレイしてみてください。