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 第30章:Firebase Crashlytics でのクラッシュレポート

Android application development 第29章:キーストアと署名

You Missed

Google Cloud Platform エンジニア向け教科書:実践から認定まで : はじめに

  • 投稿者 mh
  • 5月 30, 2025
  • 1 views

現場で使えるChrome DevTools実践ガイド 第6章:Sourcesパネルでのブレークポイントとステップ実行

  • 投稿者 mh
  • 5月 30, 2025
  • 11 views

Kubernetes Learning 第26章:標準的なログ取得方法(kubectl logs)〜Podの中で何が起きているかをのぞいてみよう〜

  • 投稿者 mh
  • 5月 30, 2025
  • 3 views

Android application development 第30章:Firebase Crashlytics でのクラッシュレポート

  • 投稿者 mh
  • 5月 30, 2025
  • 3 views

Kubernetes Learning 第25章:Replica数と冗長性の設計 〜止まらないシステムのために〜

  • 投稿者 mh
  • 5月 29, 2025
  • 14 views

Android application development 第29章:キーストアと署名

  • 投稿者 mh
  • 5月 29, 2025
  • 15 views