Add flag to compress all Java resources before bundling them into the APK. RELNOTES: Add --experimental_android_compress_java_resources flag to store java resources as compressed inside the APK. PiperOrigin-RevId: 151825809
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java index 2cd2cee..1f45101 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java
@@ -438,6 +438,13 @@ help = "Use SingleJar to combine all ProGuard library jars.") public boolean useSingleJarForProguardLibraryJars; + @Option(name = "experimental_android_compress_java_resources", + defaultValue = "false", + category = "undocumented", + implicitRequirements = "--use_singlejar_apkbuilder", + help = "Compress Java resources in APKs") + public boolean compressJavaResources; + @Override public void addAllLabels(Multimap<String, Label> labelMap) { if (androidCrosstoolTop != null) { @@ -521,6 +528,7 @@ private final boolean useSingleJarForMultidex; private final ResourceFilter resourceFilter; private final boolean useSingleJarForProguardLibraryJars; + private final boolean compressJavaResources; AndroidConfiguration(Options options, Label androidSdk) { this.sdk = androidSdk; @@ -552,6 +560,7 @@ this.useSingleJarForProguardLibraryJars = options.useSingleJarForProguardLibraryJars; this.useRexToCompressDexFiles = options.useRexToCompressDexFiles; this.resourceFilter = options.resourceFilter; + this.compressJavaResources = options.compressJavaResources; } public String getCpu() { @@ -663,6 +672,10 @@ return useSingleJarForProguardLibraryJars; } + boolean compressJavaResources() { + return compressJavaResources; + } + @Override public void addGlobalMakeVariables(ImmutableMap.Builder<String, String> globalMakeEnvBuilder) { globalMakeEnvBuilder.put("ANDROID_CPU", cpu);
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 c552a5f..5ce97b1 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
@@ -298,8 +298,6 @@ } } - ruleContext.registerAction(compressedApkActionBuilder.build(ruleContext)); - SpawnAction.Builder singleJarActionBuilder = new SpawnAction.Builder() .setMnemonic("ApkBuilder") .setProgressMessage(message) @@ -325,9 +323,15 @@ .addOutputArgument(extractedJavaResourceZip) .build(ruleContext)); - singleJarActionBuilder - .addArgument("--sources") - .addInputArgument(extractedJavaResourceZip); + if (ruleContext.getFragment(AndroidConfiguration.class).compressJavaResources()) { + compressedApkActionBuilder + .addArgument("--sources") + .addInputArgument(extractedJavaResourceZip); + } else { + singleJarActionBuilder + .addArgument("--sources") + .addInputArgument(extractedJavaResourceZip); + } } if (nativeLibs.getName() != null) { @@ -354,6 +358,7 @@ } } + ruleContext.registerAction(compressedApkActionBuilder.build(ruleContext)); ruleContext.registerAction(singleJarActionBuilder.build(ruleContext)); }
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBuildViewTestCase.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBuildViewTestCase.java index fe53a86..2811cb6 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBuildViewTestCase.java +++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBuildViewTestCase.java
@@ -104,6 +104,10 @@ target.getProvider(FileProvider.class).getFilesToBuild(), "_unsigned.apk"); } + protected SpawnAction getFinalUnsignedApkAction(ConfiguredTarget target) { + return getGeneratingSpawnAction(getFinalUnsignedApk(target)); + } + protected Artifact getResourceApk(ConfiguredTarget target) { Artifact resourceApk = getFirstArtifactEndingWith(