blob: 0eca164d713cad5ed0e43f2f19e1891760512693 [file] [log] [blame]
/*
* 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.model.HasBuildTarget;
/**
* Something (usually a {@link com.facebook.buck.rules.BuildRule}) that can be included in
* an Android package (android_binary or (hopefully soon) aar).
*/
public interface AndroidPackageable extends HasBuildTarget {
/**
* Get the set of packagables that need to be included in any package that includes this object.
*
* <p>For example, an android_library will need all of its Java deps (except provided_deps),
* its resource deps, and its native library deps (even though it doesn't need the native
* library as a build-time dependency). An android_resource might need an android_library
* that declares a custom view that it references, as well as other android_resource rules
* that it references directly.
*
* TODO(natthu): Once build rules and buildables are merged, replace this method with another
* interface that lets an {@link AndroidPackageable} override the default set which is all deps
* of the type {@link AndroidPackageable}.
*
* @return All {@link AndroidPackageable}s that must be included along with this one.
*/
Iterable<AndroidPackageable> getRequiredPackageables();
/**
* Add concrete resources to the given collector.
*
* <p>Implementations should call methods on the collector specify what concrete content
* must be included in an Android package that includes this object. For example, an
* android_library will add Java classes, an ndk_library will add native libraries, and
* android_resource will add resource directories.
*
* @param collector The {@link AndroidPackageableCollector} that will receive the content.
*/
void addToCollector(AndroidPackageableCollector collector);
}