Skip to content

Most visited

Recently visited

navigation

ビルド バリアントの設定

このドキュメントはビルドの設定の概要を元に構成されており、ビルド バリアントを設定して、単一のプロジェクトからさまざまなバージョンのアプリを作成する方法と、依存関係と署名設定を適切に管理する方法について説明しています。

各ビルド バリアントは、ビルド可能なさまざまなバージョンのアプリを表しています。たとえば、コンテンツが制限された無料版のアプリと多くのコンテンツが含まれた有料版のアプリを作成することができます。また、API レベルまたは他の端末のバリエーションに基づいて、異なる端末を対象とするさまざまなバージョンのアプリをビルドすることができます。ただし、端末の ABI または画面密度に基づいてさまざまなバージョンをビルドする場合は、APK の分割を使用します。

ビルド バリアントは、Gradle で特定のルールセットを使用して、ビルドタイプとプロダクト フレーバー内に構成されている設定、コード、およびリソースを組み合わせた結果です。ビルド バリアントを直接設定するのではなく、ビルド バリアントを形成するビルドタイプとプロダクト フレーバーを設定します。

たとえば、"demo" プロダクト フレーバーでは、カスタム ソースコード、リソース、最低限の API レベルなど、さまざまな機能と端末要件を指定することができます。また、"debug" ビルドタイプでは、デバッグ オプションや署名キーなど、さまざまなビルドとパッケージの設定を適用します。結果のビルド バリアントはアプリの "demoDebug" バージョンになり、このバージョンには、"demo" プロダクト フレーバー、"debug" ビルドタイプ、main/ ソースセットに含まれている設定とリソースの組み合わせが含まれます。

ビルドタイプの設定

android {} ブロック内でモジュール レベルの build.gradle ファイルにビルドタイプを作成して設定することができます。新しいモジュールを作成するときは、Android Studio によって、デバッグおよびリリース ビルドタイプが自動的に作成されます。デバッグ ビルドタイプはビルド設定ファイルに表示されませんが、Android Studio では、debuggable true でデバッグ ビルドタイプが設定されます。これにより、安全な Android 端末でアプリをデバッグし、汎用デバッグ キーストアで APK 署名を設定できるようになります。

特定の設定を追加または変更する場合、デバッグ ビルドタイプを設定に追加することができます。次のサンプルでは、デバッグ ビルドタイプ向けに applicationIdSuffix を指定し、デバッグ ビルドタイプの設定を使用して初期化される "jnidebug" ビルドタイプを設定しています。

android {
    ...
    defaultConfig {...}
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }

        debug {
            applicationIdSuffix ".debug"
        }

        /**
         * The 'initWith' property allows you to copy configurations from other build types,
         * so you don't have to configure one from the beginning. You can then configure
         * just the settings you want to change. The following line initializes
         * 'jnidebug' using the debug build type, and changes only the
         * applicationIdSuffix and versionNameSuffix settings.
         */

        jnidebug {

            // This copies the debuggable attribute and debug signing configurations.
            initWith debug

            applicationIdSuffix ".jnidebug"
            jniDebuggable true
        }
    }
}

注: ビルド設定ファイルに変更を加えると、Android Studio では、新しい設定のプロジェクトを同期するように求められます。プロジェクトを同期するには、変更を加えた直後に表示される通知バーの [Sync Now] をクリックするか、ツールバーの [Sync Project] をクリックします。Android Studio が設定のエラーを通知する場合は、問題の説明が記載された [Messages] ウィンドウが表示されます。

ビルドタイプで設定できるすべてのプロパティの詳細については、ビルドタイプの DSL リファレンスをご覧ください。

プロダクト フレーバーの設定

プロダクト フレーバーの作成は、ビルドタイプの作成に類似しています。プロダクト フレーバーを productFlavors {} ブロックに追加して、必要な設定を構成します。プロダクト フレーバーでは、defaultConfig と同じプロパティがサポートされます。その理由は、defaultConfig が実際に ProductFlavor クラスに属しているからです。つまり、defaultConfig {} ブロックですべてのフレーバーの基本設定を提供することができ、各フレーバーは、applicationId など、これらのデフォルト値をオーバーライドできます。

