Flutter: Google Play Consoleのリリース前レポートでException java.lang.LinkageErrorのクラッシュ報告
結論:Android用の設定ファイルを3箇所修正する(バージョンの修正)
2022/10/30 Flutter エラー・バグ日記
Google Play Consoleに更新したアプリをアップロードしたところ、リリース前レポートで、以下のようなクラッシュ報告が5件も来た。
Exception java.lang.LinkageError: Method void com.google.android.gms.internal.ads.k03.onPostExecute(java.lang.Object) overrides final method in class Lcom/google/android/gms/internal/ads/g03; (declaration of 'com.google.android.gms.internal.ads.k03' appears in /data/app/com.####.######-#################==/base.apk) at com.google.android.gms.internal.ads.zzflq.<init> (zzflq.java) at com.google.android.gms.internal.ads.zzflq.<clinit> (zzflq.java) at com.google.android.gms.internal.ads.zzflq.zzd (zzflq.java) ・・・以下同じような文が続く(略)・・・
端末やOSバージョンの偏りはなさそう
発生したとされている端末・バージョンは、以下のとおり。
- Nokia Nokia 1 Android 8.1(SDK 27)
- samsung SM-G981U1 Android 10(SDK 29)
- DOCOMO SH-01L Android 9(SDK 28)
- Google Pixel 2 (仮想) Android 13(SDK 33)
- google Redfin 64-bit only Android 13(SDK 33)
送られてきた動画を見ると、確かに途中でアプリが落ちている。
実機やエミュレーターでテストしたときは問題なかったのだが。。
しかし、特定の端末やOSバージョンに偏って発生している訳ではないため、無視はできなそう。
数日前に同じ報告が上がっていた!
エラーメッセージ内には「ads」というキーワードが多くあるので、広告関係が要因の模様。
それ以上は理解できず、ググってみると、数日前に全く同じ報告をしている記事(StackOverflow)があった。
Flutterで、AdMob(google_mobile_ads)のバージョンを上げたところ、テストデバイスでは問題なかったのに、Google Play Consoleのリリース前レポートで、クラッシュ報告が来たとのこと。
自分も「google_mobile_ads」のバージョンを上げたところだったので、状況は同じ。
解決マークはついていないが、「これで自分は解決した」という内容が1つ回答されていた。
Android用の設定ファイルを3箇所修正するというもの。下記GitHubのイシューへのリンクも掲載されている。
このイシューが上がったのは2021年12月だが、まだオープン中で、同じ議論が続いていた。
イシューのやり取り内で、解決につながるコメントがある箇所は以下。
↓StackOverflowと同じ内容。これで解決したとのこと。
↓どの設定ファイルを修正すれば良いか、が分かりやすい。
上記内容に従って、下記のとおり、設定ファイルを修正してみた。
①「android/gradle/wrapper/gradle-wrapper.properties」の「distributionUrl=・・・」を以下を修正
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
※自分の場合は、修正前が「・・・gradle-6.7-all.zip」だった
②「android/build.gradle」(プロジェクトレベルの「build.gradle」)の「classpath」の1文を以下に修正
classpath 'com.android.tools.build:gradle:7.1.2'
※自分の場合は、修正前が「・・・gradle:4.1.0」だった
③「android/app/build.gradle」(アプリレベルの「build.gradle」)の「implementation」の1文を以下に修正
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
※一見、違いが分かりにくいが、自分の場合は、修正前が「・・・stdlib-jdk7・・・」だった
これらを修正した上で、再度、Google Play Consoleにアップロードしたところ、確かにリリース前レポートでのクラッシュ報告は解消された!
詳しいロジックは理解できていないが、つまるところ、「google_mobile_ads」のバージョンを上げると、「gradle」関連のバージョンも上げる必要があった、ということか。
なぜ実機やエミュレーターではエラーにならないのか、その点は不明なまま。。
\一般的なエラー対処法をまとめた記事はこちら/
リリースしたアプリ(全てFlutterで開発)
個人アプリ開発で役立ったもの
おすすめの学習教材
\超初心者向けでオススメな元Udemyの講座/
\キャンペーン時を狙えば安価で網羅的な内容が学べる(日本語訳あり)/
\Gitの基礎について無料で学べる/
おすすめの学習書籍
\実用的。image_pickerに関してかなり助けられた/
\Dartの基礎文法を素早くインプットできる/