🧱 ビルドタイプとプロダクトフレーバーとは?
Androidアプリの開発では、**「同じコードベースで異なるバリエーションのアプリを作る」**というニーズがよくあります。たとえば:
- デバッグ用とリリース用のビルドを分けたい(ログや署名などが異なる)
- 無料版と有料版のアプリを一つのプロジェクトで管理したい
- **開発環境ごと(dev/staging/prod)**にAPIのエンドポイントを変えたい
こうしたニーズに対応するための仕組みが、Gradleの「ビルドタイプ(buildTypes)」と「プロダクトフレーバー(productFlavors)」です。
🔧 ビルドタイプ(buildTypes)とは?
● 役割:
アプリの ビルド設定(署名、デバッグ用ログ出力など)を変更するための仕組みです。
Android Studioではデフォルトで以下の2つが用意されています:
名前 | 用途 | 例 |
---|---|---|
debug | 開発用 | デバッグ可能・ログ有効・署名は開発用キー |
release | 本番用 | 最適化・署名はリリース用キー・ログ無効化 |
● 記述例(build.gradle
):
android {
buildTypes {
debug {
applicationIdSuffix ".debug"
versionNameSuffix "-debug"
debuggable true
}
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
}
🧪 プロダクトフレーバー(productFlavors)とは?
● 役割:
アプリの「バリエーション(製品の味)」を管理するための仕組みです。
たとえば、以下のような違いを一つのプロジェクトで管理できます:
- 無料版(広告あり)と有料版(広告なし)
- 開発環境と本番環境でAPIサーバーが異なる
- ブランドごとにテーマやロゴを変える
● 記述例:
android {
flavorDimensions "version"
productFlavors {
free {
dimension "version"
applicationIdSuffix ".free"
versionNameSuffix "-free"
}
paid {
dimension "version"
applicationIdSuffix ".paid"
versionNameSuffix "-paid"
}
}
}
🧩 ビルドタイプ × プロダクトフレーバー の組み合わせ
Gradleでは、「フレーバー × ビルドタイプ」 のすべての組み合わせでAPKが生成されます:
Flavor | Build Type | 出力されるバリアント名 |
---|---|---|
free | debug | freeDebug |
free | release | freeRelease |
paid | debug | paidDebug |
paid | release | paidRelease |
ビルドバリアントは、Android Studio の「Build Variants」ウィンドウから選択できます。
🗂️ フレーバーごとのコードやリソースの分離
src/
ディレクトリ以下に、ビルドバリアントごとのディレクトリを作成できます:
src/
├── main/
├── free/
│ └── java/...(無料版専用のコード)
├── paid/
│ └── java/...(有料版専用のコード)
├── debug/
│ └── AndroidManifest.xml(debug専用設定)
├── release/
│ └── AndroidManifest.xml(release専用設定)
✅ まとめ
概念 | 目的 | 例 |
---|---|---|
buildTypes | 同じアプリで開発用・本番用の差異を出す | debug / release |
productFlavors | アプリの「製品の種類」ごとの差異を出す | free / paid など |
組み合わせ | フレーバーとビルドタイプを掛け合わせたビルド | freeDebug , paidRelease など |
💡補足:Javaとの違い感
Java単体のアプリケーション開発ではこうした概念は明示的にありません。ですが、Androidでは「ひとつのアプリケーションで複数バリエーションのAPKを生成したい」というニーズが高く、Gradleのこの仕組みは非常に有用です。