diff options
author | 2016-05-09 19:20:23 +0000 | |
---|---|---|
committer | 2016-05-10 07:57:05 +0000 | |
commit | b64150de45415f3871e1de0a2c182636567b9225 (patch) | |
tree | e5add17ada45b0a4da7480da14868b78622f4846 /src/main/java/com/google/devtools/build/lib | |
parent | 92a3a811330d296c4801c43627c72b76900c8181 (diff) |
Avoid generating an ap_ file for android_library
Saves roughly 200ms per aapt invocation, when aapt is only used
for validation of resources.
--
MOS_MIGRATED_REVID=121863470
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
6 files changed, 23 insertions, 25 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java index eae49fb328..e3fe0b4256 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java @@ -81,7 +81,7 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory { return null; } resourceApk = applicationManifest.packWithDataAndResources( - ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_RESOURCES_APK), + null, /* resourceApk -- not needed for library */ ruleContext, true, /* isLibrary */ ResourceDependencies.fromRuleDeps(ruleContext, JavaCommon.isNeverLink(ruleContext)), @@ -148,14 +148,12 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory { aar = null; ApplicationManifest applicationManifest = ApplicationManifest.generatedManifest(ruleContext); - Artifact apk = ruleContext.getImplicitOutputArtifact( - AndroidRuleClasses.ANDROID_RESOURCES_APK); - String javaPackage = AndroidCommon.getJavaPackage(ruleContext); ResourceContainer resourceContainer = new ResourceContainer(ruleContext.getLabel(), javaPackage, null /* renameManifestPackage */, false /* inlinedConstants */, - apk, applicationManifest.getManifest(), + null /* resourceApk -- not needed for library */, + applicationManifest.getManifest(), ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_JAVA_SOURCE_JAR), ImmutableList.<Artifact>of(), ImmutableList.<Artifact>of(), ImmutableList.<PathFragment>of(), ImmutableList.<PathFragment>of(), @@ -164,7 +162,6 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory { primaryResources = new AndroidResourcesProcessorBuilder(ruleContext) .setLibrary(true) - .setApkOut(apk) .setRTxtOut(resourceContainer.getRTxt()) .setManifestOut(ruleContext.getImplicitOutputArtifact( AndroidRuleClasses.ANDROID_PROCESSED_MANIFEST)) diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceContainerBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceContainerBuilder.java index 1c13632e96..c1011d90ac 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceContainerBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceContainerBuilder.java @@ -55,19 +55,20 @@ public final class AndroidResourceContainerBuilder { /** Creates a {@link ResourceContainer} from a {@link RuleContext}. * @throws InterruptedException */ - public ResourceContainer buildFromRule(RuleContext ruleContext, Artifact apk) + public ResourceContainer buildFromRule(RuleContext ruleContext, @Nullable Artifact apk) throws InterruptedException { Preconditions.checkNotNull(this.manifest); Preconditions.checkNotNull(this.data); + Artifact rJavaSrcJar = ruleContext.getImplicitOutputArtifact( + AndroidRuleClasses.ANDROID_JAVA_SOURCE_JAR); return new AndroidResourcesProvider.ResourceContainer( ruleContext.getLabel(), - getJavaPackage(ruleContext, apk), + getJavaPackage(ruleContext, rJavaSrcJar), getRenameManifestPackage(ruleContext), inlineConstants, apk, manifest, - ruleContext.getImplicitOutputArtifact( - AndroidRuleClasses.ANDROID_JAVA_SOURCE_JAR), + rJavaSrcJar, data.getAssets(), data.getResources(), data.getAssetRoots(), @@ -77,18 +78,18 @@ public final class AndroidResourceContainerBuilder { symbolsFile); } - private String getJavaPackage(RuleContext ruleContext, Artifact apk) { + private String getJavaPackage(RuleContext ruleContext, Artifact rJavaSrcJar) { if (hasCustomPackage(ruleContext)) { return ruleContext.attributes().get("custom_package", Type.STRING); } // TODO(bazel-team): JavaUtil.getJavaPackageName does not check to see if the path is valid. // So we need to check for the JavaRoot. - if (JavaUtil.getJavaRoot(apk.getExecPath()) == null) { + if (JavaUtil.getJavaRoot(rJavaSrcJar.getExecPath()) == null) { ruleContext.ruleError("You must place your code under a directory named 'java' or " + "'javatests' for blaze to work. That directory (java,javatests) will be treated as " + "your java source root. Alternatively, you can set the 'custom_package' attribute."); } - return JavaUtil.getJavaPackageName(apk.getExecPath()); + return JavaUtil.getJavaPackageName(rJavaSrcJar.getExecPath()); } private boolean hasCustomPackage(RuleContext ruleContext) { diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java index 7967f92934..69754adeb1 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java @@ -389,9 +389,9 @@ public class AndroidResourcesProcessorBuilder { primary.getRenameManifestPackage(), primary.getConstantsInlined(), // If there is no apk to be generated, use the apk from the primary resources. - // All ResourceContainers have to have an apk, but if a new one is not requested to be built - // for this resource processing action (in case of just creating an R.txt or - // proguard merging), reuse the primary resource from the dependencies. + // All android_binary ResourceContainers have to have an apk, but if a new one is not + // requested to be built for this resource processing action (in case of just creating an + // R.txt or proguard merging), reuse the primary resource from the dependencies. apkOut != null ? apkOut : primary.getApk(), manifestOut != null ? manifestOut : primary.getManifest(), sourceJarOut, diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProvider.java index 9adf9eb8af..fc423b8caf 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProvider.java @@ -108,8 +108,10 @@ public final class AndroidResourcesProvider implements TransitiveInfoProvider { public ResourceContainer(Label label, String javaPackage, @Nullable String renameManifestPackage, - boolean constantsInlined, Artifact apk, - Artifact manifest, Artifact javaSourceJar, + boolean constantsInlined, + @Nullable Artifact apk, + Artifact manifest, + Artifact javaSourceJar, ImmutableList<Artifact> assets, ImmutableList<Artifact> resources, ImmutableList<PathFragment> assetsRoots, @@ -123,7 +125,7 @@ public final class AndroidResourcesProvider implements TransitiveInfoProvider { this.javaPackage = Preconditions.checkNotNull(javaPackage); this.renameManifestPackage = renameManifestPackage; this.constantsInlined = constantsInlined; - this.apk = Preconditions.checkNotNull(apk); + this.apk = apk; this.manifest = Preconditions.checkNotNull(manifest); this.assets = Preconditions.checkNotNull(assets); this.resources = Preconditions.checkNotNull(resources); diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java index b5a3cd36f1..22ea3ce4b2 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java @@ -314,7 +314,6 @@ public final class AndroidRuleClasses { if (LocalResourceContainer.definesAndroidResources(attributes)) { implicitOutputs.add( AndroidRuleClasses.ANDROID_JAVA_SOURCE_JAR, - AndroidRuleClasses.ANDROID_RESOURCES_APK, AndroidRuleClasses.ANDROID_R_TXT); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java b/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java index 4f992aa0a7..4eace34227 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java @@ -237,11 +237,9 @@ public final class ApplicationManifest { null /* Artifact mergedResources */); } - /** Packages up the manifest with resource and assets from the rule and dependent resources. - * @param manifestOut TODO(corysmith): - * @throws InterruptedException */ + /** Packages up the manifest with resource and assets from the rule and dependent resources. */ public ResourceApk packWithDataAndResources( - Artifact resourceApk, + @Nullable Artifact resourceApk, RuleContext ruleContext, boolean isLibrary, ResourceDependencies resourceDeps, @@ -296,7 +294,8 @@ public final class ApplicationManifest { mergedResources); } - private ResourceApk createApk(Artifact resourceApk, + private ResourceApk createApk( + @Nullable Artifact resourceApk, RuleContext ruleContext, boolean isLibrary, ResourceDependencies resourceDeps, |