Add utility method for getting precompiled resource table and manifest

This allows us to test this using the command tests on windows where we don't have aapt2

Bug: 329354992
Change-Id: I63fb3dc0d0b21730dfd8a758c127847d90aafce4
diff --git a/src/test/testbase/java/com/android/tools/r8/androidresources/AndroidResourceTestingUtils.java b/src/test/testbase/java/com/android/tools/r8/androidresources/AndroidResourceTestingUtils.java
index c74d4d5..10486c8 100644
--- a/src/test/testbase/java/com/android/tools/r8/androidresources/AndroidResourceTestingUtils.java
+++ b/src/test/testbase/java/com/android/tools/r8/androidresources/AndroidResourceTestingUtils.java
@@ -31,6 +31,7 @@
 import java.lang.reflect.Field;
 import java.nio.file.Files;
 import java.nio.file.Path;
+import java.nio.file.StandardOpenOption;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
@@ -41,6 +42,8 @@
 import java.util.TreeMap;
 import java.util.TreeSet;
 import java.util.stream.Collectors;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
 import org.junit.Assert;
 import org.junit.rules.TemporaryFolder;
 
@@ -103,6 +106,20 @@
     return dollarIndex > 0 && name.charAt(dollarIndex - 1) == 'R';
   }
 
+  public static void writePrecompiledManifestAndResourcePB(Path resourceOutput) {
+    try (ZipOutputStream out =
+        new ZipOutputStream(
+            Files.newOutputStream(
+                resourceOutput, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING))) {
+      ZipUtils.writeToZipStream(
+          out, "AndroidManifest.xml", CompiledProto.SIMPLE_MANIFEST, ZipEntry.STORED);
+      ZipUtils.writeToZipStream(
+          out, "resources.pb", CompiledProto.SIMPLE_RESOURCE_TABLE, ZipEntry.STORED);
+    } catch (IOException e) {
+      throw new RuntimeException(e);
+    }
+  }
+
   public static String SIMPLE_MANIFEST_WITH_APP_NAME =
       "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
           + "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n"
