Update AndroidAppConsumers to avoid "zip file closed" issue
Bug: 124181030
Change-Id: Ieb898944485cc1aa21790caa2d54444085d778a7
diff --git a/src/main/java/com/android/tools/r8/DexIndexedConsumer.java b/src/main/java/com/android/tools/r8/DexIndexedConsumer.java
index 8731d2a..f174960 100644
--- a/src/main/java/com/android/tools/r8/DexIndexedConsumer.java
+++ b/src/main/java/com/android/tools/r8/DexIndexedConsumer.java
@@ -180,11 +180,6 @@
outputBuilder.close(handler);
}
- public static void writeResources(Path archive, List<ProgramResource> resources)
- throws IOException, ResourceException {
- writeResources(archive, resources, ImmutableList.of());
- }
-
public static void writeResources(
Path archive, List<ProgramResource> resources, List<DataEntryResource> dataResources)
throws IOException, ResourceException {
diff --git a/src/main/java/com/android/tools/r8/utils/AndroidAppConsumers.java b/src/main/java/com/android/tools/r8/utils/AndroidAppConsumers.java
index c7078ec..71ebb23 100644
--- a/src/main/java/com/android/tools/r8/utils/AndroidAppConsumers.java
+++ b/src/main/java/com/android/tools/r8/utils/AndroidAppConsumers.java
@@ -14,10 +14,13 @@
import com.android.tools.r8.DexIndexedConsumer.ForwardingConsumer;
import com.android.tools.r8.DiagnosticsHandler;
import com.android.tools.r8.ProgramConsumer;
+import com.android.tools.r8.ResourceException;
import com.android.tools.r8.StringConsumer;
import com.android.tools.r8.origin.Origin;
+import com.google.common.io.ByteStreams;
import it.unimi.dsi.fastutil.ints.Int2ReferenceAVLTreeMap;
import it.unimi.dsi.fastutil.ints.Int2ReferenceSortedMap;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -110,23 +113,37 @@
@Override
public DataResourceConsumer getDataResourceConsumer() {
- assert consumer.getDataResourceConsumer() == null;
+ DataResourceConsumer dataResourceConsumer = consumer.getDataResourceConsumer();
return new DataResourceConsumer() {
@Override
public void accept(
DataDirectoryResource directory, DiagnosticsHandler diagnosticsHandler) {
- // Ignore.
+ if (dataResourceConsumer != null) {
+ dataResourceConsumer.accept(directory, diagnosticsHandler);
+ }
}
@Override
public void accept(DataEntryResource file, DiagnosticsHandler diagnosticsHandler) {
- builder.addDataResource(file);
+ try {
+ byte[] bytes = ByteStreams.toByteArray(file.getByteStream());
+ DataEntryResource copy =
+ DataEntryResource.fromBytes(bytes, file.getName(), file.getOrigin());
+ builder.addDataResource(copy);
+ if (dataResourceConsumer != null) {
+ dataResourceConsumer.accept(copy, diagnosticsHandler);
+ }
+ } catch (IOException | ResourceException e) {
+ throw new RuntimeException(e);
+ }
}
@Override
public void finished(DiagnosticsHandler handler) {
- // Ignore.
+ if (dataResourceConsumer != null) {
+ dataResourceConsumer.finished(handler);
+ }
}
};
}