これ、本当に紛らわしいですよね! でも、実は役割が違うんです
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の世界の慣習なので仕方ない
