aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/android
diff options
context:
space:
mode:
authorGravatar ajmichael <ajmichael@google.com>2017-06-29 04:14:19 +0200
committerGravatar Marcel Hlopko <hlopko@google.com>2017-06-29 09:34:03 +0200
commit393e843eabac50c01e245ca6c357c10085d08b5b (patch)
treebd758100d203779ef92f52c35badc15047a33a3c /src/main/java/com/google/devtools/build/lib/rules/android
parentb5873507768ae6a3995480dc820ab904841d2a9a (diff)
Remove resource_extractor from android_sdk rule.
resource_extractor has nothing to do with the Android SDK. Once upon a time, it was needed for jack support, so it was colocated with the jack attributes in android_sdk. Nowadays, it is used as a necessary step before singlejar can run to build the APK. RELNOTES: None PiperOrigin-RevId: 160479247
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/android')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java14
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdk.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkProvider.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/ApkActionsBuilder.java28
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/ApkManifestAction.java8
6 files changed, 34 insertions, 37 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java
index efe7c54973..28d635d4a2 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java
@@ -532,11 +532,13 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
Artifact zipAlignedApk =
ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_BINARY_APK);
Artifact signingKey = androidSemantics.getApkDebugSigningKey(ruleContext);
+ FilesToRunProvider resourceExtractor =
+ ruleContext.getExecutablePrerequisite("$resource_extractor", Mode.HOST);
ApkActionsBuilder.create("apk")
.setClassesDex(finalDexes)
.addInputZip(resourceApk.getArtifact())
- .setJavaResourceZip(dexingOutput.javaResourceJar)
+ .setJavaResourceZip(dexingOutput.javaResourceJar, resourceExtractor)
.addInputZips(nativeLibsZips)
.setNativeLibs(nativeLibs)
.setUnsignedApk(unsignedApk)
@@ -598,7 +600,7 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
ApkActionsBuilder.create("incremental apk")
.setClassesDex(stubDex)
.addInputZip(incrementalResourceApk.getArtifact())
- .setJavaResourceZip(dexingOutput.javaResourceJar)
+ .setJavaResourceZip(dexingOutput.javaResourceJar, resourceExtractor)
.addInputZips(nativeLibsZips)
.setJavaResourceFile(stubData)
.setSignedApk(incrementalApk)
@@ -693,7 +695,7 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory {
Artifact javaSplitApk = getDxArtifact(ruleContext, "java_resources.apk");
ApkActionsBuilder.create("split Java resource apk")
.addInputZip(javaSplitApkResources)
- .setJavaResourceZip(dexingOutput.javaResourceJar)
+ .setJavaResourceZip(dexingOutput.javaResourceJar, resourceExtractor)
.setSignedApk(javaSplitApk)
.setSigningKey(signingKey)
.registerActions(ruleContext);
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 3fd71a9867..9566dd3dc0 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
@@ -396,12 +396,7 @@ public final class AndroidRuleClasses {
.add(attr("apkbuilder", LABEL).cfg(HOST).allowedFileTypes(ANY_FILE).exec())
.add(attr("apksigner", LABEL).mandatory().cfg(HOST).allowedFileTypes(ANY_FILE).exec())
.add(attr("zipalign", LABEL).mandatory().cfg(HOST).allowedFileTypes(ANY_FILE).exec())
- .add(
- attr("resource_extractor", LABEL)
- .cfg(HOST)
- .allowedFileTypes(ANY_FILE)
- .exec()
- .mandatory())
+ .add(attr("resource_extractor", LABEL).cfg(HOST).allowedFileTypes(ANY_FILE).exec())
.add(
attr(":java_toolchain", LABEL)
.useOutputLicenses()
@@ -908,6 +903,13 @@ public final class AndroidRuleClasses {
.nonconfigurable("defines an aspect of configuration")
.mandatoryProviders(
ImmutableList.of(ConfigFeatureFlagProvider.SKYLARK_IDENTIFIER)))
+ // The resource extractor is used at the binary level to extract java resources from the
+ // deploy jar so that they can be added to the APK.
+ .add(
+ attr("$resource_extractor", LABEL)
+ .cfg(HOST)
+ .exec()
+ .value(env.getToolsLabel("//tools/android:resource_extractor")))
.advertiseProvider(JavaCompilationArgsProvider.class)
.build();
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdk.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdk.java
index 164989c8a2..4d1f89fb62 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdk.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdk.java
@@ -56,8 +56,6 @@ public class AndroidSdk implements RuleConfiguredTargetFactory {
FilesToRunProvider mainDexListCreator = ruleContext.getExecutablePrerequisite(
"main_dex_list_creator", Mode.HOST);
FilesToRunProvider zipalign = ruleContext.getExecutablePrerequisite("zipalign", Mode.HOST);
- FilesToRunProvider resourceExtractor =
- ruleContext.getExecutablePrerequisite("resource_extractor", Mode.HOST);
Artifact frameworkAidl = ruleContext.getPrerequisiteArtifact("framework_aidl", Mode.HOST);
TransitiveInfoCollection aidlLib = ruleContext.getPrerequisite("aidl_lib", Mode.TARGET);
Artifact androidJar = ruleContext.getPrerequisiteArtifact("android_jar", Mode.HOST);
@@ -90,8 +88,7 @@ public class AndroidSdk implements RuleConfiguredTargetFactory {
apkBuilder,
apkSigner,
proguard,
- zipalign,
- resourceExtractor))
+ zipalign))
.addProvider(RunfilesProvider.class, RunfilesProvider.EMPTY)
.setFilesToBuild(NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER))
.build();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkProvider.java
index 30880f0e5d..0a73a954f5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSdkProvider.java
@@ -45,8 +45,7 @@ public abstract class AndroidSdkProvider implements TransitiveInfoProvider {
@Nullable FilesToRunProvider apkBuilder,
FilesToRunProvider apkSigner,
FilesToRunProvider proguard,
- FilesToRunProvider zipalign,
- FilesToRunProvider resourceExtractor) {
+ FilesToRunProvider zipalign) {
return new AutoValue_AndroidSdkProvider(
buildToolsVersion,
@@ -65,8 +64,7 @@ public abstract class AndroidSdkProvider implements TransitiveInfoProvider {
apkBuilder,
apkSigner,
proguard,
- zipalign,
- resourceExtractor);
+ zipalign);
}
/**
@@ -133,7 +131,5 @@ public abstract class AndroidSdkProvider implements TransitiveInfoProvider {
public abstract FilesToRunProvider getZipalign();
- public abstract FilesToRunProvider getResourceExtractor();
-
AndroidSdkProvider() {}
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ApkActionsBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/ApkActionsBuilder.java
index 7734c34292..5f8e1de21b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/ApkActionsBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/ApkActionsBuilder.java
@@ -15,6 +15,7 @@ package com.google.devtools.build.lib.rules.android;
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.actions.Artifact;
+import com.google.devtools.build.lib.analysis.FilesToRunProvider;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.Runfiles;
import com.google.devtools.build.lib.analysis.RunfilesSupplierImpl;
@@ -38,6 +39,7 @@ public class ApkActionsBuilder {
private Artifact classesDex;
private ImmutableList.Builder<Artifact> inputZips = new ImmutableList.Builder<>();
private Artifact javaResourceZip;
+ private FilesToRunProvider resourceExtractor;
private Artifact javaResourceFile;
private NativeLibs nativeLibs = NativeLibs.EMPTY;
private Artifact unsignedApk;
@@ -86,14 +88,13 @@ public class ApkActionsBuilder {
}
/**
- * Sets the file where Java resources are taken.
- *
- * <p>The contents of this zip will will be put directly into the APK except for files that are
- * filtered out by the {@link com.android.sdklib.build.ApkBuilder} which seem to not be resources,
- * e.g. files with the extension {@code .class}.
+ * Adds a zip to be added to the APK and an executable that filters the zip to extract the
+ * relevant contents first.
*/
- public ApkActionsBuilder setJavaResourceZip(Artifact javaResourceZip) {
+ public ApkActionsBuilder setJavaResourceZip(
+ Artifact javaResourceZip, FilesToRunProvider resourceExtractor) {
this.javaResourceZip = javaResourceZip;
+ this.resourceExtractor = resourceExtractor;
return this;
}
@@ -299,13 +300,14 @@ public class ApkActionsBuilder {
// The javaResourceZip contains many files that are unwanted in the APK such as .class files.
Artifact extractedJavaResourceZip =
AndroidBinary.getDxArtifact(ruleContext, "extracted_" + javaResourceZip.getFilename());
- ruleContext.registerAction(new SpawnAction.Builder()
- .setExecutable(AndroidSdkProvider.fromRuleContext(ruleContext).getResourceExtractor())
- .setMnemonic("ResourceExtractor")
- .setProgressMessage("Extracting Java resources from deploy jar for " + apkName)
- .addInputArgument(javaResourceZip)
- .addOutputArgument(extractedJavaResourceZip)
- .build(ruleContext));
+ ruleContext.registerAction(
+ new SpawnAction.Builder()
+ .setExecutable(resourceExtractor)
+ .setMnemonic("ResourceExtractor")
+ .setProgressMessage("Extracting Java resources from deploy jar for " + apkName)
+ .addInputArgument(javaResourceZip)
+ .addOutputArgument(extractedJavaResourceZip)
+ .build(ruleContext));
if (ruleContext.getFragment(AndroidConfiguration.class).compressJavaResources()) {
compressedApkActionBuilder
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ApkManifestAction.java b/src/main/java/com/google/devtools/build/lib/rules/android/ApkManifestAction.java
index e153a60c41..6461a03db0 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/ApkManifestAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/ApkManifestAction.java
@@ -56,7 +56,6 @@ public final class ApkManifestAction extends AbstractFileWriteAction {
.add(sdk.getMainDexClasses())
.add(sdk.getMainDexListCreator().getExecutable())
.add(sdk.getProguard().getExecutable())
- .add(sdk.getResourceExtractor().getExecutable())
.add(sdk.getShrinkedAndroidJar())
.add(sdk.getZipalign().getExecutable())
.addAll(jars)
@@ -79,7 +78,7 @@ public final class ApkManifestAction extends AbstractFileWriteAction {
/**
* @param owner The action owner.
* @param outputFile The artifact to write the proto to.
- * @param textOutput Whether to make the
+ * @param textOutput Whether to write the output as a text proto.
* @param sdk The Android SDK.
* @param jars All the jars that would be merged and dexed and put into an APK.
* @param resourceApk The ResourceApk for the .ap_ that contains the resources that would go into
@@ -220,11 +219,11 @@ public final class ApkManifestAction extends AbstractFileWriteAction {
private String getArtifactPath(Artifact artifact) {
return artifact.getExecPathString();
}
-
+
private String getArtifactPath(FilesToRunProvider filesToRunProvider) {
return filesToRunProvider.getExecutable().getExecPathString();
}
-
+
private ApkManifestOuterClass.AndroidSdk createAndroidSdk(AndroidSdkProvider sdk) {
ApkManifestOuterClass.AndroidSdk.Builder sdkProto =
@@ -240,7 +239,6 @@ public final class ApkManifestAction extends AbstractFileWriteAction {
sdkProto.setMainDexClasses(getArtifactPath(sdk.getMainDexClasses()));
sdkProto.setMainDexListCreator(getArtifactPath(sdk.getMainDexListCreator()));
sdkProto.setProguard(getArtifactPath(sdk.getProguard()));
- sdkProto.setResourceExtractor(getArtifactPath(sdk.getResourceExtractor()));
sdkProto.setShrinkedAndroidJar(getArtifactPath(sdk.getShrinkedAndroidJar()));
sdkProto.setZipalign(getArtifactPath(sdk.getZipalign()));
sdkProto.setBuildToolsVersion(sdk.getBuildToolsVersion());