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.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/ResourceShrinkerActionBuilder.java12
-rw-r--r--src/tools/android/java/com/google/devtools/build/android/ResourceShrinker.java31
-rw-r--r--src/tools/android/java/com/google/devtools/build/android/ResourceShrinkerAction.java10
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",