[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;