diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResConfigFlags.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResConfigFlags.java index 078e153b..0c4aaf5f 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResConfigFlags.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/ResConfigFlags.java @@ -57,6 +57,8 @@ public class ResConfigFlags { private final String mQualifiers; + private final int size; + public ResConfigFlags() { mcc = 0; mnc = 0; @@ -81,6 +83,7 @@ public class ResConfigFlags { screenLayout2 = 0; isInvalid = false; mQualifiers = ""; + size = 0; } public ResConfigFlags(short mcc, short mnc, char[] language, @@ -90,7 +93,7 @@ public class ResConfigFlags { short sdkVersion, byte screenLayout, byte uiMode, short smallestScreenWidthDp, short screenWidthDp, short screenHeightDp, char[] localeScript, char[] localeVariant, - byte screenLayout2, boolean isInvalid) { + byte screenLayout2, boolean isInvalid, int size) { if (orientation < 0 || orientation > 3) { LOGGER.warning("Invalid orientation value: " + orientation); orientation = 0; @@ -155,6 +158,7 @@ public class ResConfigFlags { this.localeVariant = localeVariant; this.screenLayout2 = screenLayout2; this.isInvalid = isInvalid; + this.size = size; mQualifiers = generateQualifiers(); } @@ -169,10 +173,14 @@ public class ResConfigFlags { if (mnc != MNC_ZERO) { if (mnc != 0) { ret.append("-mnc"); - if (mnc > 0 && mnc < 10) { - ret.append(String.format("%02d", mnc)); + if (size <= 32) { + if (mnc > 0 && mnc < 10) { + ret.append(String.format("%02d", mnc)); + } else { + ret.append(String.format("%03d", mnc)); + } } else { - ret.append(String.format("%03d", mnc)); + ret.append(mnc); } } } else { diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/ARSCDecoder.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/ARSCDecoder.java index 1de6227f..e169bcd0 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/ARSCDecoder.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/decoder/ARSCDecoder.java @@ -354,7 +354,7 @@ public class ARSCDecoder { orientation, touchscreen, density, keyboard, navigation, inputFlags, screenWidth, screenHeight, sdkVersion, screenLayout, uiMode, smallestScreenWidthDp, screenWidthDp, - screenHeightDp, localeScript, localeVariant, screenLayout2, isInvalid); + screenHeightDp, localeScript, localeVariant, screenLayout2, isInvalid, size); } private char[] unpackLanguageOrRegion(byte in0, byte in1, char base) throws AndrolibException { diff --git a/brut.apktool/apktool-lib/src/test/java/brut/androlib/BuildAndDecodeTest.java b/brut.apktool/apktool-lib/src/test/java/brut/androlib/BuildAndDecodeTest.java index ff75096a..e6501655 100644 --- a/brut.apktool/apktool-lib/src/test/java/brut/androlib/BuildAndDecodeTest.java +++ b/brut.apktool/apktool-lib/src/test/java/brut/androlib/BuildAndDecodeTest.java @@ -177,14 +177,14 @@ public class BuildAndDecodeTest { @Test public void qualifiersTest() throws BrutException { - compareValuesFiles("values-mcc004-mnc04-en-rUS-ldrtl-sw100dp-w200dp-h300dp" + compareValuesFiles("values-mcc004-mnc4-en-rUS-ldrtl-sw100dp-w200dp-h300dp" + "-xlarge-long-round-land-desk-night-xhdpi-finger-keyssoft-12key" + "-navhidden-dpad/strings.xml"); } @Test public void shortendedMncTest() throws BrutException { - compareValuesFiles("values-mcc001-mnc01/strings.xml"); + compareValuesFiles("values-mcc001-mnc1/strings.xml"); } @Test @@ -192,6 +192,16 @@ public class BuildAndDecodeTest { compareValuesFiles("values-mnc1/strings.xml"); } + @Test + public void shortMncv2Test() throws BrutException { + compareValuesFiles("values-mcc238-mnc6/strings.xml"); + } + + @Test + public void longMncTest() throws BrutException { + compareValuesFiles("values-mcc238-mnc870/strings.xml"); + } + @Test public void anyDpiTest() throws BrutException, IOException { compareValuesFiles("values-watch/strings.xml"); diff --git a/brut.apktool/apktool-lib/src/test/java/brut/androlib/TestUtils.java b/brut.apktool/apktool-lib/src/test/java/brut/androlib/TestUtils.java index bb0a9c91..33cdcf2b 100644 --- a/brut.apktool/apktool-lib/src/test/java/brut/androlib/TestUtils.java +++ b/brut.apktool/apktool-lib/src/test/java/brut/androlib/TestUtils.java @@ -16,11 +16,13 @@ package brut.androlib; +import brut.androlib.res.AndrolibResources; import brut.common.BrutException; import brut.directory.*; import java.io.*; import java.net.URL; import java.net.URLDecoder; +import java.nio.file.Files; import java.util.HashMap; import java.util.Map; import org.custommonkey.xmlunit.ElementQualifier; diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/res/values-mcc001-mnc01/strings.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/res/values-mcc001-mnc1/strings.xml similarity index 100% rename from brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/res/values-mcc001-mnc01/strings.xml rename to brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/res/values-mcc001-mnc1/strings.xml diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/res/values-mcc004-mnc04-en-rUS-ldrtl-sw100dp-w200dp-h300dp-xlarge-long-round-land-desk-night-xhdpi-finger-keyssoft-12key-navhidden-dpad/strings.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/res/values-mcc004-mnc4-en-rUS-ldrtl-sw100dp-w200dp-h300dp-xlarge-long-round-land-desk-night-xhdpi-finger-keyssoft-12key-navhidden-dpad/strings.xml similarity index 100% rename from brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/res/values-mcc004-mnc04-en-rUS-ldrtl-sw100dp-w200dp-h300dp-xlarge-long-round-land-desk-night-xhdpi-finger-keyssoft-12key-navhidden-dpad/strings.xml rename to brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/res/values-mcc004-mnc4-en-rUS-ldrtl-sw100dp-w200dp-h300dp-xlarge-long-round-land-desk-night-xhdpi-finger-keyssoft-12key-navhidden-dpad/strings.xml diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/res/values-mcc238-mnc6/strings.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/res/values-mcc238-mnc6/strings.xml new file mode 100644 index 00000000..35eaf5ef --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/res/values-mcc238-mnc6/strings.xml @@ -0,0 +1,4 @@ + + + test1 + \ No newline at end of file diff --git a/brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/res/values-mcc238-mnc870/strings.xml b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/res/values-mcc238-mnc870/strings.xml new file mode 100644 index 00000000..35eaf5ef --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/brut/apktool/testapp/res/values-mcc238-mnc870/strings.xml @@ -0,0 +1,4 @@ + + + test1 + \ No newline at end of file