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
+ };
+}