diff options
author | 2017-08-29 00:41:40 +0200 | |
---|---|---|
committer | 2017-08-29 13:33:04 +0200 | |
commit | 69ef625b464093aaefd3d8af9e947832d4385211 (patch) | |
tree | cbc8f4c3a8cfce9adc0f89e9269720076a5e7921 /src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java | |
parent | a4c0e1a84029b2bad2310f7259ba6757fe706ac2 (diff) |
aar_import creates res/values/empty.xml if it contains no resources.
To do this, add a new tool that is used instead of zipper to get the resources out of the AAR. This tool creates res/values/empty.xml if there are no resources in the AAR.
Also, some general cleaning of the code.
RELNOTES: None
PiperOrigin-RevId: 166768607
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java | 60 |
1 files changed, 19 insertions, 41 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java b/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java index 19ff508e3f..61295fc8e6 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AarImport.java @@ -83,13 +83,9 @@ public class AarImport implements RuleConfiguredTargetFactory { ruleContext.registerAction(createSingleFileExtractorActions( ruleContext, aar, ANDROID_MANIFEST, androidManifestArtifact)); - Artifact resourcesManifest = createAarArtifact(ruleContext, "resource_manifest"); - ruleContext.registerAction( - createManifestExtractorActions(ruleContext, aar, "res/.*", resourcesManifest)); - Artifact resources = createAarTreeArtifact(ruleContext, "resources"); ruleContext.registerAction( - createManifestFileEntriesExtractorActions(ruleContext, aar, resourcesManifest, resources)); + createAarResourcesExtractorActions(ruleContext, aar, resources)); ApplicationManifest androidManifest = ApplicationManifest.fromExplicitManifest(ruleContext, androidManifestArtifact); @@ -110,8 +106,7 @@ public class AarImport implements RuleConfiguredTargetFactory { ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_R_TXT), ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_LOCAL_SYMBOLS), ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_PROCESSED_MANIFEST), - resourcesZip, - /* alwaysExportManifest = */ true); + resourcesZip); // There isn't really any use case for building an aar_import target on its own, so the files to // build could be empty. The resources zip and merged jars are added here as a sanity check for @@ -123,8 +118,8 @@ public class AarImport implements RuleConfiguredTargetFactory { Artifact nativeLibs = createAarArtifact(ruleContext, "native_libs.zip"); ruleContext.registerAction(createAarNativeLibsFilterActions(ruleContext, aar, nativeLibs)); - JavaRuleOutputJarsProvider.Builder jarProviderBuilder = new JavaRuleOutputJarsProvider.Builder() - .addOutputJar(mergedJar, null, ImmutableList.<Artifact>of()); + JavaRuleOutputJarsProvider.Builder jarProviderBuilder = + new JavaRuleOutputJarsProvider.Builder().addOutputJar(mergedJar, null, ImmutableList.of()); for (TransitiveInfoCollection export : ruleContext.getPrerequisites("exports", Mode.TARGET)) { for (OutputJar jar : JavaInfo.getProvider(JavaRuleOutputJarsProvider.class, export).getOutputJars()) { @@ -134,13 +129,12 @@ public class AarImport implements RuleConfiguredTargetFactory { } ImmutableList<TransitiveInfoCollection> targets = - ImmutableList.<TransitiveInfoCollection>copyOf( - ruleContext.getPrerequisites("exports", Mode.TARGET)); + ImmutableList.copyOf(ruleContext.getPrerequisites("exports", Mode.TARGET)); JavaCommon common = new JavaCommon( ruleContext, javaSemantics, - /* sources = */ ImmutableList.<Artifact>of(), + /* sources = */ ImmutableList.of(), /* compileDeps = */ targets, /* runtimeDeps = */ targets, /* bothDeps = */ targets); @@ -182,7 +176,7 @@ public class AarImport implements RuleConfiguredTargetFactory { private static Action[] createSingleFileExtractorActions(RuleContext ruleContext, Artifact aar, String filename, Artifact outputArtifact) { return new SpawnAction.Builder() - .setExecutable(ruleContext.getExecutablePrerequisite("$zipper", Mode.HOST)) + .setExecutable(ruleContext.getExecutablePrerequisite(AarImportBaseRule.ZIPPER, Mode.HOST)) .setMnemonic("AarFileExtractor") .setProgressMessage("Extracting %s from %s", filename, aar.getFilename()) .addInput(aar) @@ -196,20 +190,20 @@ public class AarImport implements RuleConfiguredTargetFactory { .build(ruleContext); } - private static Action[] createManifestFileEntriesExtractorActions(RuleContext ruleContext, - Artifact aar, Artifact manifest, Artifact outputTree) { + private static Action[] createAarResourcesExtractorActions( + RuleContext ruleContext, Artifact aar, Artifact outputTree) { return new SpawnAction.Builder() - .setExecutable(ruleContext.getExecutablePrerequisite("$zipper", Mode.HOST)) - .setMnemonic("AarManifestFileEntriesExtractor") + .setExecutable( + ruleContext.getExecutablePrerequisite( + AarImportBaseRule.AAR_RESOURCES_EXTRACTOR, Mode.HOST)) + .setMnemonic("AarResourcesExtractor") .addInput(aar) .addOutput(outputTree) .setCommandLine( CustomCommandLine.builder() - .addExecPath("x", aar) - .addExecPath("-d", outputTree) - .addPrefixedExecPath("@", manifest) + .addExecPath("--input_aar", aar) + .addExecPath("--output_res_dir", outputTree) .build()) - .addInput(manifest) .build(ruleContext); } @@ -217,7 +211,8 @@ public class AarImport implements RuleConfiguredTargetFactory { Artifact aar, Artifact jarsTreeArtifact, Artifact singleJarParamFile) { return new SpawnAction.Builder() .setExecutable( - ruleContext.getExecutablePrerequisite("$aar_embedded_jars_extractor", Mode.HOST)) + ruleContext.getExecutablePrerequisite( + AarImportBaseRule.AAR_EMBEDDED_JARS_EXTACTOR, Mode.HOST)) .setMnemonic("AarEmbeddedJarsExtractor") .setProgressMessage("Extracting classes.jar and libs/*.jar from %s", aar.getFilename()) .addInput(aar) @@ -249,30 +244,13 @@ public class AarImport implements RuleConfiguredTargetFactory { .build(ruleContext); } - private static Action[] createManifestExtractorActions(RuleContext ruleContext, Artifact aar, - String filenameRegexp, Artifact manifest) { - return new SpawnAction.Builder() - .setExecutable(ruleContext.getExecutablePrerequisite("$zip_manifest_creator", Mode.HOST)) - .setMnemonic("ZipManifestCreator") - .setProgressMessage( - "Creating manifest for %s matching %s", aar.getFilename(), filenameRegexp) - .addInput(aar) - .addOutput(manifest) - .setCommandLine( - CustomCommandLine.builder() - .addDynamicString(filenameRegexp) - .addExecPath(aar) - .addExecPath(manifest) - .build()) - .build(ruleContext); - } - private static Action[] createAarNativeLibsFilterActions(RuleContext ruleContext, Artifact aar, Artifact outputZip) { SpawnAction.Builder actionBuilder = new SpawnAction.Builder() .setExecutable( - ruleContext.getExecutablePrerequisite("$aar_native_libs_zip_creator", Mode.HOST)) + ruleContext.getExecutablePrerequisite( + AarImportBaseRule.AAR_NATIVE_LIBS_ZIP_CREATOR, Mode.HOST)) .setMnemonic("AarNativeLibsFilter") .setProgressMessage("Filtering AAR native libs by architecture") .addInput(aar) |