[ApiModel] Use stored mode for database in archive builder

Bug: b/213552119
Change-Id: I39ad97d8dd88541eac8d565ddad827e613e9dd3e
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 d1a39f3..ada88b6 100644
--- a/src/main/java/com/android/tools/r8/androidapi/AndroidApiDataAccess.java
+++ b/src/main/java/com/android/tools/r8/androidapi/AndroidApiDataAccess.java
@@ -30,8 +30,8 @@
   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;
+  public static boolean isApiDatabaseEntry(String entry) {
+    return RESOURCE_NAME.equals(entry);
   }
 
   private static class PositionAndLength {
diff --git a/src/main/java/com/android/tools/r8/utils/ArchiveBuilder.java b/src/main/java/com/android/tools/r8/utils/ArchiveBuilder.java
index 9a521fb..a50dbb9 100644
--- a/src/main/java/com/android/tools/r8/utils/ArchiveBuilder.java
+++ b/src/main/java/com/android/tools/r8/utils/ArchiveBuilder.java
@@ -9,6 +9,7 @@
 import com.android.tools.r8.DataResource;
 import com.android.tools.r8.DiagnosticsHandler;
 import com.android.tools.r8.ResourceException;
+import com.android.tools.r8.androidapi.AndroidApiDataAccess;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.origin.PathOrigin;
 import com.google.common.io.ByteStreams;
@@ -133,7 +134,11 @@
     try (InputStream in = content.getByteStream()) {
       ByteDataView view = ByteDataView.of(ByteStreams.toByteArray(in));
       synchronized (this) {
-        delayedWrites.add(DelayedData.createFile(name, view));
+        if (AndroidApiDataAccess.isApiDatabaseEntry(name)) {
+          writeFileNow(name, view, handler);
+        } else {
+          delayedWrites.add(DelayedData.createFile(name, view));
+        }
       }
     } catch (IOException e) {
       handleIOException(e, handler);
@@ -150,7 +155,11 @@
 
   private void writeFileNow(String name, ByteDataView content, DiagnosticsHandler handler) {
     try {
-      ZipUtils.writeToZipStream(getStream(), name, content, ZipEntry.DEFLATED);
+      ZipUtils.writeToZipStream(
+          getStream(),
+          name,
+          content,
+          AndroidApiDataAccess.isApiDatabaseEntry(name) ? ZipEntry.STORED : ZipEntry.DEFLATED);
     } catch (IOException e) {
       handleIOException(e, handler);
     }
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 004d43e..b3808a7 100644
--- a/src/main/java/com/android/tools/r8/utils/ZipUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/ZipUtils.java
@@ -51,7 +51,6 @@
       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()));
@@ -59,7 +58,7 @@
           out,
           entryName,
           bytes,
-          entryName.equals(resourceName) ? ZipEntry.STORED : ZipEntry.DEFLATED);
+          AndroidApiDataAccess.isApiDatabaseEntry(entryName) ? ZipEntry.STORED : ZipEntry.DEFLATED);
     }
     for (ProgramResource resource : resources) {
       assert resource.getClassDescriptors().size() == 1;