在我的 Android 项目中,有几种产品风格:
buildTypes {
release {}
debug {}
staging {}
}
productFlavors {
freeVersion {}
proVersion {}
partnerVersion {}
}
另外,我使用谷歌分析:
apply plugin: 'com.google.gms.google-services'
dependencies {
compile 'com.google.android.gms:play-services-analytics:8.4.0'
}
如何在其中之一中排除谷歌服务?例如,在:
freeVersion {}
另一个解决方案是禁用 google-services 插件添加的任务 - 在这里,如果flavorName不是“freeVersion”,我会启用该任务,但这个逻辑可以清楚地更新为查看变体buildType。
apply plugin: 'com.google.gms.google-services'
// must be after the plugin is applied otherwise no tasks will be found
android.applicationVariants.all { variant ->
def googleTask = tasks.findByName("process${variant.name.capitalize()}GoogleServices")
googleTask.enabled = !"freeVersion".equals(variant.flavorName)
}
请注意使用
freeCompile
并声明变量 flavor
来有条件地应用插件。
apply plugin: 'com.android.application'
def flavor
android {
....
....
productFlavors {
free {
applicationId "com.anandbibek.builditbigger.free"
flavor = "free"
}
paid {
applicationId "com.anandbibek.builditbigger.paid"
flavor = "paid"
}
}
}
dependencies {
// Added for AdMob
freeCompile 'com.google.firebase:firebase-ads:9.6.1'
compile 'com.android.support:appcompat-v7:24.2.1'
compile 'com.google.code.findbugs:jsr305:2.0.1'
}
if(flavor == "free") {
apply plugin: 'com.google.gms.google-services'
}
确保将
google-services.json
文件放入风味特定文件夹中。就我而言,我仅将其放入 app/src/free
中。当您在主项目 gradle 文件中使用 classpath 'com.google.gms:google-services:3.0.0'
时,此功能可用。
在尝试了这些和其他示例之后,没有一个解决方案对我有用。我认为这些答案有点过时了,考虑到答案是从 2018 年开始的,而且 Gradle 已经发生了很大变化,尤其是从 Groovy 迁移到 Kotlin。最后,对我有用的代码如下:
val variantsWithoutFirebase = arrayListOf(
"variantDebug", "variantStaging", "variantRelease"
)
afterEvaluate {
android.applicationVariants.all { _ ->
project.tasks.filter { task ->
variantsWithoutFirebase.any { task.name.contains(it, true) }
}.map { task ->
if (
task.name.contains("GoogleServices") ||
task.name.contains("uploadCrashlyticsMapping")
) {
// Remove google services plugin
tasks.findByName(task.name)?.enabled = false
println("Disable task: ${task.name}")
}
}
false
}
}
我最初误读了这个问题。要排除免费版本,您可以使用 proVersionCompile 和 PartnerVersionCompile 以及所需的依赖项来排除免费版本。
dependencies {
proVersionCompile 'com.google.android.gms:play-services-analytics:8.4.0'
partnerVersionCompile 'com.google.android.gms:play-services-analytics:8.4.0'
}