Flutterを2.2.3から2.10.3にアップグレードして発生したエラー対応記録
結論:「AndroidManifest.xml」ファイルの「<activity」タグへの追記など
2022/3/24〜3/26 Flutter エラー・バグ日記
エラー対応を懸念して、かなりの期間、アップグレードしていなかったが、さすがにバージョンが古すぎて、パッケージの使用に支障が出始めたので、意を決して実施。
null safety対応以来のアップグレード。エラー三昧を覚悟していたが、予想どおり色々あったのでメモ(解決できなかった事案もあり)。
Androidでのビルドエラー
①既存プロジェクトをビルドしたら、以下のエラーが発生。
FAILURE: Build failed with an exception.
* What went wrong:Execution failed for task ':app:checkDebugAarMetadata'.> Multiple task action failures occurred: > A failure occurred while executing com.android.build.gradle.internal.tasks.CheckAarMetadataWorkAction > The minCompileSdk (31) specified in a dependency's AAR metadata (META-INF/com/android/build/gradle/aar-metadata.properties) is greater than this module's compileSdkVersion (android-30).
Dependency: androidx.window:window-java:1.0.0-beta04.
・・・(略)・・・
下記の情報を参考にさせていただき、「android/app/build.gradle」の「compileSdkVersion」と「targetSdkVersion」をいずれも30→31に修正したら解消。
②再度ビルドすると、以下のエラーが発生。
e: Incompatible classes were found in dependencies. Remove them from the classpath or use '-Xskip-metadata-version-check' to suppress errorse: /Users/・・・・/.gradle/caches/transforms-2/files-2.1/・・・・/jetified-kotlinx-coroutines-core-jvm-1.5.2.jar!/META-INF/kotlinx-coroutines-core.kotlin_module: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.5.1, expected version is 1.1.15.
・・・(略)・・・
[!] Your project requires a newer version of the Kotlin Gradle plugin. │
│ Find the latest version on https://kotlinlang.org/docs/gradle.html#plugin-and-versions, then │
│ update /Users/・・・・/android/build.gradle: │
│ ext.kotlin_version = ''
・・・(略)・・・
下記の情報を参考に、「android/build.gradle」の中の「ext.kotlin_version」を'1.3.50'→'1.6.0'に修正したら解消し、無事ビルド成功。
③続けて、別の既存プロジェクトをビルドしたところ、以下のエラーが発生。
Running Gradle task 'assembleDebug'…
../../flutter/.pub-cache/hosted/pub.dartlang.org/platform-3.0.2/lib/src/interface/local_platform.dart:46:19: Error: Member not found: 'packageRoot'.
io.Platform.packageRoot; // ignore: deprecated_member_use
^^^^^^^^^^^
FAILURE: Build failed with an exception.
* Where:Script '/Users/・・・・/flutter/packages/flutter_tools/gradle/flutter.gradle' line: 1102
・・・(略)・・・
下記の情報を参考に、ターミナルから「flutter pub upgrade」を実行したら、解消。
④さらに、別の既存プロジェクトをビルドすると、上記③と同じエラーが出たため、「flutter pub upgrade」をやると、今度は、以下のエラーが発生。
Resolving dependencies…
Git error. Command: git fetch
stdout:
stderr: fatal: remote error:
The unauthenticated git protocol on port 9418 is no longer supported.
Please see https://github.blog/2021-09-01-improving-git-protocol-security-github/ for more information.
exit code: 128
pub finished with exit code 69
下記情報によると、「pubspec.yaml」の中に、GitHubのアドレスを直接指定してインポートしている箇所があり、その記述方法に修正が必要らしい(プロトコルが変更されたことが要因)。
具体的には、以下のように修正したら解消(この修正をしなくても動く既存プロジェクトもあるので、詳細はやや不明。。)。
# 修正前 ext_storage: git: url: git://github.com/GitJournal/ext_storage.git # ↓ # 修正後 ext_storage: git: url: https://github.com/GitJournal/ext_storage
⑤再度ビルドすると、今度は以下のエラー。
/Users/・・・・/android/app/src/main/AndroidManifest.xml Error:
Apps targeting Android 12 and higher are required to specify an explicit value for android:exported
when the corresponding component has an intent filter defined. See https://developer.android.com/guide/topics/manifest/activity-element#exported for details.
FAILURE: Build failed with an exception.
・・・(略)・・・
再度、下記の情報を参考にさせていただき、
「AndroidManifest.xml」ファイルの「<activity」タグに、以下を追加したら、無事解消。
android:exported="true"
iOSでのビルドエラー
①既存プロジェクトをビルドしたら、以下のエラーが発生。
Lexical or Preprocessor Issue
'Flutter/Flutter.h' file not found
初めて見るエラー。。
iOSビルドエラーの定番対応である「flutter clean」→「pub get」→iosフォルダで「pod install」をやったら解消できた。
②しかし、別の既存プロジェクトでは、上記①の「pod install」で、以下のエラーが発生。
[!] CocoaPods could not find compatible versions for pod "Firebase/Auth":
In snapshot (Podfile.lock):
Firebase/Auth (= 8.8.0)
In Podfile:
firebase_auth (from .symlinks/plugins/firebase_auth/ios
) was resolved to 3.3.11, which depends on
Firebase/Auth (= 8.11.0)
You have either:
・out-of-date source repos which you can update with pod repo update
or with pod install --repo-update
.
・changed the constraints of dependency Firebase/Auth
inside your development pod firebase_auth
.
You should run pod update Firebase/Auth
to apply changes you've made.
これは「CocoaPods」と「Firebase/Auth」のバージョン不整合が原因のようなので、今回のFlutterアップグレードとは関係ないかもしれない。
過去にも対応経験がある、「Podfile.lock」削除 →「flutter clean」実行 →「pub get」をした上で、
pod install --repo-update
を実行したら、無事解消できた。
その他のエラー(未解決)
アップグレード前は問題なく機能していた「googleapis_auth」パッケージを用いたGoogleサインイン画面へのアクセス(「firebase_auth」や「google_sign_in」パッケージを用いずに、ブラウザ経由でサインインする方法)が、
承認エラー
エラー400: invalid_request
となり、できなくなってしまった。。
※「firebase_auth」や「google_sign_in」を使ったサインインは、これまでどおり問題なく機能している。
「http」など、関連する他のパッケージのバージョンも最新になっている。逆に、ダウングレードして試しても同じ結果。
クライアントIDの指定や、GCP(Google Cloud Platform)上の設定を色々見直すも、解消せず。
ネット上もかなり探したが、同じ状況(Flutterアップグレード後の不具合)を報告する情報や、参考になる情報は見つからない。
「google_sign_in」パッケージが、デスクトップアプリに対応していないため、「googleapis_auth」単独でサインインできる方法は、重宝していたのだが。。。
いったんペンディングで、また後日調査。。
<後日追記>
本件、解消できたので下記日記に記載(アップグレードは原因ではなかった、、)。
リリースしたアプリ(全てFlutterで開発)
個人アプリ開発で役立ったもの
おすすめの学習教材
\超初心者向けでオススメな元Udemyの講座/
\キャンペーン時を狙えば安価で網羅的な内容が学べる(日本語訳あり)/
\Gitの基礎について無料で学べる/
おすすめの学習書籍
\実用的。image_pickerに関してかなり助けられた/
\Dartの基礎文法を素早くインプットできる/