diff options
Diffstat (limited to 'src')
5 files changed, 51 insertions, 6 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 c1f129d029..082fe72374 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 @@ -1012,6 +1012,8 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { AndroidRuleClasses.ANDROID_RESOURCES_SHRUNK_APK)) .setShrunkResourcesOut(ruleContext.getImplicitOutputArtifact( AndroidRuleClasses.ANDROID_RESOURCES_SHRUNK_ZIP)) + .setLogOut(ruleContext.getImplicitOutputArtifact( + AndroidRuleClasses.ANDROID_RESOURCE_SHRINKER_LOG)) .withResourceFiles(ruleContext.getImplicitOutputArtifact( AndroidRuleClasses.ANDROID_RESOURCES_ZIP)) .withShrunkJar(shrunkJar) 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 2a8d499f40..30d659b870 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 @@ -98,6 +98,8 @@ public final class AndroidRuleClasses { fromTemplates("%{name}_files/resource_files.zip"); public static final SafeImplicitOutputsFunction ANDROID_RESOURCES_SHRUNK_ZIP = fromTemplates("%{name}_files/resource_files_shrunk.zip"); + public static final SafeImplicitOutputsFunction ANDROID_RESOURCE_SHRINKER_LOG = + fromTemplates("%{name}_files/resource_shrinker_log.txt"); public static final SafeImplicitOutputsFunction ANDROID_INCREMENTAL_RESOURCES_APK = fromTemplates("%{name}_files/incremental.ap_"); public static final SafeImplicitOutputsFunction ANDROID_BINARY_APK = diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceShrinkerActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceShrinkerActionBuilder.java index e8a545afe1..8ec9d3c9cf 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceShrinkerActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceShrinkerActionBuilder.java @@ -37,6 +37,7 @@ public class ResourceShrinkerActionBuilder { private ResourceDependencies dependencyResources; private Artifact resourceApkOut; private Artifact shrunkResourcesOut; + private Artifact logOut; private final RuleContext ruleContext; private final SpawnAction.Builder spawnActionBuilder; @@ -123,6 +124,14 @@ public class ResourceShrinkerActionBuilder { return this; } + /** + * @param logOut The location to write the shrinker log. + */ + public ResourceShrinkerActionBuilder setLogOut(Artifact logOut) { + this.logOut = logOut; + return this; + } + public Artifact build() { ImmutableList.Builder<Artifact> inputs = ImmutableList.builder(); ImmutableList.Builder<Artifact> outputs = ImmutableList.builder(); @@ -184,6 +193,9 @@ public class ResourceShrinkerActionBuilder { commandLine.addExecPath("--shrunkResources", shrunkResourcesOut); outputs.add(shrunkResourcesOut); + commandLine.addExecPath("--log", logOut); + outputs.add(logOut); + ruleContext.registerAction(spawnActionBuilder .addTool(sdk.getAapt()) .addInputs(inputs.build()) diff --git a/src/tools/android/java/com/google/devtools/build/android/ResourceShrinker.java b/src/tools/android/java/com/google/devtools/build/android/ResourceShrinker.java index 29c5965132..160c045900 100644 --- a/src/tools/android/java/com/google/devtools/build/android/ResourceShrinker.java +++ b/src/tools/android/java/com/google/devtools/build/android/ResourceShrinker.java @@ -79,6 +79,10 @@ import java.util.IdentityHashMap; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.logging.FileHandler; +import java.util.logging.Formatter; +import java.util.logging.Level; +import java.util.logging.LogRecord; import java.util.logging.Logger; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; @@ -119,14 +123,13 @@ import javax.xml.parsers.ParserConfigurationException; */ public class ResourceShrinker { - private static final Logger logger = Logger.getLogger(ResourceShrinker.class.getName()); - public static final int TYPICAL_RESOURCE_COUNT = 200; private final Set<String> resourcePackages; private final Path rTxt; private final Path classesJar; private final Path mergedManifest; private final Path mergedResourceDir; + private final Logger logger; /** * The computed set of unused resources @@ -158,12 +161,30 @@ public class ResourceShrinker { @NonNull Path rTxt, @NonNull Path classesJar, @NonNull Path manifest, - @NonNull Path resources) { + @NonNull Path resources, + Path logFile) { this.resourcePackages = resourcePackages; this.rTxt = rTxt; this.classesJar = classesJar; this.mergedManifest = manifest; this.mergedResourceDir = resources; + + this.logger = Logger.getLogger(getClass().getName()); + logger.setLevel(Level.FINE); + if (logFile != null) { + try { + FileHandler fileHandler = new FileHandler(logFile.toString()); + fileHandler.setLevel(Level.FINE); + fileHandler.setFormatter(new Formatter(){ + @Override public String format(LogRecord record) { + return record.getMessage() + "\n"; + } + }); + logger.addHandler(fileHandler); + } catch (SecurityException | IOException e) { + logger.warning(String.format("Unable to open '%s' to write log.", logFile)); + } + } } public void shrink(Path destinationDir) throws IOException, @@ -425,8 +446,8 @@ public class ResourceShrinker { roots.add(resource); } } - logger.fine(String.format("The root reachable resources are: %s", - Joiner.on(",\n ").join(roots))); + logger.fine(String.format("The root reachable resources are:\n %s", + Joiner.on(",\n ").join(roots))); Map<Resource, Boolean> seen = new IdentityHashMap<>(resources.size()); for (Resource root : roots) { visit(root, seen); diff --git a/src/tools/android/java/com/google/devtools/build/android/ResourceShrinkerAction.java b/src/tools/android/java/com/google/devtools/build/android/ResourceShrinkerAction.java index 7846844273..1994e8abb9 100644 --- a/src/tools/android/java/com/google/devtools/build/android/ResourceShrinkerAction.java +++ b/src/tools/android/java/com/google/devtools/build/android/ResourceShrinkerAction.java @@ -129,6 +129,13 @@ public class ResourceShrinkerAction { converter = PathConverter.class, help = "Path to where the shrunk resource.ap_ should be written.") public Path shrunkResources; + + @Option(name = "log", + defaultValue = "null", + category = "output", + converter = PathConverter.class, + help = "Path to where the shrinker log should be written.") + public Path log; } private static AaptConfigOptions aaptConfigOptions; @@ -194,7 +201,8 @@ public class ResourceShrinkerAction { options.rTxt, options.shrunkJar, options.primaryManifest, - resourceFiles.resolve("res")); + resourceFiles.resolve("res"), + options.log); resourceShrinker.shrink(shrunkResources); logger.fine(String.format("Shrinking resources finished at %sms", |