Fix Dexdeps to accept dex version 037
Minor renaming and comments for clarity.
bug:28210069
Change-Id: I7bc24e5bfa708df5156e30f2e93528d70de30069
diff --git a/tools/dexdeps/src/com/android/dexdeps/DexData.java b/tools/dexdeps/src/com/android/dexdeps/DexData.java
index 89dff18..6f4fe80 100644
--- a/tools/dexdeps/src/com/android/dexdeps/DexData.java
+++ b/tools/dexdeps/src/com/android/dexdeps/DexData.java
@@ -18,6 +18,7 @@
import java.io.IOException;
import java.io.RandomAccessFile;
+import java.nio.charset.StandardCharsets;
import java.util.Arrays;
/**
@@ -66,8 +67,8 @@
* Verifies the given magic number.
*/
private static boolean verifyMagic(byte[] magic) {
- return Arrays.equals(magic, HeaderItem.DEX_FILE_MAGIC) ||
- Arrays.equals(magic, HeaderItem.DEX_FILE_MAGIC_API_13);
+ return Arrays.equals(magic, HeaderItem.DEX_FILE_MAGIC_v035) ||
+ Arrays.equals(magic, HeaderItem.DEX_FILE_MAGIC_v037);
}
/**
@@ -538,10 +539,16 @@
public int classDefsSize, classDefsOff;
/* expected magic values */
- public static final byte[] DEX_FILE_MAGIC = {
- 0x64, 0x65, 0x78, 0x0a, 0x30, 0x33, 0x36, 0x00 };
- public static final byte[] DEX_FILE_MAGIC_API_13 = {
- 0x64, 0x65, 0x78, 0x0a, 0x30, 0x33, 0x35, 0x00 };
+ public static final byte[] DEX_FILE_MAGIC_v035 =
+ "dex\n035\0".getBytes(StandardCharsets.US_ASCII);
+
+ // Dex version 036 skipped because of an old dalvik bug on some versions
+ // of android where dex files with that version number would erroneously
+ // be accepted and run. See: art/runtime/dex_file.cc
+
+ // V037 was introduced in API LEVEL 24
+ public static final byte[] DEX_FILE_MAGIC_v037 =
+ "dex\n037\0".getBytes(StandardCharsets.US_ASCII);
public static final int ENDIAN_CONSTANT = 0x12345678;
public static final int REVERSE_ENDIAN_CONSTANT = 0x78563412;
}