aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-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
-rw-r--r--src/main/protobuf/apk_manifest.proto3
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java1
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java22
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/android/AndroidLibraryTest.java6
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/android/ApkManifestActionTest.java3
11 files changed, 49 insertions, 57 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());
diff --git a/src/main/protobuf/apk_manifest.proto b/src/main/protobuf/apk_manifest.proto
index f638450381..2f8b25b41d 100644
--- a/src/main/protobuf/apk_manifest.proto
+++ b/src/main/protobuf/apk_manifest.proto
@@ -41,14 +41,13 @@ message AndroidSdk {
string main_dex_classes = 11;
string main_dex_list_creator = 12;
string proguard = 13;
- string resource_extractor = 14;
string shrinked_android_jar = 15;
string zipalign = 16;
string build_tools_version = 17; // assume latest if not set
string apksigner = 18;
// Deprecated tag numbers.
- reserved 6, 9, 10;
+ reserved 6, 9, 10, 14;
}
// Information about a resource referenced from AndroidManifest.xml.
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java b/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java
index 151466a026..cb6e0c667a 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/mock/BazelAnalysisMock.java
@@ -187,7 +187,6 @@ public final class BazelAnalysisMock extends AnalysisMock {
" main_dex_classes = ':mainDexClasses.rules',",
" main_dex_list_creator = ':main_dex_list_creator',",
" proguard = ':ProGuard',",
- " resource_extractor = ':resource_extractor',",
" shrinked_android_jar = ':shrinkedAndroid.jar',",
" zipalign = ':zipalign',",
")",
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java
index 58086d46da..3ed9a39ee1 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBinaryTest.java
@@ -432,7 +432,6 @@ public class AndroidBinaryTest extends AndroidBuildViewTestCase {
" proguard = 'proguard',",
" shrinked_android_jar = 'shrinked_android_jar',",
" zipalign = 'zipalign',",
- " resource_extractor = 'resource_extractor'",
")",
"java_library(",
" name = 'aidl_runtime',",
@@ -492,7 +491,6 @@ public class AndroidBinaryTest extends AndroidBuildViewTestCase {
" proguard = 'proguard',",
" shrinked_android_jar = 'shrinked_android_jar',",
" zipalign = 'zipalign',",
- " resource_extractor = 'resource_extractor'",
")",
"java_library(",
" name = 'aidl_runtime',",
@@ -665,7 +663,8 @@ public class AndroidBinaryTest extends AndroidBuildViewTestCase {
private void actualSignerToolTests(String apkSigningMethod, String signV1, String signV2)
throws Exception {
- scratch.file("sdk/BUILD",
+ scratch.file(
+ "sdk/BUILD",
"android_sdk(",
" name = 'sdk',",
" aapt = 'aapt',",
@@ -680,8 +679,7 @@ public class AndroidBinaryTest extends AndroidBuildViewTestCase {
" main_dex_list_creator = 'main_dex_list_creator',",
" proguard = 'proguard',",
" shrinked_android_jar = 'shrinked_android_jar',",
- " zipalign = 'zipalign',",
- " resource_extractor = 'resource_extractor')");
+ " zipalign = 'zipalign')");
scratch.file("java/com/google/android/hello/BUILD",
"android_binary(name = 'hello',",
" srcs = ['Foo.java'],",
@@ -2145,7 +2143,8 @@ public class AndroidBinaryTest extends AndroidBuildViewTestCase {
@Test
public void testMainDexListWithAndroidSdk() throws Exception {
- scratch.file("sdk/BUILD",
+ scratch.file(
+ "sdk/BUILD",
"android_sdk(",
" name = 'sdk',",
" aapt = 'aapt',",
@@ -2160,8 +2159,7 @@ public class AndroidBinaryTest extends AndroidBuildViewTestCase {
" main_dex_list_creator = 'main_dex_list_creator',",
" proguard = 'proguard',",
" shrinked_android_jar = 'shrinked_android_jar',",
- " zipalign = 'zipalign',",
- " resource_extractor = 'resource_extractor')");
+ " zipalign = 'zipalign')");
scratch.file("java/a/BUILD",
"android_binary(",
@@ -2181,7 +2179,8 @@ public class AndroidBinaryTest extends AndroidBuildViewTestCase {
@Test
public void testMainDexAaptGenerationSupported() throws Exception {
- scratch.file("sdk/BUILD",
+ scratch.file(
+ "sdk/BUILD",
"android_sdk(",
" name = 'sdk',",
" build_tools_version = '24.0.0',",
@@ -2197,8 +2196,7 @@ public class AndroidBinaryTest extends AndroidBuildViewTestCase {
" main_dex_list_creator = 'main_dex_list_creator',",
" proguard = 'proguard',",
" shrinked_android_jar = 'shrinked_android_jar',",
- " zipalign = 'zipalign',",
- " resource_extractor = 'resource_extractor')");
+ " zipalign = 'zipalign')");
scratch.file("java/a/BUILD",
"android_binary(",
@@ -2889,7 +2887,7 @@ public class AndroidBinaryTest extends AndroidBuildViewTestCase {
.containsAllOf("--nocompress_suffixes", ".apk", ".so")
.inOrder();
}
-
+
@Test
public void testAndroidBinaryWithTestOnlySetsTestOnly() throws Exception {
scratch.file(
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidLibraryTest.java
index 7ba05dafc2..ab4a1c1eac 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidLibraryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidLibraryTest.java
@@ -567,7 +567,8 @@ public class AndroidLibraryTest extends AndroidBuildViewTestCase {
@Test
public void testAidlLibAddsProguardSpecs() throws Exception {
- scratch.file("sdk/BUILD",
+ scratch.file(
+ "sdk/BUILD",
"android_sdk(name = 'sdk',",
" aapt = 'aapt',",
" adb = 'adb',",
@@ -582,8 +583,7 @@ public class AndroidLibraryTest extends AndroidBuildViewTestCase {
" main_dex_list_creator = 'main_dex_list_creator',",
" proguard = 'proguard',",
" shrinked_android_jar = 'shrinked_android_jar',",
- " zipalign = 'zipalign',",
- " resource_extractor = 'resource_extractor')",
+ " zipalign = 'zipalign')",
"java_library(name = 'aidl_lib',",
" srcs = ['AidlLib.java'],",
" proguard_specs = ['aidl_lib.cfg'])");
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/ApkManifestActionTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/ApkManifestActionTest.java
index 4abdc5c4e7..2c68717cb3 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/ApkManifestActionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/ApkManifestActionTest.java
@@ -67,8 +67,7 @@ public class ApkManifestActionTest {
null, // apkBuilder, optional
createFilesToRunProvider("apkSigner"),
createFilesToRunProvider("proguard"),
- createFilesToRunProvider("zipalign"),
- createFilesToRunProvider("resourceExtractor"));
+ createFilesToRunProvider("zipalign"));
Iterable<Artifact> jars1 = ImmutableList.of(
createArtifact("/workspace/java/test/output_jar1"),