FlutterでFirestoreのfirebase_authプラグイン使用時に遭遇したエラーの解決方法
はじめに
FlutterでAndroid用のアプリを作成しており、FirebaseのGoogle認証を実装するためにfirebase_authというプラグインを使用したところ、「CloudFirestorePlugin.javaは非推奨のAPIを使用またはオーバーライドしています。」というエラーが出ました。この記事ではこの解決策をまとめます。
前提と環境
OSはUbuntu18.04でその他のバージョン情報は以下のflutter doctor
の実行結果の通りです。
$ flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, v1.5.4-hotfix.2, on Linux, locale ja_JP.UTF-8)
[✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
[✓] Android Studio (version 3.4)
[✓] VS Code (version 1.35.1)
[✓] Connected device (1 available)
• No issues found!
エラーの状況と内容
まず状況としてはFlutterのプロジェクトを新規作成した状態で以下のパッケージを追加していました。
dependencies:
flutter:
sdk: flutter
cloud_firestore: ^0.12.5+1
firebase_auth: ^0.11.1+6
google_sign_in: ^4.0.2
そしてアプリを起動してみると、長いですがコンソールに以下のようなエラーが表示されました。
注意:/home/username/workspace/development/flutter/.pub-cache/hosted/pub.dartlang.org/cloud_firestore-0.12.5+1/android/src/main/java/io/flutter/plugins/firebase/cloudfirestore/CloudFirestorePlugin.javaは非推奨のAPIを使用またはオーバーライドしています。
注意:詳細は、-Xlint:deprecationオプションを指定して再コンパイルしてください。
注意:/home/username/workspace/development/flutter/.pub-cache/hosted/pub.dartlang.org/cloud_firestore-0.12.5+1/android/src/main/java/io/flutter/plugins/firebase/cloudfirestore/CloudFirestorePlugin.javaの操作は、未チェックまたは安全ではありません。
注意:詳細は、-Xlint:uncheckedオプションを指定して再コンパイルしてください。
/home/username/workspace/development/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_auth-0.11.1+6/android/src/main/java/io/flutter/plugins/firebaseauth/FirebaseAuthPlugin.java:9: エラー: シンボルを見つけられません
import androidx.annotation.NonNull;
^
シンボル: クラス NonNull
場所: パッケージ androidx.annotation
/home/username/workspace/development/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_auth-0.11.1+6/android/src/main/java/io/flutter/plugins/firebaseauth/FirebaseAuthPlugin.java:10: エラー: シンボルを見つけられません
import androidx.annotation.Nullable;
^
シンボル: クラス Nullable
場所: パッケージ androidx.annotation
/home/username/workspace/development/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_auth-0.11.1+6/android/src/main/java/io/flutter/plugins/firebaseauth/FirebaseAuthPlugin.java:764: エラー: シンボルを見つけられません
private void reportException(Result result, @Nullable Exception exception) {
^
シンボル: クラス Nullable
場所: クラス FirebaseAuthPlugin
/home/username/workspace/development/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_auth-0.11.1+6/android/src/main/java/io/flutter/plugins/firebaseauth/FirebaseAuthPlugin.java:668: エラー: シンボルを見つけられません
public void onComplete(@NonNull Task task) {
^
シンボル: クラス NonNull
場所: クラス FirebaseAuthPlugin.SignInCompleteListener
/home/username/workspace/development/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_auth-0.11.1+6/android/src/main/java/io/flutter/plugins/firebaseauth/FirebaseAuthPlugin.java:687: エラー: シンボルを見つけられません
public void onComplete(@NonNull Task task) {
^
シンボル: クラス NonNull
場所: クラス FirebaseAuthPlugin.TaskVoidCompleteListener
/home/username/workspace/development/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_auth-0.11.1+6/android/src/main/java/io/flutter/plugins/firebaseauth/FirebaseAuthPlugin.java:705: エラー: シンボルを見つけられません
public void onComplete(@NonNull Task task) {
シンボル: クラス NonNull
場所: クラス FirebaseAuthPlugin.GetSignInMethodsCompleteListener
/home/username/workspace/development/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_auth-0.11.1+6/android/src/main/java/io/flutter/plugins/firebaseauth/FirebaseAuthPlugin.java:540: エラー: シンボルを見つけられません
public void onComplete(@NonNull Task task) {
^
シンボル: クラス NonNull
/home/username/workspace/development/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_auth-0.11.1+6/android/src/main/java/io/flutter/plugins/firebaseauth/FirebaseAuthPlugin.java:617: エラー: シンボルを見つけられません
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
^
シンボル: クラス NonNull
エラー8個
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':firebase_auth:compileDebugJavaWithJavac'.
> Compilation failed; see the compiler error output for details.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 4s
*******************************************************************************************
The Gradle failure may have been because of AndroidX incompatibilities in this Flutter app.
See https://goo.gl/CP92wY for more information on the problem and how to fix it.
*******************************************************************************************
Gradle task assembleDebug failed with exit code 1
Exited (sigterm)
上記エラーの解決策を次節に載せます。
解決策
まず、以下のように下2行をandroid/gradle.properties
に追記します。android
ディレクトリは自身のFlutterアプリのディレクトリ直下にあります。
org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true
android.enableJetifier=true
さらに以下のようにandroid/app/build.gradle
のdefaultConfig
を一部修正します。
defaultConfig {
(...省略...)
minSdkVersion 21 // 21に設定
multiDexEnabled true // 追記
targetSdkVersion 28 // 28に設定
(...省略...)
}
なお、私の環境ではminSdkVersion
は元々16、targetSdkVersion
は28でした。
最後に、自身のFlutterアプリのディレクトリパスで以下を実行して完了です。
$ flutter clean
エラーの原因と参考文献について
このエラーの原因については、flutter create
によって新規作成したFlutterプロジェクト内のbuild.gradle
にて指定されているSDKのバージョンと、プラグインのbuild.gradle
にて指定されているSDKのバージョンが一致していないことが原因の1つのようです。ただどうにも私の理解が十分でないため、必要な方は以下のGitHubでのIssuesで議論されていますので見てみてください。
firebase_auth: ^0.8.0+1 crashes on Android #27156
Plugins are broken since move to AndroidX #27106
まとめ
はっきりとエラーの原因がわかっていない状態ではありますが、同様のエラーに遭遇している方向けにまとめておきます。
関連記事
- 公開日:2022/08/30 更新日:2022/08/30
FlutterアプリでAndroid StudioのGenerate Signed Bundle/APKが表示されない時の対処法
FlutterアプリをGoogle Play Storeに公開するためにAndroid Studioを使ってアップロード鍵を生成しようとしたところ、公式ドキュメントに書かれている「Build」→「Generate Signed Bundle/APK」というメニューが見つかりませんでした。この解決法をメモします。
- 公開日:2022/08/15 更新日:2022/08/15
webview_flutterを使ってFlutterアプリ内でWebページを開く
FlutterでURLをタップした時にアプリ内でそのURLのWebページを開く方法についてまとめます。この記事では、Flutter公式のプラグインであるwebview_flutterを使用した実装例をメモします。
- 公開日:2022/08/14 更新日:2022/08/14
FlutterでURLへのリンクを作成してアプリ外でWebページを開く
FlutterでURLをタップしたらブラウザが開いてそこでURL先を表示したい場合があります。この記事では、Flutter公式のプラグインを使用した実装例をメモします。
- 公開日:2019/12/03 更新日:2019/12/03
Android App Bundleを実機にインストールして試すために使うbundletoolの使い方
Flutterなどで開発したAndroidアプリを自分の手元にある実機にインストールして試したい場合はbundletoolを使用するよう公式ドキュメントに記載されています。ただ、常識であるためなのか詳しい使い方が書かれておらず戸惑ったのでメモしておきます。
- 公開日:2019/12/02 更新日:2019/12/02
Flutterでアプリの復帰やサスペンドを検出して処理を実行する
Flutterで開発したアプリが復帰した時やサスペンドした時を検出して任意の処理を実行するための手順をまとめます。