/*
* Copyright 2014-present Facebook, Inc.
*
* 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.facebook.buck.android;
import com.facebook.buck.jvm.java.CompileToJarStepFactory;
import com.facebook.buck.jvm.java.HasJavaAbi;
import com.facebook.buck.jvm.java.JavacOptions;
import com.facebook.buck.jvm.java.PrebuiltJar;
import com.facebook.buck.model.BuildTarget;
import com.facebook.buck.rules.BuildRule;
import com.facebook.buck.rules.BuildRuleParams;
import com.facebook.buck.rules.ExplicitBuildTargetSourcePath;
import com.facebook.buck.rules.HasRuntimeDeps;
import com.facebook.buck.rules.SourcePath;
import com.facebook.buck.rules.SourcePathResolver;
import com.facebook.buck.rules.SourcePathRuleFinder;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSortedSet;
import java.util.Optional;
import java.util.stream.Stream;
public class AndroidPrebuiltAar extends AndroidLibrary
implements HasAndroidResourceDeps, HasRuntimeDeps {
private final UnzipAar unzipAar;
private final SourcePath nativeLibsDirectory;
private final PrebuiltJar prebuiltJar;
public AndroidPrebuiltAar(
BuildRuleParams androidLibraryParams,
SourcePathResolver resolver,
SourcePathRuleFinder ruleFinder,
SourcePath proguardConfig,
SourcePath nativeLibsDirectory,
PrebuiltJar prebuiltJar,
UnzipAar unzipAar,
JavacOptions javacOptions,
CompileToJarStepFactory compileStepFactory,
Iterable<PrebuiltJar> exportedDeps,
ImmutableSortedSet<SourcePath> abiInputs) {
super(
androidLibraryParams.copyAppendingExtraDeps(ruleFinder.filterBuildRuleInputs(abiInputs)),
resolver,
ruleFinder,
/* srcs */ ImmutableSortedSet.of(),
/* resources */ ImmutableSortedSet.of(),
Optional.of(proguardConfig),
/* postprocessClassesCommands */ ImmutableList.of(),
/* declaredDeps */ androidLibraryParams.getDeclaredDeps().get(),
/* exportedDeps */ ImmutableSortedSet.<BuildRule>naturalOrder()
.add(prebuiltJar)
.addAll(exportedDeps)
.build(),
/* providedDeps */ ImmutableSortedSet.of(),
/* compileTimeClasspathDeps */ ImmutableSortedSet.of(prebuiltJar.getSourcePathToOutput()),
abiInputs,
HasJavaAbi.getClassAbiJar(androidLibraryParams.getBuildTarget()),
javacOptions,
/* trackClassUsage */ false,
compileStepFactory,
/* resourcesRoot */ Optional.empty(),
/* mavenCoords */ Optional.empty(),
Optional.of(
new ExplicitBuildTargetSourcePath(
unzipAar.getBuildTarget(), unzipAar.getAndroidManifest())),
/* tests */ ImmutableSortedSet.of());
this.unzipAar = unzipAar;
this.prebuiltJar = prebuiltJar;
this.nativeLibsDirectory = nativeLibsDirectory;
}
@Override
public String getRDotJavaPackage() {
return unzipAar.getRDotJavaPackage();
}
@Override
public SourcePath getPathToTextSymbolsFile() {
return new ExplicitBuildTargetSourcePath(
unzipAar.getBuildTarget(), unzipAar.getTextSymbolsFile());
}
@Override
public SourcePath getPathToRDotJavaPackageFile() {
return new ExplicitBuildTargetSourcePath(
unzipAar.getBuildTarget(), unzipAar.getPathToRDotJavaPackageFile());
}
@Override
public SourcePath getRes() {
return unzipAar.getResDirectory();
}
@Override
public SourcePath getAssets() {
return unzipAar.getAssetsDirectory();
}
@Override
public void addToCollector(AndroidPackageableCollector collector) {
super.addToCollector(collector);
collector.addNativeLibsDirectory(getBuildTarget(), nativeLibsDirectory);
collector.addResourceDirectory(getBuildTarget(), getRes());
collector.addAssetsDirectory(getBuildTarget(), getAssets());
}
public PrebuiltJar getPrebuiltJar() {
return prebuiltJar;
}
public SourcePath getBinaryJar() {
return prebuiltJar.getSourcePathToOutput();
}
// This class is basically a wrapper around its android resource rule, since dependents will
// use this interface to access the underlying R.java package, so make sure it's available when
// a dependent is building against us.
@Override
public Stream<BuildTarget> getRuntimeDeps() {
return Stream.of(unzipAar.getBuildTarget());
}
}