diff --git a/src/test/testbase/java/com/android/tools/r8/androidresources/CompiledProto.java b/src/test/testbase/java/com/android/tools/r8/androidresources/CompiledProto.java
new file mode 100644
index 0000000..9cda6e0
--- /dev/null
+++ b/src/test/testbase/java/com/android/tools/r8/androidresources/CompiledProto.java
@@ -0,0 +1,814 @@
+// Copyright (c) 2024, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.androidresources;
+
+public class CompiledProto {
+
+  // A simple resource table with just the string app_name referenced from the manifest below
+  public static final byte[] SIMPLE_RESOURCE_TABLE =
+      new byte[] {
+        (byte) 10,
+        (byte) 98,
+        (byte) 10,
+        (byte) 96,
+        (byte) 1,
+        (byte) 0,
+        (byte) 28,
+        (byte) 0,
+        (byte) 96,
+        (byte) 0,
+        (byte) 0,
+        (byte) 0,
+        (byte) 2,
+        (byte) 0,
+        (byte) 0,
+        (byte) 0,
+        (byte) 0,
+        (byte) 0,
+        (byte) 0,
+        (byte) 0,
+        (byte) 0,
+        (byte) 1,
+        (byte) 0,
+        (byte) 0,
+        (byte) 36,
+        (byte) 0,
+        (byte) 0,
+        (byte) 0,
+        (byte) 0,
+        (byte) 0,
+        (byte) 0,
+        (byte) 0,
+        (byte) 0,
+        (byte) 0,
+        (byte) 0,
+        (byte) 0,
+        (byte) 3,
+        (byte) 0,
+        (byte) 0,
+        (byte) 0,
+        (byte) 0,
+        (byte) 0,
+        (byte) 0,
+        (byte) 52,
+        (byte) 52,
+        (byte) 47,
+        (byte) 116,
+        (byte) 109,
+        (byte) 112,
+        (byte) 47,
+        (byte) 106,
+        (byte) 117,
+        (byte) 110,
+        (byte) 105,
+        (byte) 116,
+        (byte) 53,
+        (byte) 57,
+        (byte) 53,
+        (byte) 50,
+        (byte) 50,
+        (byte) 51,
+        (byte) 52,
+        (byte) 52,
+        (byte) 55,
+        (byte) 54,
+        (byte) 56,
+        (byte) 51,
+        (byte) 57,
+        (byte) 49,
+        (byte) 56,
+        (byte) 53,
+        (byte) 53,
+        (byte) 53,
+        (byte) 53,
+        (byte) 47,
+        (byte) 114,
+        (byte) 101,
+        (byte) 115,
+        (byte) 47,
+        (byte) 118,
+        (byte) 97,
+        (byte) 108,
+        (byte) 117,
+        (byte) 101,
+        (byte) 115,
+        (byte) 47,
+        (byte) 115,
+        (byte) 116,
+        (byte) 114,
+        (byte) 105,
+        (byte) 110,
+        (byte) 103,
+        (byte) 115,
+        (byte) 46,
+        (byte) 120,
+        (byte) 109,
+        (byte) 108,
+        (byte) 0,
+        (byte) 0,
+        (byte) 0,
+        (byte) 18,
+        (byte) 102,
+        (byte) 10,
+        (byte) 2,
+        (byte) 8,
+        (byte) 127,
+        (byte) 18,
+        (byte) 20,
+        (byte) 116,
+        (byte) 104,
+        (byte) 101,
+        (byte) 112,
+        (byte) 97,
+        (byte) 99,
+        (byte) 107,
+        (byte) 97,
+        (byte) 103,
+        (byte) 101,
+        (byte) 49,
+        (byte) 50,
+        (byte) 55,
+        (byte) 46,
+        (byte) 102,
+        (byte) 111,
+        (byte) 111,
+        (byte) 98,
+        (byte) 97,
+        (byte) 114,
+        (byte) 26,
+        (byte) 74,
+        (byte) 10,
+        (byte) 2,
+        (byte) 8,
+        (byte) 1,
+        (byte) 18,
+        (byte) 6,
+        (byte) 115,
+        (byte) 116,
+        (byte) 114,
+        (byte) 105,
+        (byte) 110,
+        (byte) 103,
+        (byte) 26,
+        (byte) 60,
+        (byte) 10,
+        (byte) 0,
+        (byte) 18,
+        (byte) 8,
+        (byte) 97,
+        (byte) 112,
+        (byte) 112,
+        (byte) 95,
+        (byte) 110,
+        (byte) 97,
+        (byte) 109,
+        (byte) 101,
+        (byte) 26,
+        (byte) 2,
+        (byte) 18,
+        (byte) 0,
+        (byte) 50,
+        (byte) 42,
+        (byte) 10,
+        (byte) 0,
+        (byte) 18,
+        (byte) 38,
+        (byte) 10,
+        (byte) 6,
+        (byte) 8,
+        (byte) 1,
+        (byte) 18,
+        (byte) 2,
+        (byte) 8,
+        (byte) 2,
+        (byte) 34,
+        (byte) 28,
+        (byte) 18,
+        (byte) 26,
+        (byte) 10,
+        (byte) 24,
+        (byte) 77,
+        (byte) 111,
+        (byte) 115,
+        (byte) 116,
+        (byte) 32,
+        (byte) 105,
+        (byte) 109,
+        (byte) 112,
+        (byte) 111,
+        (byte) 114,
+        (byte) 116,
+        (byte) 97,
+        (byte) 110,
+        (byte) 116,
+        (byte) 32,
+        (byte) 97,
+        (byte) 112,
+        (byte) 112,
+        (byte) 32,
+        (byte) 101,
+        (byte) 118,
+        (byte) 101,
+        (byte) 114,
+        (byte) 46,
+        (byte) 34,
+        (byte) 51,
+        (byte) 10,
+        (byte) 35,
+        (byte) 65,
+        (byte) 110,
+        (byte) 100,
+        (byte) 114,
+        (byte) 111,
+        (byte) 105,
+        (byte) 100,
+        (byte) 32,
+        (byte) 65,
+        (byte) 115,
+        (byte) 115,
+        (byte) 101,
+        (byte) 116,
+        (byte) 32,
+        (byte) 80,
+        (byte) 97,
+        (byte) 99,
+        (byte) 107,
+        (byte) 97,
+        (byte) 103,
+        (byte) 105,
+        (byte) 110,
+        (byte) 103,
+        (byte) 32,
+        (byte) 84,
+        (byte) 111,
+        (byte) 111,
+        (byte) 108,
+        (byte) 32,
+        (byte) 40,
+        (byte) 97,
+        (byte) 97,
+        (byte) 112,
+        (byte) 116,
+        (byte) 41,
+        (byte) 18,
+        (byte) 12,
+        (byte) 50,
+        (byte) 46,
+        (byte) 49,
+        (byte) 57,
+        (byte) 45,
+        (byte) 57,
+        (byte) 50,
+        (byte) 56,
+        (byte) 57,
+        (byte) 51,
+        (byte) 53,
+        (byte) 56
+      };
+
+  // A simple manifest with just the app name embedded (referenced through the resource table)
+  // "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
+  //    "<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+  //         package="com.android.tools.r8">
+  //        <application android:label="@string/app_name">
+  //        </application>
+  //    "</manifest>"
+  public static final byte[] SIMPLE_MANIFEST =
+      new byte[] {
+        (byte) 10,
+        (byte) -113,
+        (byte) 4,
+        (byte) 10,
+        (byte) 57,
+        (byte) 10,
+        (byte) 7,
+        (byte) 97,
+        (byte) 110,
+        (byte) 100,
+        (byte) 114,
+        (byte) 111,
+        (byte) 105,
+        (byte) 100,
+        (byte) 18,
+        (byte) 42,
+        (byte) 104,
+        (byte) 116,
+        (byte) 116,
+        (byte) 112,
+        (byte) 58,
+        (byte) 47,
+        (byte) 47,
+        (byte) 115,
+        (byte) 99,
+        (byte) 104,
+        (byte) 101,
+        (byte) 109,
+        (byte) 97,
+        (byte) 115,
+        (byte) 46,
+        (byte) 97,
+        (byte) 110,
+        (byte) 100,
+        (byte) 114,
+        (byte) 111,
+        (byte) 105,
+        (byte) 100,
+        (byte) 46,
+        (byte) 99,
+        (byte) 111,
+        (byte) 109,
+        (byte) 47,
+        (byte) 97,
+        (byte) 112,
+        (byte) 107,
+        (byte) 47,
+        (byte) 114,
+        (byte) 101,
+        (byte) 115,
+        (byte) 47,
+        (byte) 97,
+        (byte) 110,
+        (byte) 100,
+        (byte) 114,
+        (byte) 111,
+        (byte) 105,
+        (byte) 100,
+        (byte) 26,
+        (byte) 2,
+        (byte) 8,
+        (byte) 2,
+        (byte) 26,
+        (byte) 8,
+        (byte) 109,
+        (byte) 97,
+        (byte) 110,
+        (byte) 105,
+        (byte) 102,
+        (byte) 101,
+        (byte) 115,
+        (byte) 116,
+        (byte) 34,
+        (byte) 31,
+        (byte) 18,
+        (byte) 7,
+        (byte) 112,
+        (byte) 97,
+        (byte) 99,
+        (byte) 107,
+        (byte) 97,
+        (byte) 103,
+        (byte) 101,
+        (byte) 26,
+        (byte) 20,
+        (byte) 99,
+        (byte) 111,
+        (byte) 109,
+        (byte) 46,
+        (byte) 97,
+        (byte) 110,
+        (byte) 100,
+        (byte) 114,
+        (byte) 111,
+        (byte) 105,
+        (byte) 100,
+        (byte) 46,
+        (byte) 116,
+        (byte) 111,
+        (byte) 111,
+        (byte) 108,
+        (byte) 115,
+        (byte) 46,
+        (byte) 114,
+        (byte) 56,
+        (byte) 34,
+        (byte) 82,
+        (byte) 10,
+        (byte) 42,
+        (byte) 104,
+        (byte) 116,
+        (byte) 116,
+        (byte) 112,
+        (byte) 58,
+        (byte) 47,
+        (byte) 47,
+        (byte) 115,
+        (byte) 99,
+        (byte) 104,
+        (byte) 101,
+        (byte) 109,
+        (byte) 97,
+        (byte) 115,
+        (byte) 46,
+        (byte) 97,
+        (byte) 110,
+        (byte) 100,
+        (byte) 114,
+        (byte) 111,
+        (byte) 105,
+        (byte) 100,
+        (byte) 46,
+        (byte) 99,
+        (byte) 111,
+        (byte) 109,
+        (byte) 47,
+        (byte) 97,
+        (byte) 112,
+        (byte) 107,
+        (byte) 47,
+        (byte) 114,
+        (byte) 101,
+        (byte) 115,
+        (byte) 47,
+        (byte) 97,
+        (byte) 110,
+        (byte) 100,
+        (byte) 114,
+        (byte) 111,
+        (byte) 105,
+        (byte) 100,
+        (byte) 18,
+        (byte) 17,
+        (byte) 99,
+        (byte) 111,
+        (byte) 109,
+        (byte) 112,
+        (byte) 105,
+        (byte) 108,
+        (byte) 101,
+        (byte) 83,
+        (byte) 100,
+        (byte) 107,
+        (byte) 86,
+        (byte) 101,
+        (byte) 114,
+        (byte) 115,
+        (byte) 105,
+        (byte) 111,
+        (byte) 110,
+        (byte) 26,
+        (byte) 2,
+        (byte) 51,
+        (byte) 49,
+        (byte) 34,
+        (byte) 2,
+        (byte) 8,
+        (byte) 2,
+        (byte) 40,
+        (byte) -14,
+        (byte) -118,
+        (byte) -124,
+        (byte) 8,
+        (byte) 50,
+        (byte) 4,
+        (byte) 58,
+        (byte) 2,
+        (byte) 48,
+        (byte) 31,
+        (byte) 34,
+        (byte) 40,
+        (byte) 18,
+        (byte) 24,
+        (byte) 112,
+        (byte) 108,
+        (byte) 97,
+        (byte) 116,
+        (byte) 102,
+        (byte) 111,
+        (byte) 114,
+        (byte) 109,
+        (byte) 66,
+        (byte) 117,
+        (byte) 105,
+        (byte) 108,
+        (byte) 100,
+        (byte) 86,
+        (byte) 101,
+        (byte) 114,
+        (byte) 115,
+        (byte) 105,
+        (byte) 111,
+        (byte) 110,
+        (byte) 67,
+        (byte) 111,
+        (byte) 100,
+        (byte) 101,
+        (byte) 26,
+        (byte) 2,
+        (byte) 51,
+        (byte) 49,
+        (byte) 34,
+        (byte) 2,
+        (byte) 8,
+        (byte) 2,
+        (byte) 50,
+        (byte) 4,
+        (byte) 58,
+        (byte) 2,
+        (byte) 48,
+        (byte) 31,
+        (byte) 34,
+        (byte) 80,
+        (byte) 10,
+        (byte) 42,
+        (byte) 104,
+        (byte) 116,
+        (byte) 116,
+        (byte) 112,
+        (byte) 58,
+        (byte) 47,
+        (byte) 47,
+        (byte) 115,
+        (byte) 99,
+        (byte) 104,
+        (byte) 101,
+        (byte) 109,
+        (byte) 97,
+        (byte) 115,
+        (byte) 46,
+        (byte) 97,
+        (byte) 110,
+        (byte) 100,
+        (byte) 114,
+        (byte) 111,
+        (byte) 105,
+        (byte) 100,
+        (byte) 46,
+        (byte) 99,
+        (byte) 111,
+        (byte) 109,
+        (byte) 47,
+        (byte) 97,
+        (byte) 112,
+        (byte) 107,
+        (byte) 47,
+        (byte) 114,
+        (byte) 101,
+        (byte) 115,
+        (byte) 47,
+        (byte) 97,
+        (byte) 110,
+        (byte) 100,
+        (byte) 114,
+        (byte) 111,
+        (byte) 105,
+        (byte) 100,
+        (byte) 18,
+        (byte) 25,
+        (byte) 99,
+        (byte) 111,
+        (byte) 109,
+        (byte) 112,
+        (byte) 105,
+        (byte) 108,
+        (byte) 101,
+        (byte) 83,
+        (byte) 100,
+        (byte) 107,
+        (byte) 86,
+        (byte) 101,
+        (byte) 114,
+        (byte) 115,
+        (byte) 105,
+        (byte) 111,
+        (byte) 110,
+        (byte) 67,
+        (byte) 111,
+        (byte) 100,
+        (byte) 101,
+        (byte) 110,
+        (byte) 97,
+        (byte) 109,
+        (byte) 101,
+        (byte) 26,
+        (byte) 2,
+        (byte) 49,
+        (byte) 50,
+        (byte) 40,
+        (byte) -13,
+        (byte) -118,
+        (byte) -124,
+        (byte) 8,
+        (byte) 34,
+        (byte) 40,
+        (byte) 18,
+        (byte) 24,
+        (byte) 112,
+        (byte) 108,
+        (byte) 97,
+        (byte) 116,
+        (byte) 102,
+        (byte) 111,
+        (byte) 114,
+        (byte) 109,
+        (byte) 66,
+        (byte) 117,
+        (byte) 105,
+        (byte) 108,
+        (byte) 100,
+        (byte) 86,
+        (byte) 101,
+        (byte) 114,
+        (byte) 115,
+        (byte) 105,
+        (byte) 111,
+        (byte) 110,
+        (byte) 78,
+        (byte) 97,
+        (byte) 109,
+        (byte) 101,
+        (byte) 26,
+        (byte) 2,
+        (byte) 49,
+        (byte) 50,
+        (byte) 34,
+        (byte) 2,
+        (byte) 8,
+        (byte) 2,
+        (byte) 50,
+        (byte) 4,
+        (byte) 58,
+        (byte) 2,
+        (byte) 48,
+        (byte) 12,
+        (byte) 42,
+        (byte) 13,
+        (byte) 18,
+        (byte) 5,
+        (byte) 10,
+        (byte) 32,
+        (byte) 32,
+        (byte) 32,
+        (byte) 32,
+        (byte) 26,
+        (byte) 4,
+        (byte) 8,
+        (byte) 3,
+        (byte) 16,
+        (byte) 41,
+        (byte) 42,
+        (byte) -110,
+        (byte) 1,
+        (byte) 10,
+        (byte) -119,
+        (byte) 1,
+        (byte) 26,
+        (byte) 11,
+        (byte) 97,
+        (byte) 112,
+        (byte) 112,
+        (byte) 108,
+        (byte) 105,
+        (byte) 99,
+        (byte) 97,
+        (byte) 116,
+        (byte) 105,
+        (byte) 111,
+        (byte) 110,
+        (byte) 34,
+        (byte) 107,
+        (byte) 10,
+        (byte) 42,
+        (byte) 104,
+        (byte) 116,
+        (byte) 116,
+        (byte) 112,
+        (byte) 58,
+        (byte) 47,
+        (byte) 47,
+        (byte) 115,
+        (byte) 99,
+        (byte) 104,
+        (byte) 101,
+        (byte) 109,
+        (byte) 97,
+        (byte) 115,
+        (byte) 46,
+        (byte) 97,
+        (byte) 110,
+        (byte) 100,
+        (byte) 114,
+        (byte) 111,
+        (byte) 105,
+        (byte) 100,
+        (byte) 46,
+        (byte) 99,
+        (byte) 111,
+        (byte) 109,
+        (byte) 47,
+        (byte) 97,
+        (byte) 112,
+        (byte) 107,
+        (byte) 47,
+        (byte) 114,
+        (byte) 101,
+        (byte) 115,
+        (byte) 47,
+        (byte) 97,
+        (byte) 110,
+        (byte) 100,
+        (byte) 114,
+        (byte) 111,
+        (byte) 105,
+        (byte) 100,
+        (byte) 18,
+        (byte) 5,
+        (byte) 108,
+        (byte) 97,
+        (byte) 98,
+        (byte) 101,
+        (byte) 108,
+        (byte) 26,
+        (byte) 16,
+        (byte) 64,
+        (byte) 115,
+        (byte) 116,
+        (byte) 114,
+        (byte) 105,
+        (byte) 110,
+        (byte) 103,
+        (byte) 47,
+        (byte) 97,
+        (byte) 112,
+        (byte) 112,
+        (byte) 95,
+        (byte) 110,
+        (byte) 97,
+        (byte) 109,
+        (byte) 101,
+        (byte) 34,
+        (byte) 2,
+        (byte) 8,
+        (byte) 4,
+        (byte) 40,
+        (byte) -127,
+        (byte) -128,
+        (byte) -124,
+        (byte) 8,
+        (byte) 50,
+        (byte) 27,
+        (byte) 10,
+        (byte) 25,
+        (byte) 16,
+        (byte) -128,
+        (byte) -128,
+        (byte) -124,
+        (byte) -8,
+        (byte) 7,
+        (byte) 26,
+        (byte) 15,
+        (byte) 115,
+        (byte) 116,
+        (byte) 114,
+        (byte) 105,
+        (byte) 110,
+        (byte) 103,
+        (byte) 47,
+        (byte) 97,
+        (byte) 112,
+        (byte) 112,
+        (byte) 95,
+        (byte) 110,
+        (byte) 97,
+        (byte) 109,
+        (byte) 101,
+        (byte) 48,
+        (byte) 3,
+        (byte) 42,
+        (byte) 13,
+        (byte) 18,
+        (byte) 5,
+        (byte) 10,
+        (byte) 32,
+        (byte) 32,
+        (byte) 32,
+        (byte) 32,
+        (byte) 26,
+        (byte) 4,
+        (byte) 8,
+        (byte) 4,
+        (byte) 16,
+        (byte) 50,
+        (byte) 26,
+        (byte) 4,
+        (byte) 8,
+        (byte) 4,
+        (byte) 16,
+        (byte) 4,
+        (byte) 42,
+        (byte) 9,
+        (byte) 18,
+        (byte) 1,
+        (byte) 10,
+        (byte) 26,
+        (byte) 4,
+        (byte) 8,
+        (byte) 5,
+        (byte) 16,
+        (byte) 18,
+        (byte) 26,
+        (byte) 2,
+        (byte) 8,
+        (byte) 2
+      };
+}