From bab4b04ad09a571615d04aacadf8b3a2b820ba5f Mon Sep 17 00:00:00 2001 From: corysmith Date: Mon, 6 Aug 2018 11:13:07 -0700 Subject: Relink instead of convert proto apks. RELNOTES: None PiperOrigin-RevId: 207575371 --- .../build/android/Aapt2ResourceShrinkingAction.java | 3 ++- .../google/devtools/build/android/ResourcesZip.java | 2 +- .../devtools/build/android/aapt2/ResourceLinker.java | 20 +++++++++----------- 3 files changed, 12 insertions(+), 13 deletions(-) (limited to 'src/tools') diff --git a/src/tools/android/java/com/google/devtools/build/android/Aapt2ResourceShrinkingAction.java b/src/tools/android/java/com/google/devtools/build/android/Aapt2ResourceShrinkingAction.java index 2db283fdca..e9fa1cb338 100644 --- a/src/tools/android/java/com/google/devtools/build/android/Aapt2ResourceShrinkingAction.java +++ b/src/tools/android/java/com/google/devtools/build/android/Aapt2ResourceShrinkingAction.java @@ -95,7 +95,8 @@ public class Aapt2ResourceShrinkingAction { final ResourceLinker linker = ResourceLinker.create( aapt2ConfigOptions.aapt2, executorService, scopedTmp.subDirectoryOf("linking")) - .profileUsing(profiler); + .profileUsing(profiler) + .dependencies(ImmutableList.of(StaticLibrary.from(aapt2ConfigOptions.androidJar))); final Set packages = options diff --git a/src/tools/android/java/com/google/devtools/build/android/ResourcesZip.java b/src/tools/android/java/com/google/devtools/build/android/ResourcesZip.java index 3e1ecda49e..a1c6ab648a 100644 --- a/src/tools/android/java/com/google/devtools/build/android/ResourcesZip.java +++ b/src/tools/android/java/com/google/devtools/build/android/ResourcesZip.java @@ -286,7 +286,7 @@ public class ResourcesZip { ShrunkProtoApk writeBinaryTo(ResourceLinker linker, Path binaryOut, boolean writeAsProto) throws IOException { Files.copy( - writeAsProto ? apk : linker.optimizeApk(linker.convertToBinary(apk)), + writeAsProto ? apk : linker.link(ProtoApk.readFrom(apk)), binaryOut, StandardCopyOption.REPLACE_EXISTING); return this; diff --git a/src/tools/android/java/com/google/devtools/build/android/aapt2/ResourceLinker.java b/src/tools/android/java/com/google/devtools/build/android/aapt2/ResourceLinker.java index 8930883dd8..409a21a824 100644 --- a/src/tools/android/java/com/google/devtools/build/android/aapt2/ResourceLinker.java +++ b/src/tools/android/java/com/google/devtools/build/android/aapt2/ResourceLinker.java @@ -411,7 +411,7 @@ public class ResourceLinker { public PackagedResources link(CompiledResources compiled) { try { - final Path outPath = + final Path linked = workingDirectory.resolve("bin." + (outputAsProto ? PROTO_EXTENSION : BINARY_EXTENSION)); Path rTxt = workingDirectory.resolve("R.txt"); Path proguardConfig = workingDirectory.resolve("proguard.cfg"); @@ -434,8 +434,8 @@ public class ResourceLinker { .add("--manifest", compiled.getManifest()) // Enables resource redefinition and merging .add("--auto-add-overlay") - .when(outputAsProto) - .thenAdd("--proto-format") + // Always link to proto, as resource shrinking needs the extra information. + .add("--proto-format") .when(debug) .thenAdd("--debug-mode") .add("--custom-package", customPackage) @@ -472,7 +472,7 @@ public class ResourceLinker { .add("--proguard-main-dex", mainDexProguard) .when(conditionalKeepRules) .thenAdd("--proguard-conditional-keep-rules") - .add("-o", outPath) + .add("-o", linked) .execute(String.format("Linking %s", compiled.getManifest()))); profiler.recordEndOf("fulllink").startTask("attributes"); @@ -490,10 +490,9 @@ public class ResourceLinker { profiler.recordEndOf("attributes"); if (densities.size() < 2) { - final Path protoApk = convertToProto(outPath); return PackagedResources.of( - outputAsProto ? protoApk : convertToBinary(outPath), // convert proto to apk - protoApk, + outputAsProto ? linked : link(ProtoApk.readFrom(linked)), // convert proto to apk + linked, rTxt, proguardConfig, mainDexProguard, @@ -513,14 +512,13 @@ public class ResourceLinker { .thenAdd("-v") .add("--target-densities", densities.stream().collect(Collectors.joining(","))) .add("-o", optimized) - .add(outPath.toString()) + .add(linked.toString()) .execute(String.format("Optimizing %s", compiled.getManifest()))); profiler.recordEndOf("optimize"); - final Path protoApk = convertToProto(optimized); return PackagedResources.of( - outputAsProto ? protoApk : convertToBinary(optimized), // convert proto to binary - protoApk, + outputAsProto ? optimized : link(ProtoApk.readFrom(optimized)), // convert proto to binary + optimized, rTxt, proguardConfig, mainDexProguard, -- cgit v1.2.3