注: main/ マニフェスト ファイルの package 属性を使用してパッケージ名を指定する必要もあります。また、ソースコードでそのパッケージ名を使用して、R クラスを参照したり、関連するアクティビティやサービスの登録を解決する必要があります。これにより、ソースコードを変更する必要なく、applicationId を使用して、パッケージ化および配布用の一意の ID を各プロダクト フレーバーに提供できるようになります。

次のコードサンプルでは、独自の applicationIdversionName を用いて "demo" および "full" プロダクト フレーバーを作成しています。

android {
    ...
    defaultConfig {...}
    buildTypes {...}
    productFlavors {
        demo {
            applicationId "com.example.myapp.demo"
            versionName "1.0-demo"
        }
        full {
            applicationId "com.example.myapp.full"
            versionName "1.0-full"
        }
    }
}

注: Google Play で複数 APK のサポートを使用してアプリを配布するには、同じ applicationId 値をすべてのバリアントに割り当て、各バリアントに異なる versionCode を付与します。Google Play でさまざまなバリアントのアプリを個別のアプリとして配布するには、各バリアントに異なる applicationId を割り当てる必要があります。

プロダクト フレーバーを作成して設定した後、通知バーで [Sync Now] をクリックします。同期が完了すると、Gradle は、ビルドタイプとプロダクト フレーバーに基づいてビルド バリアントを自動的に作成し、ビルド バリアントに <product-flavor><Build-Type> の名前を付けます。たとえば、"demo" および "full" プロダクト フレーバーを作成し、ビルドタイプをデフォルトの "debug'" および "release" のままにした場合、Gradle は次のビルド バリアントを作成します。

ビルドして実行するビルド バリアントを、この中のいずれかに変更することができます。変更するには、[Build] > [Select Build Variant] に移動し、プルダウン メニューからビルド バリアントを選択します。独自の機能とリソースで各ビルド バリアントをカスタマイズするには、ソースセットを作成および管理する方法を把握しておく必要があります。

ビルド バリアントのソースセットの作成

Android Studio はデフォルトで、全ビルド バリアントで共有するすべての要素の main/ ソースセットとディレクトリを作成します。一方で、新しいソースセットを作成し、特定のビルドタイプ、プロダクト フレーバー、およびビルド バリアントに対して、Gradle がどのファイルをコンパイルおよびパッケージ化するかを厳密に制御することもできます。たとえば、main/ ソースセットで基本的な機能を定義し、プロダクト フレーバーのソースセットを使用して、クライアントごとにアプリのブランディングを変えたり、デバッグ ビルドタイプを使用するビルド バリアント専用の特別なパーミッションやログ機能を含めたりすることができます。

Gradle では、main/ ソースセットの場合と同じように、特定の方法でソースセット ファイルとディレクトリを管理する必要があります。たとえば、"debug" ビルドタイプ固有の Java クラスファイルは src/debug/java/ ディレクトリに配置しなければなりません。

Android Plugin for Gradle は、それぞれのビルドタイプ、プロダクト フレーバー、ビルド バリアント向けのファイルを管理する方法を示す便利な Gradle タスクを提供します。たとえば、以下のレポートのセクションは、Gradle で "debug" ビルドタイプの特定のファイルがあると予想される場所を示しています。

------------------------------------------------------------
Project :app
------------------------------------------------------------

...

debug
----
Compile configuration: compile
build.gradle name: android.sourceSets.debug
Java sources: [app/src/debug/java]
Manifest file: app/src/debug/AndroidManifest.xml
Android resources: [app/src/debug/res]
Assets: [app/src/debug/assets]
AIDL sources: [app/src/debug/aidl]
RenderScript sources: [app/src/debug/rs]
JNI sources: [app/src/debug/jni]
JNI libraries: [app/src/debug/jniLibs]
Java-style resources: [app/src/debug/resources]

ビルドの設定のために、このレポートを生成して表示するには、次の手順を実行します。

  1. IDE ウィンドウの右側にある [Gradle] をクリックします。
  2. [MyApplication] > [Tasks] > [android] に移動し、[sourceSets] をダブルクリックします。
  3. レポートを表示するには、IDE ウィンドウの下部にある [Gradle Console] をクリックします。

