web-dev-qa-db-ja.com

Android Studioを使用してモジュールにフレーバーを追加するにはどうすればよいですか?

同じモジュールを使用する一連のプロジェクトがあり、実際のコードのほとんどすべてが含まれています。プロジェクトは次のように設定されています:

project/
  - app/
    - build.gradle
  - libraries/
    - module/
      - build.gradle
  - build.gradle
  - settings.gradle

依存関係はすべて正しく設定されており、アプリを適切にビルドして実行できますが、プロジェクトに追加できるのは理想的なソリューションではありません。 settings.gradleには以下が含まれます:

include ':app', ':libraries:module'

アプリディレクトリのbuild.gradleファイルに、次のブロックを追加しました。

productFlavors {
    alpha
    production
}

Gradle 0.11を使用すると、これはassembleAlphaDebugassembleAlphaReleaseassembleProductionDebugassembleProductionReleaseタスクを同期して作成します。代わりにモジュールでこれを実行しようとすると、エラーが発生します。

指定された名前に一致するリソースが見つかりません( 'theme'で値 '@ style/MyCustomTheme')

ビルドされたapp/src/main/AndroidManifest.xml。何らかの理由で、モジュールがビルドされていないため、カスタムテーマが機能していません。何が悪いのですか?

30
Phil

ライブラリモジュールのbuild.gradleで、フレーバーと、別のモジュールからインクルードするときに指定されていない場合にデフォルトで使用するビルドバリアントをエクスポートするように指示するために、追加の行がいくつか必要です。

Android {
    defaultPublishConfig "productionRelease"
    publishNonDefault true

    productFlavors {
        alpha {
        }
        production {
        }
    }
}

そのpublishNonDefaultビットは、誰かがproductionReleaseバリアント以外のものに依存したい場合にのみ必要です。おそらく、最初にライブラリにマルチフレーバーを設定した場合がそうです。

ここで、build.gradleでこれを介して別のモジュールからの依存関係を追加すると、次のようになります。

dependencies {
    compile project(':module')
}

デフォルトではproductionReleaseバリアントに依存します。デフォルト以外のバリアントに依存する場合:

dependencies {
    compile project(path: ':module', configuration:'alphaDebug')
}
67
Scott Barta