【Flutter/Dart/Android】flutter.compileSdkVersionの設定と変更方法!

この記事からわかること
- Flutter/Dart/Androidでflutter.compileSdkVersionの変更方法
- 変数の定義場所の確認
index
[open]
\ アプリをリリースしました /
環境
- Android Studio:Koala
- Xcode:16.0
- Flutter:3.29.2
- Dart:3.7.2
- Mac M1:Sonoma 14.6.1
build.gradleに定義されているflutter.XXXXXなど
Flutterで作成したAndroidプロジェクトのbuild.gradle.kts
はflutter.XXXXX
という変数を使用してcompileSdk
やtargetSdk
、versionCode
などが指定されています。もちろんcompileSdkなどの値を入れ替えて直接指定することもできますが、せっかく変数になっているのであればそのまま使用したいところです。ただ設定している箇所が少し深いところにありました。
android {
namespace = "com.example.XXXXXX"
compileSdk = flutter.compileSdkVersion
ndkVersion = flutter.ndkVersion
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_11.toString()
}
defaultConfig {
applicationId = "com.example.XXXXXX"
minSdk = flutter.minSdkVersion
targetSdk = flutter.targetSdkVersion
versionCode = flutter.versionCode
versionName = flutter.versionName
}
}
flutter.compileSdkVersionなどの定義場所
定義場所を探してみるとどうやらプロジェクトの中ではなくFlutter SDK本体の中に定義されているようでした。なのでまずはflutter
コマンド場所を確認し、flutter
自体のインストール場所を確認します。大抵ユーザーのdevelopment
配下とかだと思います。
$ which flutter
/Users/XXXXX/development/flutter/bin/flutter
そこからさらに深掘りしていった「flutter.groovy」ファイルに定義がありました。パスは以下です。
/Users/XXXXX/development/flutter/packages/flutter_tools/gradle/src/main/groovy/flutter.groovy
この中にFlutterExtension
というクラスが定義されており、その中にcompileSdkVersion
やtargetSdkVersion
を確認することができました。
/**
* アプリ専用。アプリレベルの Gradle ビルド ファイル (app/build.gradle または app/build.gradle.kts) で使用される Flutter 拡張機能を提供します。
*
* ここで指定するバージョンは、packages/flutter_tools/lib/src/android/gradle_utils.dart の値と一致する必要があります。そのため、バージョンをアップグレードする場合は、そこに指定されているバージョンを必ず更新してください。
*
* Gradle の拡張機能の詳細については、以下を参照してください。
* * https://docs.gradle.org/8.0.2/userguide/custom_plugins.html#sec:getting_input_from_the_build
*/
class FlutterExtension {
/** Sets the compileSdkVersion used by default in Flutter app projects. */
public final int compileSdkVersion = 35
/** Sets the minSdkVersion used by default in Flutter app projects. */
public final int minSdkVersion = 21
/**
* Sets the targetSdkVersion used by default in Flutter app projects.
* targetSdkVersion should always be the latest available stable version.
*
* See https://developer.android.com/guide/topics/manifest/uses-sdk-element.
*/
public final int targetSdkVersion = 35
/**
* Sets the ndkVersion used by default in Flutter app projects.
* Chosen as default version of the AGP version below as found in
* https://developer.android.com/studio/projects/install-ndk#default-ndk-per-agp.
*/
public final String ndkVersion = "26.3.11579264"
}
つまりこれはプロジェクトごとというよりFlutterをインストールしているPCごとに一括で設定されているようです。(共同開発の時とか大丈夫なんでしょうか?)
versionCodeやversionNameの定義場所
「flutter.groovy」の中にはversionCode
やversionName
の定義は見つかりませんでした。そもそもこれらはプロジェクトに完全に依存するものなのでちゃんとプロジェクト内の「android/local.properties」に定義されておりました。
sdk.dir=/Users/XXXXX/Library/Android/sdk
flutter.sdk=/Users/XXXXX/development/flutter
flutter.buildMode=debug
flutter.versionName=1.0.0
flutter.versionCode=1
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。