Flutter

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のプロジェクトを新規作成した状態で以下のパッケージを追加していました。

pubspec.yamldependencies:
  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<AuthResult> 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<Void> 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<SignInMethodQueryResult> 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<GetTokenResult> 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アプリのディレクトリ直下にあります。

android/gradle.propertiesorg.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true
android.enableJetifier=true

さらに以下のようにandroid/app/build.gradledefaultConfigを一部修正します。

android/app/build.gradle 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

firebase_auth: ^0.8.0+1 crashes on Android #27156

Plugins are broken since move to AndroidX #27106

Plugins are broken since move to AndroidX #27106

まとめ

はっきりとエラーの原因がわかっていない状態ではありますが、同様のエラーに遭遇している方向けにまとめておきます。

SPONSORED LINK

コメントを残す

メールアドレスが公開されることはありません。