マルチフレーバー、マルチビルドタイプのAndroidプロジェクトがあり、NewRelicプラグインを統合したいのですが、顧客の1人だけに適用する必要があるため、1つの製品にのみ適用する必要があります。味。
NewRelicはインストルメンテーションを使用し、プラグインを他のフレーバーに適用した場合、プラグインは他のフレーバーでコードを生成しますが、それは許可されていません。
だから私の質問は:apply plugin: something
gradleファイルのコマンドを1つのフレーバーにのみ適用するには?
このコードを使用してください:
_if (!getGradle().getStartParameter().getTaskRequests()
.toString().contains("Develop")){
apply plugin: 'com.google.gms.google-services'
}
_
getGradle().getStartParameter().getTaskRequests().toString()
は_[DefaultTaskExecutionRequest{args=[:app:generateDevelopDebugSources],projectPath='null'}]
_のようなものを返すので、コメントで述べたようにDevelop
は大文字で始める必要があります。
def fl
_フレーバー(またはビルド、あるいはその両方)の変数を初期化する
_ productFlavors {
freeFlavour {
(...)
fl = "free"
}
paidFlavour {
(...)
fl = "paid"
}
}
_
Ifステートメントを使用-
if (fl == "free") { apply plugin: something }
さまざまな解決策を試しましたが、どれも私にとってうまくいきませんでした。これは私が思いついたものであり、私がテストした限りでは機能しているようです:
build.gradle
productFlavors {
someFlavorWithGoogleGcm {
dimension "type"
applicationId "com.example.withGcm"
ext.useGoogleGcm = true
}
someFlavorWithoutGoogleGcm {
dimension "type"
applicationId "com.example.withoutGcm"
}
}
そして、構成の外側、build.gradle
ファイル:
Android.productFlavors.each { flavor ->
if (getGradle().getStartParameter().getTaskRequests().toString().toLowerCase().contains(flavor.name) && flavor.ext.useGoogleGcm) {
println("Building flavor with Google GCM [${flavor.name}] - applying plugin")
apply plugin: 'com.google.gms.google-services'
}
}
私は解決策を見つけましたが、今のところ最善ではありません。ですから、私が最初にやりたかったことは可能かどうか、もうわかりません。 Gradleファイルの評価と正しいフレーバーとビルドタイプの選択はGradleビルドのさまざまなフェーズにあるため、私が行ったことは次のとおりです。
コマンドラインからビルドパラメーターを使用します。そのパラメーターがtrueの場合は、プラグインを適用します。プラグインが存在しない場合も適用します(IDE buildの場合)。Jenkinsを使用しているため、ビルドにそのパラメーターを書き込むことができますジョブ。
build.gradleファイル:
// First we have to attach a task to the project, which will be running first
gradle.projectsEvaluated {
preBuild.dependsOn(applyNewRelicByProperty)
}
// Then check on the parameter, which comes from the command line
task applyNewRelicByProperty {
if(!project.hasProperty('compileNewRelic')) {
// NewRelic on: 'compileNewRelic' property not set, so running from IDE.
apply plugin: 'newrelic'
} else if(project.hasProperty('compileNewRelic') && project.getProperties().get('compileNewRelic').equals('true')) {
// NewRelic on: 'compileNewRelic' property is set and it is 'true'.
apply plugin: 'newrelic'
} else {
// NewRelic off
println("No NewRelic")
}
}
そして、あなたはこれによってgradleビルドを実行する必要があります:
assembleYourApp -PcompileNewRelic=true