diff --git a/src/main/java/com/android/tools/r8/ArchiveClassFileProvider.java b/src/main/java/com/android/tools/r8/ArchiveClassFileProvider.java
index 819cbb5..43fbaa1 100644
--- a/src/main/java/com/android/tools/r8/ArchiveClassFileProvider.java
+++ b/src/main/java/com/android/tools/r8/ArchiveClassFileProvider.java
@@ -29,7 +29,6 @@
 import java.util.Set;
 import java.util.function.Predicate;
 import java.util.zip.ZipEntry;
-import java.util.zip.ZipException;
 import java.util.zip.ZipFile;
 
 /**
@@ -116,29 +115,7 @@
 
   @Override
   public void accept(Visitor resourceBrowser) throws ResourceException {
-    try (ZipFile zipFile = FileUtils.createZipFile(archive.toFile(), StandardCharsets.UTF_8)) {
-      final Enumeration<? extends ZipEntry> entries = zipFile.entries();
-      while (entries.hasMoreElements()) {
-        ZipEntry entry = entries.nextElement();
-        String name = entry.getName();
-        if (!ZipUtils.isClassFile(name)) {
-          if (entry.isDirectory()) {
-            resourceBrowser.visit(DataDirectoryResource.fromZip(zipFile, entry));
-          } else {
-            resourceBrowser.visit(DataEntryResource.fromZip(zipFile, entry));
-          }
-        }
-      }
-    } catch (ZipException e) {
-      throw new ResourceException(
-          origin,
-          new CompilationError("Zip error while reading '" + archive + "': " + e.getMessage(), e));
-    } catch (IOException e) {
-      throw new ResourceException(
-          origin,
-          new CompilationError(
-              "I/O exception while reading '" + archive + "': " + e.getMessage(), e));
-    }
+    ZipUtils.visitWithResourceBrowser(archive, origin, resourceBrowser);
   }
 
   private void reopenZipFile() throws IOException {
diff --git a/src/main/java/com/android/tools/r8/utils/ArchiveResourceProvider.java b/src/main/java/com/android/tools/r8/utils/ArchiveResourceProvider.java
index b73119d..b5b9f3e 100644
--- a/src/main/java/com/android/tools/r8/utils/ArchiveResourceProvider.java
+++ b/src/main/java/com/android/tools/r8/utils/ArchiveResourceProvider.java
@@ -5,8 +5,6 @@
 
 import static com.android.tools.r8.utils.FileUtils.isArchive;
 
-import com.android.tools.r8.DataDirectoryResource;
-import com.android.tools.r8.DataEntryResource;
 import com.android.tools.r8.DataResourceProvider;
 import com.android.tools.r8.ProgramResource;
 import com.android.tools.r8.ProgramResource.Kind;
@@ -117,27 +115,7 @@
 
   @Override
   public void accept(Visitor resourceBrowser) throws ResourceException {
-    try (ZipFile zipFile =
-        FileUtils.createZipFile(archive.getPath().toFile(), StandardCharsets.UTF_8)) {
-      final Enumeration<? extends ZipEntry> entries = zipFile.entries();
-      while (entries.hasMoreElements()) {
-        ZipEntry entry = entries.nextElement();
-        String name = entry.getName();
-        if (archive.matchesFile(name) && !isProgramResourceName(name)) {
-          if (entry.isDirectory()) {
-            resourceBrowser.visit(DataDirectoryResource.fromZip(zipFile, entry));
-          } else {
-            resourceBrowser.visit(DataEntryResource.fromZip(zipFile, entry));
-          }
-        }
-      }
-    } catch (ZipException e) {
-      throw new ResourceException(origin, new CompilationError(
-          "Zip error while reading '" + archive + "': " + e.getMessage(), e));
-    } catch (IOException e) {
-      throw new ResourceException(origin, new CompilationError(
-          "I/O exception while reading '" + archive + "': " + e.getMessage(), e));
-    }
+    ZipUtils.visitWithResourceBrowser(archive.getPath(), origin, resourceBrowser);
   }
 
   private boolean isProgramResourceName(String name) {
diff --git a/src/main/java/com/android/tools/r8/utils/InternalArchiveClassFileProvider.java b/src/main/java/com/android/tools/r8/utils/InternalArchiveClassFileProvider.java
index 7685a95..db5a798 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalArchiveClassFileProvider.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalArchiveClassFileProvider.java
@@ -7,8 +7,6 @@
 import static com.android.tools.r8.utils.FileUtils.isArchive;
 
 import com.android.tools.r8.ClassFileResourceProvider;
-import com.android.tools.r8.DataDirectoryResource;
-import com.android.tools.r8.DataEntryResource;
 import com.android.tools.r8.DataResourceProvider;
 import com.android.tools.r8.DiagnosticsHandler;
 import com.android.tools.r8.ProgramResource;
@@ -143,22 +141,6 @@
 
   @Override
   public void accept(Visitor resourceBrowser) throws ResourceException {
-    try {
-      ZipUtils.iterWithZipFile(
-          path,
-          (zipFile, entry) -> {
-            if (!ZipUtils.isClassFile(entry.getName())) {
-              if (entry.isDirectory()) {
-                resourceBrowser.visit(DataDirectoryResource.fromZip(zipFile, entry));
-              } else {
-                resourceBrowser.visit(DataEntryResource.fromZip(zipFile, entry));
-              }
-            }
-          });
-    } catch (IOException e) {
-      throw new ResourceException(
-          origin,
-          new CompilationError("I/O exception while reading '" + path + "': " + e.getMessage(), e));
-    }
+    ZipUtils.visitWithResourceBrowser(path, origin, resourceBrowser);
   }
 }
diff --git a/src/main/java/com/android/tools/r8/utils/ZipUtils.java b/src/main/java/com/android/tools/r8/utils/ZipUtils.java
index fb33e96..253ba73 100644
--- a/src/main/java/com/android/tools/r8/utils/ZipUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/ZipUtils.java
@@ -10,10 +10,12 @@
 import com.android.tools.r8.ByteDataView;
 import com.android.tools.r8.DataDirectoryResource;
 import com.android.tools.r8.DataEntryResource;
+import com.android.tools.r8.DataResourceProvider.Visitor;
 import com.android.tools.r8.ProgramResource;
 import com.android.tools.r8.ResourceException;
 import com.android.tools.r8.androidapi.AndroidApiDataAccess;
 import com.android.tools.r8.errors.CompilationError;
+import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.references.ClassReference;
 import com.google.common.io.ByteStreams;
 import com.google.common.io.Closer;
@@ -44,6 +46,7 @@
 import java.util.stream.StreamSupport;
 import java.util.zip.CRC32;
 import java.util.zip.ZipEntry;
+import java.util.zip.ZipException;
 import java.util.zip.ZipFile;
 import java.util.zip.ZipOutputStream;
 
@@ -392,4 +395,29 @@
     }
     return -1;
   }
+
+  public static void visitWithResourceBrowser(Path path, Origin origin, Visitor resourceBrowser)
+      throws ResourceException {
+    try {
+      ZipUtils.iterWithZipFile(
+          path,
+          (zipFile, entry) -> {
+            if (!ZipUtils.isClassFile(entry.getName())) {
+              if (entry.isDirectory()) {
+                resourceBrowser.visit(DataDirectoryResource.fromZip(zipFile, entry));
+              } else {
+                resourceBrowser.visit(DataEntryResource.fromZip(zipFile, entry));
+              }
+            }
+          });
+    } catch (ZipException e) {
+      throw new ResourceException(
+          origin,
+          new CompilationError("Zip error while reading '" + path + "': " + e.getMessage(), e));
+    } catch (IOException e) {
+      throw new ResourceException(
+          origin,
+          new CompilationError("I/O exception while reading '" + path + "': " + e.getMessage(), e));
+    }
+  }
 }
