Set ClassFileConsumer to emit resources before class resources

Bug: b/213552119
Change-Id: Ic212cf1a62b478dd8a6d86bdab9aade26aacac70
diff --git a/src/main/java/com/android/tools/r8/androidapi/AndroidApiDataAccess.java b/src/main/java/com/android/tools/r8/androidapi/AndroidApiDataAccess.java
index 37acc4d..d1a39f3 100644
--- a/src/main/java/com/android/tools/r8/androidapi/AndroidApiDataAccess.java
+++ b/src/main/java/com/android/tools/r8/androidapi/AndroidApiDataAccess.java
@@ -30,6 +30,10 @@
   private static final int PAYLOAD_OFFSET_WITH_LENGTH = 4 + 2;
   private static final byte ZERO_BYTE = (byte) 0;
 
+  public static String getResourceName() {
+    return RESOURCE_NAME;
+  }
+
   private static class PositionAndLength {
 
     private static PositionAndLength EMPTY = new PositionAndLength(0, 0);
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 9d8cedd..004d43e 100644
--- a/src/main/java/com/android/tools/r8/utils/ZipUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/ZipUtils.java
@@ -11,6 +11,7 @@
 import com.android.tools.r8.DataEntryResource;
 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.google.common.io.ByteStreams;
 import com.google.common.io.Closer;
@@ -50,6 +51,16 @@
       Closer closer,
       ZipOutputStream out)
       throws IOException, ResourceException {
+    String resourceName = AndroidApiDataAccess.getResourceName();
+    for (DataEntryResource dataResource : dataResources) {
+      String entryName = dataResource.getName();
+      byte[] bytes = ByteStreams.toByteArray(closer.register(dataResource.getByteStream()));
+      writeToZipStream(
+          out,
+          entryName,
+          bytes,
+          entryName.equals(resourceName) ? ZipEntry.STORED : ZipEntry.DEFLATED);
+    }
     for (ProgramResource resource : resources) {
       assert resource.getClassDescriptors().size() == 1;
       Iterator<String> iterator = resource.getClassDescriptors().iterator();
@@ -58,11 +69,6 @@
       byte[] bytes = ByteStreams.toByteArray(closer.register(resource.getByteStream()));
       writeToZipStream(out, entryName, bytes, ZipEntry.DEFLATED);
     }
-    for (DataEntryResource dataResource : dataResources) {
-      String entryName = dataResource.getName();
-      byte[] bytes = ByteStreams.toByteArray(closer.register(dataResource.getByteStream()));
-      writeToZipStream(out, entryName, bytes, ZipEntry.DEFLATED);
-    }
   }
 
   public interface OnEntryHandler {