aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2016-05-09 19:20:23 +0000
committerGravatar Klaus Aehlig <aehlig@google.com>2016-05-10 07:57:05 +0000
commitb64150de45415f3871e1de0a2c182636567b9225 (patch)
treee5add17ada45b0a4da7480da14868b78622f4846 /src/main/java/com/google/devtools/build/lib
parent92a3a811330d296c4801c43627c72b76900c8181 (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')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourceContainerBuilder.java15
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProvider.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java1
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/ApplicationManifest.java9
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,