我有一个多风格,多构建类型的android项目,我想整合NewRelic插件。但我必须只为其中一个顾客申请,因此只适用于一种产品风味 NewRelic使用检测,如果我在那里应用插件,插件会生成其他风格的代码,这是我们不允许的。
所以我的问题是:如何在gradle文件中使用apply plugin: something
命令仅应用于我的一种口味?
答案 0 :(得分:34)
使用此代码:
getGradle().getStartParameter().getTaskRequests().toString()
[DefaultTaskExecutionRequest{args=[:app:generateDevelopDebugSources],projectPath='null'}]
会返回Develop
之类的内容,因此评论[(time1, a, b),
(time2, c, d),
(time3, e, f),
(time4, g, h),
...]
中所述必须以大写字母开头。
答案 1 :(得分:11)
def fl
在Flavors(和/或build)中初始化变量
productFlavors {
freeFlavour {
(...)
fl = "free"
}
paidFlavour {
(...)
fl = "paid"
}
}
使用if语句 -
if (fl == "free") {
apply plugin: something
}
答案 2 :(得分:2)
尝试了不同的解决方案,但没有一个对我有用。这是我想出的,并且据我测试似乎可以正常工作:
WITH a
AS (SELECT registrations.user_id,
registrations.reg_date,
logins.login_date,
Row_number()
OVER(
partition BY registrations.user_id
ORDER BY logins.login_date DESC) row_num
FROM registrations
INNER JOIN logins
ON registrations.user_id = logins.user_id
WHERE logins.login_date BETWEEN Hours_add(registrations.reg_date, 24)
AND
Hours_add(registrations.reg_date, 48))
SELECT *
FROM a
WHERE row_num = 1
build.gradle
在配置之外,在productFlavors {
someFlavorWithGoogleGcm {
dimension "type"
applicationId "com.example.withGcm"
ext.useGoogleGcm = true
}
someFlavorWithoutGoogleGcm {
dimension "type"
applicationId "com.example.withoutGcm"
}
}
文件中:
build.gradle
答案 3 :(得分:1)
我只是在应用程序级别build.gradle的风味中使用了apply plugin: 'com.google.gms.google-services'
,效果很好。
productFlavors {
..... your other flavors ....
yourFlv {
....
....
apply plugin: 'com.google.gms.google-services'
}
}
不需要额外的步骤。
答案 4 :(得分:0)
对于 Google 服务 Gradle 插件,以下内容有效。
apply plugin: 'com.google.gms.google-services'
afterEvaluate {
tasks.matching { it.name.contains("GoogleServices") && !it.name.contains(yourFlavorName) }*.enabled = false
}
其中 yourFlavorName
是一个大写字符串,包含必须应用插件的风味名称;所有其他风格不使用该插件。
请注意,该插件仍然适用于其他风味;此解决方案只是为他们禁用 *GoogleServices*
任务。这假设 Google 服务 Gradle 插件仅通过添加包含子字符串 "GoogleServices"
的任务来应用更改,这在将来可能无法工作。
要检查这是否有效,您可以检查依赖项,例如像这样:
./gradlew app:dependencyInsight --configuration yourFlavorNameDebugCompileClasspath --dependency google | grep -i services
这应该显示 yourFlavorName
的一些依赖项,但不显示其他风味名称的依赖项:
./gradlew app:dependencyInsight --configuration otherFlavorNameDebugCompileClasspath --dependency google | grep -i services
答案 5 :(得分:0)
升级到 Gradle 4.2 后,Tarps 的方法停止工作,所以我最终将其与 Erik 的答案结合起来。
为 ext.useGoogleGcm
中的每种口味设置 build.gradle
:
productFlavors {
a {
...
ext.useGoogleGcm = true
}
b {
...
ext.useGoogleGcm = false
}
}
然后在文件底部:
apply plugin: 'com.google.gms.google-services'
afterEvaluate {
android.productFlavors.each { flavor ->
tasks.matching {
it.name.contains('GoogleServices') && it.name.contains(flavor.name.capitalize())
}*.enabled = flavor.ext.useGoogleGcm
}
}
在您的 assembleRelease
任务的输出中,您应该看到名称中带有“GoogleServices”的任务已经为真任务运行,为假任务跳过。如果您的构建抱怨 toCapitalize
,您可以在 toLowerCase
和 it.name
上使用 flavor.name
。