blob: 00b8c79173ee15dec058c485b0eb6ee00e5ab8e6 [file] [log] [blame]
/*
* Copyright (C) 2015 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.gms.googleservices
import org.gradle.api.Plugin
import org.gradle.api.Project
class GoogleServicesPlugin implements Plugin<Project> {
public final static String JSON_FILE_NAME = 'google-services.json'
@Override
void apply(Project project) {
// setup this plugin no matter the order.
if (!checkForKnownPlugins(project)) {
project.plugins.whenPluginAdded {
checkForKnownPlugins(project)
}
}
}
private void setupPlugin(Project project, boolean isLibrary) {
if (isLibrary) {
project.android.libraryVariants.all { variant ->
handleVariant(project, variant)
}
} else {
project.android.applicationVariants.all { variant ->
handleVariant(project, variant)
}
}
}
private static void handleVariant(Project project, def variant) {
File quickstartFile = project.file(JSON_FILE_NAME)
File outputDir = project.file("$project.buildDir/generated/res/google-services/$variant.dirName")
GoogleServicesTask task = project.tasks.create("process${variant.name.capitalize()}GoogleServices", GoogleServicesTask)
task.quickstartFile = quickstartFile
task.intermediateDir = outputDir
task.packageName = variant.applicationId
variant.registerResGeneratingTask(task, outputDir)
}
private boolean checkForKnownPlugins(Project project) {
if (project.plugins.hasPlugin("android") ||
project.plugins.hasPlugin("com.android.application")) {
// this is a bit fragile but since this is internal usage this is ok
// (another plugin could declare itself to be 'android')
setupPlugin(project, false)
return true
} else if (project.plugins.hasPlugin("android-library") ||
project.plugins.hasPlugin("com.android.library")) {
// this is a bit fragile but since this is internal usage this is ok
// (another plugin could declare itself to be 'android-library')
setupPlugin(project, true)
return true
}
return false
}
}