注: レポートには、test/ および androidTest/ テスト ソースセット など、アプリのテストを実行するために必要なファイルのソースセットを管理する方法が示されています。

新しいビルド バリアントを作成したとき、Android Studio では、ソースセット ディレクトリは作成されませんが、便利なオプションがいくつか提供されます。たとえば、"debug" ビルドタイプ用の java/ ディレクトリを作成するには、次の手順を実行します。

  1. [Project] ペインを開き、ペインの上部にあるプルダウン メニューから [Project] ビューを選択します。
  2. [MyProject/app/src/] に移動します。
  3. [src] ディレクトリを右クリックし、[New] > [Folder] > [Java Folder] を選択します。
  4. [Target Source Set] の横にあるプルダウン メニューから [debug] を選択します。
  5. [Finish] をクリックします。

Android Studio はデバッグ ビルドタイプのソースセット ディレクトリを作成してから、そのディレクトリ内に java/ ディレクトリを作成します。また、特定のビルド バリアントの新しいファイルを作成するときに、Android Studio でディレクトリを作成することもできます。たとえば、"debug" ビルドタイプ用の values XML ファイルを作成するには、次の手順を実行します。

  1. 同じ [Project] ペインで、[src] ディレクトリを右クリックし、[New] > [XML] > [Values XML File] を選択します。
  2. XML ファイルの名前を入力するか、デフォルトの名前のままにします。
  3. [Target Source Set] の横にあるプルダウン メニューから [debug] を選択します。
  4. [Finish] をクリックします。

"debug" ビルドタイプがターゲット ソースセットとして指定されているため、Android Studio は XML ファイルを作成するときに、必要なディレクトリを自動的に作成します。生成されたディレクトリ構造は図 2 のようになります。

図 2 debug ビルドタイプの新しいソースセット ディレクトリ。

同じ手順を使用して、src/demo/ など、プロダクト フレーバーのソースセット ディレクトリや、src/demoDebug/ など、ビルド バリアントのソースセット ディレクトリを作成することができます。また、src/androidTestDemoDebug/ など、特定のビルド バリアントを対象とするテスト ソースセットも作成できます。詳細については、テスト ソースセットをご覧ください。

ソースセットでビルドする

特定の設定のみでパッケージ化するコードやリソースを含めるために、ソースセット ディレクトリを使用することができます。たとえば、"demo" プロダクト フレーバーと "debug" ビルドタイプを組み合わせた "demoDebug" ビルド バリアントをビルドしている場合、Gradle はこれらのディレクトリを参照し、次の優先順位を付与します。

  1. src/demoDebug/(ビルド バリアントのソースセット)
  2. src/debug/(ビルドタイプのソースセット)
  3. src/demo/(プロダクト フレーバーのソースセット)
  4. src/main/(メイン ソースセット)

上記の順番により、Gradle がコードとリソースを組み合わせるときに、より優先度の高いソースセットが判別されます。demoDebug/ ソースセット ディレクトリにはそのビルド バリアント固有のファイルが含まれる可能性が高いため、debug/ で定義されているファイルが demoDebug/ に含まれている場合、Gradle は demoDebug/ ソースセットのファイルを使用します。同様に、Gradle は、ビルドタイプとプロダクト フレーバーのソースセットのファイルに main/ の同じファイルよりも高い優先度を付与します。Gradle では、以下のビルドルールを適用するときに、この優先順位が考慮されます。

依存関係の宣言

次の例では、app/ モジュールの build.gradle ファイルで 3 つの異なるタイプの直接的な依存関係を宣言しています

