diff --git a/src/main/java/com/android/tools/r8/utils/CompileDumpCompatR8.java b/src/main/java/com/android/tools/r8/utils/CompileDumpCompatR8.java
index 86e2e39..a2c973e 100644
--- a/src/main/java/com/android/tools/r8/utils/CompileDumpCompatR8.java
+++ b/src/main/java/com/android/tools/r8/utils/CompileDumpCompatR8.java
@@ -7,10 +7,12 @@
 import com.android.tools.r8.CompilationFailedException;
 import com.android.tools.r8.CompilationMode;
 import com.android.tools.r8.DexIndexedConsumer.ArchiveConsumer;
+import com.android.tools.r8.DiagnosticsHandler;
 import com.android.tools.r8.FeatureSplit;
 import com.android.tools.r8.OutputMode;
 import com.android.tools.r8.R8;
 import com.android.tools.r8.R8Command;
+import com.android.tools.r8.StringConsumer;
 import com.android.tools.r8.utils.compiledump.CompilerCommandDumpUtils;
 import com.android.tools.r8.utils.compiledump.R8PartialDumpUtils;
 import com.android.tools.r8.utils.compiledump.ResourceShrinkerDumpUtils;
@@ -69,7 +71,8 @@
           "--partial-include",
           "--partial-exclude",
           "--threads",
-          "--startup-profile");
+          "--startup-profile",
+          "--android-resources-usage-log");
 
   private static final List<String> VALID_OPTIONS_WITH_TWO_OPERANDS =
       Arrays.asList("--art-profile", "--feature-jar", "--android-resources");
@@ -121,6 +124,7 @@
     List<Path> startupProfileFiles = new ArrayList<>();
     Path androidResourcesInput = null;
     Path androidResourcesOutput = null;
+    StringConsumer androidResourcesUsageLogConsumer = null;
     int minApi = 1;
     int threads = -1;
     BooleanBox enableMissingLibraryApiModeling = new BooleanBox(false);
@@ -229,6 +233,22 @@
               startupProfileFiles.add(Paths.get(operand));
               break;
             }
+          case "--android-resources-usage-log":
+            {
+              if (operand.equals("-") || operand.equals("stdout")) {
+                androidResourcesUsageLogConsumer =
+                    new StringConsumer() {
+                      @Override
+                      public void accept(String string, DiagnosticsHandler handler) {
+                        System.out.print(string);
+                      }
+                    };
+              } else {
+                androidResourcesUsageLogConsumer =
+                    new StringConsumer.FileConsumer(Paths.get(operand));
+              }
+              break;
+            }
           default:
             throw new IllegalArgumentException("Unimplemented option: " + option);
         }
@@ -321,6 +341,15 @@
               ResourceShrinkerDumpUtils.setOptimziedResourceShrinking(
                   optimizedResourceShrinking.get(), commandBuilder),
           "Failed setting optimized resource shrinking flag.");
+      if (optimizedResourceShrinking.get() && androidResourcesUsageLogConsumer != null) {
+        StringConsumer finalConsumer = androidResourcesUsageLogConsumer;
+        runIgnoreMissing(
+            () ->
+                commandBuilder.setResourceShrinkerConfiguration(
+                    b ->
+                        b.enableOptimizedShrinkingWithR8().setDebugConsumer(finalConsumer).build()),
+            "Failed setting optimized resource shrinking log consumer.");
+      }
     }
     if (outputMode != OutputMode.ClassFile) {
       commandBuilder.setMinApiLevel(minApi);
diff --git a/tools/compiledump.py b/tools/compiledump.py
index 3e661ba..4de0444 100755
--- a/tools/compiledump.py
+++ b/tools/compiledump.py
@@ -161,6 +161,12 @@
                         help='Use optimized resource shrinking',
                         default=False,
                         action='store_true')
+    parser.add_argument(
+        '--android-resources-usage-log',
+        '--android_resources_usage_log',
+        help=
+        'File to write resources usage log to (or "-" / "stdout" for stdout)',
+        default=None)
     parser.add_argument('--compilation-mode',
                         '--compilation_mode',
                         help='Run compilation in specified mode',
@@ -797,6 +803,11 @@
                 raise Exception("Proguard map input only supported for D8 dump")
         if is_r8_compiler(compiler) and optimized_resource_shrinking:
             cmd.extend(['--optimized-resource-shrinking'])
+        if is_r8_compiler(compiler) and args.android_resources_usage_log:
+            cmd.extend([
+                '--android-resources-usage-log',
+                args.android_resources_usage_log
+            ])
         if enable_missing_library_api_modeling:
             cmd.extend(['--enable-missing-library-api-modeling'])
         if args.threads:
