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 {