android {...}
...
dependencies {
    // The 'compile' configuration tells Gradle to add the dependency to the
    // compilation classpath and include it in the final package.

    // Dependency on the "mylibrary" module from this project
    compile project(":mylibrary")

    // Remote binary dependency
    compile 'com.android.support:appcompat-v7:25.1.0'

    // Local binary dependency
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

これらの直接的な依存関係の説明は次のとおりです。

モジュールの依存関係
compile project(':mylibrary') 行で、"mylibrary" という名前の Android ローカル ライブラリ モジュールを依存関係として宣言し、アプリをビルドするときにそのローカル モジュールをコンパイルして含めることを要求しています。
リモート バイナリの依存関係
compile 'com.android.support:appcompat-v7:25.1.0' 行で、JCenter 座標を指定することにより、バージョン 25.1.0 の Android Support Library の依存関係を宣言しています。デフォルトでは、Android Studio は、トップレベルのビルドファイルで JCenter Repository を使用するようにプロジェクトを設定します。プロジェクトとビルド設定ファイルを同期すると、Gradle は JCenter から依存関係を自動的に取り込みます。または、SDK Manager を使用して、特定の依存関係をダウンロードしてインストールすることができます。
ローカル バイナリの依存関係
compile fileTree(dir: 'libs', include: ['*.jar']) 行で、コンパイル クラスパスおよびアプリの最終パッケージの app/libs/ ディレクトリ内に JAR ファイルを含めるようにビルドシステムに指定しています。ローカル バイナリの依存関係が必要なモジュールがある場合、これらの依存関係の JAR ファイルをプロジェクト内の <moduleName>/libs にコピーします。

モジュールの直接的な依存関係の中には、モジュールの「推移的な依存関係」と呼ばれる独自の依存関係を持つものがあります。推移的な各依存関係を手動で宣言しなくても、Gradle では、これらの依存関係が自動的に収集および追加されます。Android Plugin for Gradle では、各ビルド バリアントおよびテスト ソースセットの依存関係ツリーを生成できる便利な Gradle タスクが提供されているため、モジュールの直接的な依存関係と推移的な依存関係の両方を簡単に視覚化することができます。このレポートを生成するには、次の手順を実行します。

  1. IDE ウィンドウの右側にある [Gradle] をクリックします。
  2. [MyApplication] > [Tasks] > [android] に移動し、[androidDependencies] をダブルクリックします。
  3. レポートを表示するには、IDE ウィンドウの下部にある [Gradle Console] をクリックします。

次のサンプル レポートはデバッグ ビルド バリアントの依存関係ツリーを示しており、このツリーには、前の例のローカル モジュールの依存関係とリモートの依存関係が含まれています。

Executing tasks: [androidDependencies]
:app:androidDependencies
debug
/**
 * Both the library module dependency and remote binary dependency are listed
 * with their transitive dependencies.
 */
+--- MyApp:mylibrary:unspecified
|    \--- com.android.support:appcompat-v7:25.1.0
|         +--- com.android.support:animated-vector-drawable:25.1.0
|         |    \--- com.android.support:support-vector-drawable:25.1.0
|         |         \--- com.android.support:support-v4:25.1.0
|         |              \--- LOCAL: internal_impl-25.1.0.jar
|         +--- com.android.support:support-v4:25.1.0
|         |    \--- LOCAL: internal_impl-25.1.0.jar
|         \--- com.android.support:support-vector-drawable:25.1.0
|              \--- com.android.support:support-v4:25.1.0
|                   \--- LOCAL: internal_impl-25.1.0.jar
\--- com.android.support:appcompat-v7:25.1.0
     +--- com.android.support:animated-vector-drawable:25.1.0
     |    \--- com.android.support:support-vector-drawable:25.1.0
     |         \--- com.android.support:support-v4:25.1.0
     |              \--- LOCAL: internal_impl-25.1.0.jar
     +--- com.android.support:support-v4:25.1.0
     |    \--- LOCAL: internal_impl-25.1.0.jar
     \--- com.android.support:support-vector-drawable:25.1.0
          \--- com.android.support:support-v4:25.1.0
               \--- LOCAL: internal_impl-25.1.0.jar
...

Gradle での依存関係の管理に関する詳細については、Gradle のユーザーガイドの依存関係管理の基本をご覧ください。

依存関係の設定

前の例にある compile キーワードなど、特定の設定キーワードを使用して、依存関係を使用する方法とタイミングを Gradle に指示することができます。以下に、依存関係の設定に使用できるキーワードをいくつか紹介します。

compile
コンパイル時の依存関係を指定します。Gradle は、この設定を使用して依存関係をクラスパスとアプリの APK に追加します。これはデフォルトの設定です。
apk
Gradle でアプリの APK をパッケージ化するために必要な実行時のみの依存関係を指定します。この設定は JAR バイナリの依存関係と併用できますが、他のライブラリ モジュールの依存関係や AAR バイナリの依存関係とは併用できません。
provided
Gradle でアプリの APK と一緒にパッケージ化されないコンパイル時の依存関係を指定します。これは、実行時に依存関係が要求されない場合に、APK のサイズを削減するのに役立ちます。この設定は JAR バイナリの依存関係と併用できますが、他のライブラリ モジュールの依存関係や AAR バイナリの依存関係とは併用できません。

また、次のサンプルで示しているように、ビルド バリアントまたはテスト ソースセットの名前を設定キーワードに適用することにより、特定のビルド バリアントまたはテスト ソースセットの依存関係を設定することができます。

dependencies {
    ...
    // Adds specific library module dependencies as compile time dependencies
    // to the fullRelease and fullDebug build variants.
    fullReleaseCompile project(path: ':library', configuration: 'release')
    fullDebugCompile project(path: ':library', configuration: 'debug')

    // Adds a compile time dependency for local tests.
    testCompile 'junit:junit:4.12'

    // Adds a compile time dependency for the test APK.
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
}

署名設定の設定

Gradle では、このビルドの署名設定を明示的に定義しない限り、リリースビルドの APK に署名されません。リリースキーの作成と、Android Studio での release ビルドタイプの署名は簡単に行うことができます。

Gradle ビルド設定を使用して、release ビルドタイプの署名設定を手動で設定するには、次の手順を実行します。

  1. キーストアを作成します。キーストアは一連のプライベート キーを含んだバイナリ ファイルです。キーストアは安全な場所に保管する必要があります。
  2. プライベート キーを作成します。プライベート キーは、人や会社など、アプリで識別されるエンティティを表します。
  3. 署名設定をモジュール レベルの build.gradle ファイルに追加します。

    ...
    android {
        ...
        defaultConfig {...}
        signingConfigs {
            release {
                storeFile file("myreleasekey.keystore")
                storePassword "password"
                keyAlias "MyReleaseKey"
                keyPassword "password"
            }
        }
        buildTypes {
            release {
                ...
                signingConfig signingConfigs.release
            }
        }
    }
    

署名済みの APK を生成するには、メニューバーから [Build] > [Generate Signed APK] を選択します。これで、app/build/apk/app-release.apk 内のパッケージがリリースキーによって署名されます。

注: リリースキーとキーストアのパスワードをビルドファイルに含めることは、セキュリティ上の理由からお勧めできません。代わりに、これらのパスワードを環境変数から取得するか、ビルドプロセスによってこれらのパスワードが要求されるようにビルドファイルを設定できます。

これらのパスワードを環境変数から取得する方法:

storePassword System.getenv("KSTOREPWD")
keyPassword System.getenv("KEYPWD")

コマンドラインからビルドを開始する場合に、ビルドプロセスによってこれらのパスワードが要求されるようにする方法:

storePassword System.console().readLine("\nKeystore password: ")
keyPassword System.console().readLine("\nKey password: ")

このプロセスが完了したら、アプリを配布したり、Google Play で公開したりできます。

警告: キーストアとプライベート キーは安全な場所に保管し、セキュア バックアップを取るようにしてください。アプリのすべてのバージョンは常に同じキーで署名する必要があるため、アプリを Google Play に公開した後でアプリの署名に使用したキーをなくした場合、アプリに対してアップデートを公開できなくなります。

Android Wear アプリに署名する

Android Wear アプリを公開する場合、ユーザーはウェアラブル端末上で直接アプリを閲覧してインストールできないため、ウェアラブル アプリをハンドヘルド アプリ内にパッケージ化します。署名は両方のアプリに付ける必要があります。Android Wear アプリのパッケージ化と署名の詳細については、ウェアラブル アプリのパッケージ化をご覧ください。

This site uses cookies to store your preferences for site-specific language and display options.

Hooray!

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a one-minute survey?
Help us improve Android tools and documentation.