🦋

build.gradle.ktsってなに?

に公開

16KBメモリのページサイズをサポート、から始まった

androidから、これまでリリースしてきたアプリに対して「16KBメモリのページサイズをサポートする必要があります」と言われたのが、そもそもの始まりだった。
Flutterを最新にするのが最も簡単な方法です、が、爺様のアドバイス。
ところが、

Flutter3.35.5にしたらcocoapodsがおかしくなった

podもUpgradeしようとしたら、rubyに合ってません、といわれた。

ruby3.3系を入れるために、ruby-buildをUpgradeした

最終的に、ruby3.3.5、cocoapods 1.16.2 にして、
さらにios/Flutter/Release.xcconfigに加筆修正して、なんとか動くようになった。

androidを修正するために、iOSがオオゴトになったわけ。

で、勢いでAndroidStudioも最新のNarwhal(イッカク)にして、さて、次。

Android版をこれまでどおりBuildしようとしたらエラーだらけ

よく見ると、build.gradleのつもりで追記したfile名が
build.gradle.ktsになっている。
これ、上記のUpgradeの、どの段階でそうなったのか、私には分からない。
なにが違うのかも分からないが、
そもそも書き方が違うんですよ〜 といって、爺様が直してくれた。

こちらは従来のbuild.gradleの書き方

plugins {
    id "com.android.application"
    id "kotlin-android"
    // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
    id "dev.flutter.flutter-gradle-plugin"
}
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
    keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}

android {
    namespace = "com.example.scatter3d_maker"
    compileSdk = flutter.compileSdkVersion
    ndkVersion = flutter.ndkVersion

    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }

    kotlinOptions {
        jvmTarget = JavaVersion.VERSION_1_8
    }

    defaultConfig {
        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
        applicationId = "com.laporte.scatter3d_maker"
        // You can update the following values to match your application needs.
        // For more information, see: https://flutter.dev/to/review-gradle-config.
        minSdk = flutter.minSdkVersion
        targetSdk = flutter.targetSdkVersion
        versionCode = flutter.versionCode
        versionName = flutter.versionName
    }

    signingConfigs {
        release {
            keyAlias keystoreProperties['keyAlias']
            keyPassword keystoreProperties['keyPassword']
            storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
            storePassword keystoreProperties['storePassword']
        }
    }

    buildTypes {
        release {
            signingConfig = signingConfigs.release
            shrinkResources false
            minifyEnabled false
            ndk {
                debugSymbolLevel 'FULL'
            }
        }
    }
}


flutter {
    source = "../.."
}

こちらは新しいbuild.gradle.kts

import java.util.Properties
plugins {
    id("com.android.application")
    id("kotlin-android")
    // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
    id("dev.flutter.flutter-gradle-plugin")
}

val keystoreProperties = Properties()
val keystorePropertiesFile = rootProject.file("key.properties")
if (keystorePropertiesFile.exists()) {
    keystoreProperties.load(keystorePropertiesFile.inputStream())
}

android {
    namespace = "com.laporte.taiko_fu"
    compileSdk = flutter.compileSdkVersion
    ndkVersion = flutter.ndkVersion

    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_11
        targetCompatibility = JavaVersion.VERSION_11
    }

    kotlinOptions {
        jvmTarget = JavaVersion.VERSION_11.toString()
    }

    defaultConfig {
        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
        applicationId = "com.laporte.taiko_fu"
        // You can update the following values to match your application needs.
        // For more information, see: https://flutter.dev/to/review-gradle-config.
        minSdk = flutter.minSdkVersion
        targetSdk = flutter.targetSdkVersion
        versionCode = flutter.versionCode
        versionName = flutter.versionName
    }

    signingConfigs {
        create("release") {
            val keyAliasProp = keystoreProperties.getProperty("keyAlias")
            val keyPasswordProp = keystoreProperties.getProperty("keyPassword")
            val storeFileProp = keystoreProperties.getProperty("storeFile")
            val storePasswordProp = keystoreProperties.getProperty("storePassword")

            if (!storeFileProp.isNullOrEmpty()) {
                storeFile = file(storeFileProp)
            }
            if (!keyAliasProp.isNullOrEmpty()) keyAlias = keyAliasProp
            if (!keyPasswordProp.isNullOrEmpty()) keyPassword = keyPasswordProp
            if (!storePasswordProp.isNullOrEmpty()) storePassword = storePasswordProp
        }
    }

    buildTypes {
        release {
            signingConfig = signingConfigs.getByName("release")
            isShrinkResources = false
            isMinifyEnabled = false
            ndk {
                debugSymbolLevel = "FULL"
            }
        }
    }
}

flutter {
    source = "../.."
}

どこが違うかな、じっくり探します

Flutter大学

Discussion