in buildSrc/src/main/java/com/google/firebase/gradle/plugins/FirebaseLibraryPlugin.java [118:211]
private static void setupApiInformationAnalysis(Project project, LibraryExtension android) {
File metalavaOutputJarFile = new File(project.getRootProject().getBuildDir(), "metalava.jar");
AndroidSourceSet mainSourceSet = android.getSourceSets().getByName("main");
File outputFile =
project
.getRootProject()
.file(
Paths.get(
project.getRootProject().getBuildDir().getPath(),
"apiinfo",
project.getPath().substring(1).replace(":", "_")));
File outputApiFile = new File(outputFile.getAbsolutePath() + "_api.txt");
project
.getTasks()
.register(
"getMetalavaJar",
GetMetalavaJarTask.class,
task -> {
task.setOutputFile(metalavaOutputJarFile);
});
File apiTxt =
project.file("api.txt").exists()
? project.file("api.txt")
: project.file(project.getRootDir() + "/empty-api.txt");
TaskProvider<ApiInformationTask> apiInfo =
project
.getTasks()
.register(
"apiInformation",
ApiInformationTask.class,
task -> {
task.setApiTxt(apiTxt);
task.setMetalavaJarPath(metalavaOutputJarFile.getAbsolutePath());
task.setSourceSet(mainSourceSet);
task.setOutputFile(outputFile);
task.setBaselineFile(project.file("baseline.txt"));
task.setOutputApiFile(outputApiFile);
if (project.hasProperty("updateBaseline")) {
task.setUpdateBaseline(true);
} else {
task.setUpdateBaseline(false);
}
task.dependsOn("getMetalavaJar");
});
TaskProvider<GenerateApiTxtFileTask> generateApiTxt =
project
.getTasks()
.register(
"generateApiTxtFile",
GenerateApiTxtFileTask.class,
task -> {
task.setApiTxt(project.file("api.txt"));
task.setMetalavaJarPath(metalavaOutputJarFile.getAbsolutePath());
task.setSourceSet(mainSourceSet);
task.setBaselineFile(project.file("baseline.txt"));
task.setUpdateBaseline(project.hasProperty("updateBaseline"));
task.dependsOn("getMetalavaJar");
});
TaskProvider<GenerateStubsTask> docStubs =
project
.getTasks()
.register(
"docStubs",
GenerateStubsTask.class,
task -> {
task.setSourceSet(mainSourceSet);
});
project.getTasks().getByName("check").dependsOn(docStubs);
android
.getLibraryVariants()
.all(
v -> {
if (v.getName().equals("release")) {
FileCollection jars =
v.getCompileConfiguration()
.getIncoming()
.artifactView(
config ->
config.attributes(
container ->
container.attribute(
Attribute.of("artifactType", String.class), "jar")))
.getArtifacts()
.getArtifactFiles();
apiInfo.configure(t -> t.setClassPath(jars));
generateApiTxt.configure(t -> t.setClassPath(jars));
docStubs.configure(t -> t.setClassPath(jars));
}
});
}