Android application development 第28章:ビルドタイプとプロダクトフレーバー

🧱 ビルドタイプとプロダクトフレーバーとは?

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が生成されます:

FlavorBuild Type出力されるバリアント名
freedebugfreeDebug
freereleasefreeRelease
paiddebugpaidDebug
paidreleasepaidRelease

ビルドバリアントは、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のこの仕組みは非常に有用です。

mh

Related Posts

Android application development 第33章:実践ミニアプリ:天気情報アプリ

Android application development 第32章:実践ミニアプリ:シンプルなToDoリスト

You Missed

Kubernetes Learning 第38章:Operatorとは? ~Kubernetesに「運用の自動化ロボット」を組み込む仕組み~

  • 投稿者 mh
  • 6月 19, 2025
  • 10 views

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第11章:Cloud Load Balancing:あなたのGCPリソースを「賢く振り分ける交通整理の達人」

  • 投稿者 mh
  • 6月 18, 2025
  • 13 views

Kubernetes Learning 第37章:JenkinsやGitHub ActionsからのKubernetesデプロイ例 ~CI/CDツールとKubernetesをつなげてみよう~

  • 投稿者 mh
  • 6月 17, 2025
  • 17 views

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第10章:Cloud DNS:インターネットの「電話帳」サービス

  • 投稿者 mh
  • 6月 16, 2025
  • 20 views

Kubernetes Learning 第36章:Argo CDとFluxの概要~Kubernetesの自動運用を支えるGitOpsツール~

  • 投稿者 mh
  • 6月 15, 2025
  • 37 views

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第9章:IPアドレス(外部IP、内部IP、静的IP):GCPリソースの「住所」と「電話番号」

  • 投稿者 mh
  • 6月 14, 2025
  • 31 views