| // Copyright 2015 The Bazel Authors. All rights reserved. |
| // |
| // 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.devtools.build.lib.rules.android; |
| |
| import com.google.auto.value.AutoValue; |
| import com.google.devtools.build.lib.actions.Artifact; |
| import com.google.devtools.build.lib.analysis.FilesToRunProvider; |
| import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode; |
| import com.google.devtools.build.lib.analysis.RuleContext; |
| import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; |
| import com.google.devtools.build.lib.analysis.TransitiveInfoProvider; |
| import com.google.devtools.build.lib.collect.nestedset.NestedSet; |
| import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; |
| import javax.annotation.Nullable; |
| |
| /** Description of the tools Blaze needs from an Android SDK. */ |
| @AutoValue |
| @Immutable |
| public abstract class AndroidSdkProvider implements TransitiveInfoProvider { |
| |
| public static AndroidSdkProvider create( |
| String buildToolsVersion, |
| boolean aaptSupportsMainDexGeneration, |
| Artifact frameworkAidl, |
| Artifact androidJar, |
| Artifact shrinkedAndroidJar, |
| NestedSet<Artifact> androidBaseClasspathForJack, |
| NestedSet<Artifact> javaBaseClasspathForJack, |
| Artifact annotationsJar, |
| Artifact mainDexClasses, |
| FilesToRunProvider adb, |
| FilesToRunProvider dx, |
| FilesToRunProvider mainDexListCreator, |
| FilesToRunProvider aidl, |
| FilesToRunProvider aapt, |
| FilesToRunProvider apkBuilder, |
| @Nullable FilesToRunProvider apkSigner, |
| FilesToRunProvider proguard, |
| FilesToRunProvider zipalign, |
| FilesToRunProvider jack, |
| FilesToRunProvider jill, |
| FilesToRunProvider resourceExtractor) { |
| |
| return new AutoValue_AndroidSdkProvider( |
| buildToolsVersion, |
| aaptSupportsMainDexGeneration, |
| frameworkAidl, |
| androidJar, |
| shrinkedAndroidJar, |
| androidBaseClasspathForJack, |
| javaBaseClasspathForJack, |
| annotationsJar, |
| mainDexClasses, |
| adb, |
| dx, |
| mainDexListCreator, |
| aidl, |
| aapt, |
| apkBuilder, |
| apkSigner, |
| proguard, |
| zipalign, |
| jack, |
| jill, |
| resourceExtractor); |
| } |
| |
| /** |
| * Returns the Android SDK associated with the rule being analyzed or null if the Android SDK is |
| * not specified. |
| */ |
| public static AndroidSdkProvider fromRuleContext(RuleContext ruleContext) { |
| TransitiveInfoCollection androidSdkDep = |
| ruleContext.getPrerequisite(":android_sdk", Mode.TARGET); |
| AndroidSdkProvider androidSdk = androidSdkDep == null |
| ? null : androidSdkDep.getProvider(AndroidSdkProvider.class); |
| |
| return androidSdk; |
| } |
| |
| /** |
| * Signals an error if the Android SDK cannot be found. |
| */ |
| public static boolean verifyPresence(RuleContext ruleContext) { |
| if (fromRuleContext(ruleContext) == null) { |
| ruleContext.ruleError( |
| "No Android SDK found. Use the --android_sdk command line option to specify one."); |
| return false; |
| } |
| |
| return true; |
| } |
| |
| /** The value of build_tools_version. May be null or empty. */ |
| public abstract String getBuildToolsVersion(); |
| |
| public abstract boolean getAaptSupportsMainDexGeneration(); |
| |
| public abstract Artifact getFrameworkAidl(); |
| |
| public abstract Artifact getAndroidJar(); |
| |
| public abstract Artifact getShrinkedAndroidJar(); |
| |
| /** |
| * Returns the set of jack files to be used as a base classpath for jack compilation of Android |
| * rules, typically a Jack translation of the jar returned by {@link getAndroidJar}. |
| */ |
| public abstract NestedSet<Artifact> getAndroidBaseClasspathForJack(); |
| |
| /** |
| * Returns the set of jack files to be used as a base classpath for jack compilation of Java |
| * rules, typically a Jack translation of the jars in the Java bootclasspath. |
| */ |
| public abstract NestedSet<Artifact> getJavaBaseClasspathForJack(); |
| |
| public abstract Artifact getAnnotationsJar(); |
| |
| public abstract Artifact getMainDexClasses(); |
| |
| public abstract FilesToRunProvider getAdb(); |
| |
| public abstract FilesToRunProvider getDx(); |
| |
| public abstract FilesToRunProvider getMainDexListCreator(); |
| |
| public abstract FilesToRunProvider getAidl(); |
| |
| public abstract FilesToRunProvider getAapt(); |
| |
| public abstract FilesToRunProvider getApkBuilder(); |
| |
| @Nullable |
| public abstract FilesToRunProvider getApkSigner(); |
| |
| public abstract FilesToRunProvider getProguard(); |
| |
| public abstract FilesToRunProvider getZipalign(); |
| |
| public abstract FilesToRunProvider getJack(); |
| |
| public abstract FilesToRunProvider getJill(); |
| |
| public abstract FilesToRunProvider getResourceExtractor(); |
| |
| AndroidSdkProvider() {} |
| } |