Flutter3.16から3.19へ移行してみようと思ったら、
かなりハマったので、いろいろ調べたときの備忘録(*´ω`*)
環境はこんな感じ。主にAndroid側の設定でハマる
- VSCode/Mac M2
- FVM: 2系 → 3系
- Flutter: 3.16.9 → 3.19.6
- AndroidStudio: → 2022.1.1(JDK11) → 2023.3.1(JDK17)
- Gradle: 7.5 → 8.2
- share_plus: 7.2.2 -> 9.0.0
- package_info_plus: 4.1.0 -> 8.0.0
- purchases_flutter(RevenueCat): 6.27.0
注意
RevenueCatのpurchases_flutterはまだ新しい書き方に対応していないっぽい
Purchases.getOfferings()やPurchases.getCustomerInfo()を実行すると、
レスポンスが返ってこなくて、動かなくなる。。
build.gradle周りの変更をしないと、正常に動く。。
Purchases.setLogLevel(LogLevel.verbose)にしてもなにもわからない
しかも、RevenueCat自体のキャッシュがあるので、
アプリを削除して、再インストールしないと発見できない。。
ただこのあたりを見ると、サンプルが更新されているので、
もうすぐ対応されるかもしれない。
- Migration to applying Gradle plugins with the declarative plugins block in sample by vegaro · Pull Request #1062 · RevenueCat/purchases-flutter
- [AUTOMATIC] Release/6.29.1 by RCGitBot · Pull Request #1068 · RevenueCat/purchases-flutter
やったこと
とりあえず、途中までいろいろ調べたので、
やったことをまとめていく
FVM/FlutterSDKのアップデート
- FVM: 2系 → 3系
- Flutter: 3.16.9 → 3.19.6
Homebrewで管理しているので、brewコマンドでアプデ
$ brew upgrade fvm $ fvm install 3.19.6 $ fvm use 3.19.6
.fvm/配下のSDKの場所だったり、
.fvmrcが追加されたりなどちょっと変わってる。
// .vscode/settings.json
{
- "dart.flutterSdkPath": ".fvm/flutter_sdk",
+ "dart.flutterSdkPath": ".fvm/versions/3.19.6",
// 略
}
// .fvm/fvm_config.json
{
- "flutterSdkVersion": "3.16.9"
+ "flutterSdkVersion": "3.19.6"
}
// .fvmrc + { + "flutter": "3.19.6", + "flavors": {} + }
// android/local.properties sdk.dir=/Users/myuser/Library/Android/sdk - flutter.sdk=/Users/myuser/fvm/versions/3.16.9 + flutter.sdk=/Users/myuser/fvm/versions/3.19.6 flutter.buildMode=debug flutter.versionName=0.0.1 flutter.versionCode=1
モノレポで複数プロジェクトにしていて、
各プロジェクトにも.vscode/settings.jsonがある場合は、
そっちのバージョン変更も確認
android/local.propertiesも見落としがち
fvm use 3.19.6をしただけだと反映されず、
ターミナルを一度再起動する必要があるので、
fvm flutter --versionで確認
AndroidStudio周りのアプデ
- AndroidStudio: → 2022.1.1(JDK11) → 2023.3.1(JDK17)
- Gradle: 7.5 → 8.2
主にこれの対応。build.gradleの書き方が変わるらしい
AndroidStudioの更新
AndroidStudioもHomebrew管理なので、brewコマンドでアプデ
$ brew brew upgrade android-studio
JDKはAndroidStudio組み込みのJDKを使っているけど、
以下のパッケージがJDK17を必要になるので、
古いAndroidStudioだとビルドエラーになる。。。
- share_plus: 7.2.2 -> 9.0.0
- package_info_plus: 4.1.0 -> 8.0.0
主にこのあたりの対応関連っぽい
build.gradleの更新
まだ、非推奨なので、変更しなくても警告が出るだけだけど、 以下の対応をしていく。
FlutterFireやFirebase周りについては書いてないので、めっちゃはまる。。
android/build.gradle
このあたりをごっそり削除。各バージョンは後で使うので、控えておく
- buildscript { - ext.kotlin_version = '1.7.10' - repositories { - google() - mavenCentral() - } - - dependencies { - classpath 'com.android.tools.build:gradle:7.3.0' - // START: FlutterFire Configuration - classpath 'com.google.gms:google-services:4.3.10' - classpath 'com.google.firebase:perf-plugin:1.4.1' - classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.1' - // END: FlutterFire Configuration - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - } - } allprojects { repositories { google() mavenCentral() } } rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" } subprojects { project.evaluationDependsOn(':app') } tasks.register("clean", Delete) { delete rootProject.buildDir }
android/settings.gradle
android/build.gradleで削除した内容を持ってくる感じ
app_plugin_loaderやflutter-gradle-pluginを使わなくなり、
flutter-plugin-loaderを利用するようになる
pluginManagement {
def flutterSdkPath = {
def properties = new Properties()
file("local.properties").withInputStream { properties.load(it) }
def flutterSdkPath = properties.getProperty("flutter.sdk")
assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
return flutterSdkPath
}
settings.ext.flutterSdkPath = flutterSdkPath()
includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle")
- plugins {
- id "dev.flutter.flutter-gradle-plugin" version "1.0.0" apply false
- }
+ repositories {
+ google()
+ mavenCentral()
+ gradlePluginPortal()
+ }
}
+ plugins {
+ id "dev.flutter.flutter-plugin-loader" version "1.0.0"
+ id "com.android.application" version "7.3.0" apply false
+ id "org.jetbrains.kotlin.android" version "1.7.10" apply false
+ // START: FlutterFire Configuration
+ id "com.google.gms.google-services" version "4.3.15" apply false
+ id "com.google.firebase.firebase-perf" version "1.4.1" apply false
+ id "com.google.firebase.crashlytics" version "2.8.1" apply false
+ // END: FlutterFire Configuration
+ }
include ":app"
- apply from: "${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle/app_plugin_loader.gradle"
android/app/build.gradle
android/settings.gradleで定義したライブラリを、
実際に利用するようにする設定。
android/build.gradleに書いてたみたいな感じ。
plugins {
id "com.android.application"
id "kotlin-android"
id "dev.flutter.flutter-gradle-plugin"
+ // START: FlutterFire Configuration
+ id 'com.google.gms.google-services'
+ id 'com.google.firebase.firebase-perf'
+ id 'com.google.firebase.crashlytics'
+ // END: FlutterFire Configuration
}
// 略
Gradle/Android Gradle Plugin(AGP)の更新
- Gradle: 7.5 → 8.2
gradle-wrapper.properties
android/gradle/wrapper/gradle-wrapper.propertiesで、
利用するGradleバージョンを変更する
// android/gradle/wrapper/gradle-wrapper.properties distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists - distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip + distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip
android/settings.gradle
Gradleバージョンにあわせ、com.android.applicationも変更
// android/settings.gradle
pluginManagement {
// 略
}
plugins {
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
- id "com.android.application" version "7.3.0" apply false
+ id "com.android.application" version "8.2.0" apply false
id "org.jetbrains.kotlin.android" version "1.7.10" apply false
// START: FlutterFire Configuration
id "com.google.gms.google-services" version "4.3.15" apply false
id "com.google.firebase.firebase-perf" version "1.4.1" apply false
id "com.google.firebase.crashlytics" version "2.8.1" apply false
// END: FlutterFire Configuration
}
include ":app"
Android Gradleプラグイン(com.android.application)のバージョンと、
対応しているGradleのバージョンは以下にまとまっている
その他の変更
fluttre create -t appのテンプレート比較すると、
AndroidManifest.xmlもちょっとかわってた。
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application
android:label="sample"
android:name="${applicationName}"
android:icon="@mipmap/ic_launcher">
<!- 略 -->
</application>
+ <!-- Required to query activities that can process text, see:
+ https://developer.android.com/training/package-visibility?hl=en and
+ https://developer.android.com/reference/android/content/Intent#ACTION_PROCESS_TEXT.
+
+ In particular, this is used by the Flutter engine in io.flutter.plugin.text.ProcessTextPlugin. -->
+ <queries>
+ <intent>
+ <action android:name="android.intent.action.PROCESS_TEXT"/>
+ <data android:mimeType="text/plain"/>
+ </intent>
+ </queries>
</manifest>
NDKのバージョン
必要に応じて、NDKのバージョンを指定する必要がある。
android {
ndkVersion "26.3.11579264"
// or
ndkVersion "25.2.9519653"
}
各種コマンド
古いキャッシュが悪さをしてたりするので、
適宜消しながら、試してみるといい感じ。
# ビルドしたファイルを削除
$ fvm flutter clean
# pub getで取得時のキャッシュを削除
$ fvm flutter pub cache clean
# pub getで取得したパッケージを再インストール
$ fvm flutter pub cache repair
# Android側(Gradle)のclean
$ cd android && ./gradlew clean
# iOS側(CocoaPods)をclean
$ cd ios && .pod cache clean
# パッケージのアップデートの確認
$ fvm flutter pub outdated
# パッケージのアップデートを実行
$ fvm flutter pub upgrade <package_name>
# 詳細版で見ると、JDKのバージョンが確認できる
$ fvm flutter doctor -v
[✓] Android Studio (version 2023.3)
• Android Studio at /Applications/Android Studio.app/Contents
• Flutter plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/9212-flutter
• Dart plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/6351-dart
• Java version OpenJDK Runtime Environment (build 17.0.10+0-17.0.10b1087.21-11572160)
以上!! かなりハマったけど、なんとかアプデできた。。(*´ω`*)
参考にしたサイトさま
- purchases-flutter/revenuecat_examples/purchase_tester/android at main · RevenueCat/purchases-flutter
- Android Gradle plugin 8.4 release notes | Android Studio | Android Developers
- Android is all of a sudden DEAD - getCustomerInfo doesn't work and getOfferings · Issue #992 · RevenueCat/purchases-flutter
- [Android] Autofill from saved credentials doesn't work · Issue #137760 · flutter/flutter
- 「17は無効なソース・リリースです」というエラー
- 【Flutter】AndroidのAPKビルドがgradleやAndroid 12のエラーがでて出来ない問題の解決策 #Android - Qiita
- 【Flutter】「You are applying Flutter’s main Gradle plugin」の警告を解決│Flutter Salon
- Flutterでエラーが発生した時の解決方法 #iOS - Qiita