なぜ build.gradle.kts が2つあるの?

これ、本当に紛らわしいですよね! でも、実は役割が違うんです

android/
├── build.gradle.kts ← 1つ目(プロジェクト全体用)
└── app/
└── build.gradle.kts ← 2つ目(アプリ本体用)

比喩で理解しよう!

マンション全体を想像します

📋 android/build.gradle.kts = マンション全体の管理規約

マンション全体で使う設定
全住人(全アプリモジュール)に共通のルール
「このマンションではこのツールを使います」という宣言

🏠 android/app/build.gradle.kts = 部屋の設定

個人のアプリ専用の設定
アプリのID、バージョン、名前など

実際の中身を見比べてみましょう:

📋 android/build.gradle.kts = マンション全体の管理規約

// 全体で使うツールのバージョン
buildscript {
    ext.kotlin_version = '1.9.0'
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:8.1.0'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

allprojects {
    repositories {
        google()
        mavenCentral()
    }
}

役割:

Kotlinのバージョン設定
ビルドツールのバージョン
ライブラリをどこから取得するか(Google, Maven)

触る? → ほぼ触らない! Flutterが管理

📋 android/build.gradle.kts = マンション全体の管理規約

android {
    namespace = "com.hisayo.myapp"
    compileSdk = 34
    
    defaultConfig {
        applicationId = "com.hisayo.myapp"  // ← 昨日学んだやつ!
        minSdk = 21
        targetSdk = 34
        versionCode = 1
        versionName = "1.0"
    }
}

2️⃣ android – Androidアプリ全体の設定

意味: アプリの基本情報を書く場所

android {
    namespace = "com.example.myapp"  // アプリの識別名
    compileSdk = 34  // どのAndroidバージョンで開発するか
    
    // ...その他の設定
}

役割:

  • アプリ固有の設定 (昨日の内容!)
  • アプリID、バージョン、対応Androidバージョンなど

触る?よく触る! 特にバージョン更新時

なぜ同じ名前(・・・紛らわしい)

理由:

これは Android(Gradle)の仕組みで、昔から決まっているルールなんです。

プロジェクト全体 → build.gradle.kts
各モジュール → build.gradle.kts

Androidの世界では常識だから、名前が同じでも混乱しないという前提なんです(でも初心者は混乱しますよね 😅)


もっと分かりやすい名前にできない?

できません… 😢

なぜなら:

  • Gradleというビルドシステムが「この名前じゃないとダメ!」と決めている
  • 変えると、ビルドできなくなる

例: もし app/my_app_config.gradle.kts とかに変えたら → ❌ エラー!


見分け方のコツ:

ファイル場所中身触る頻度
プロジェクト版android/ 直下buildscript, allprojectsほぼ触らない
アプリ版android/app/applicationId, versionCodeよく触る

覚え方: app フォルダの中にあるほうが、アプリの設定 = よく触るやつ!


他のプロジェクトでも同じ?

はい! Androidアプリ(Flutter含む)は全部この構造です。
“`
Webアプリも似たような構造:
project/
├── package.json ← プロジェクト全体
└── apps/
└── myapp/
└── package.json ← アプリ本体

まとめ

触るのは?
99%の場合、android/app/build.gradle.kts だけ!

  • アプリIDを設定
  • バージョンを上げる
  • 対応Androidバージョンを変更

プロジェクト全体のほう(android/build.gradle.kts)は、Flutterが自動で管理してくれるので、
触る必要はほぼありません!

同じ名前の build.gradle.kts が2つあるのは、役割が違うから! android/app/ の中にあるほうがアプリ本体の設定で、こっちだけ触ればOK! 🏠✨
名前が同じなのは紛らわしいけど、Androidの世界の慣習なので仕方ない