From 2509e402e768667ed8cbf919f4e492b66e0cf8c1 Mon Sep 17 00:00:00 2001 From: Connor Tumbleson Date: Tue, 28 Aug 2012 21:26:56 -0500 Subject: [PATCH] lots of changes to handling of ARSCDecoder. Needs support to handle something that I don't know yet. Something todo with ResSpecs of dual packages. --- apktool-cli/src/main/java/brut/apktool/Main.java | 2 +- .../java/brut/androlib/res/AndrolibResources.java | 1 + .../brut/androlib/res/decoder/ARSCDecoder.java | 15 ++++++++++----- .../java/brut/androlib/BuildAndDecodeTest.java | 2 +- .../resources/brut/apktool/testapp/apktool.yml | 2 +- .../strings.xml | 0 6 files changed, 14 insertions(+), 8 deletions(-) rename apktool-lib/src/test/resources/brut/apktool/testapp/res/{values-mcc004-mnc4-en-rUS-sw100dp-w200dp-h300dp-xlarge-long-land-night-xhdpi-finger-keyssoft-12key-navhidden-dpad => values-mcc004-mnc4-en-rUS-sw100dp-w200dp-h300dp-xlarge-long-land-desk-night-xhdpi-finger-keyssoft-12key-navhidden-dpad}/strings.xml (100%) diff --git a/apktool-cli/src/main/java/brut/apktool/Main.java b/apktool-cli/src/main/java/brut/apktool/Main.java index 39850ab7..edbb606a 100644 --- a/apktool-cli/src/main/java/brut/apktool/Main.java +++ b/apktool-cli/src/main/java/brut/apktool/Main.java @@ -215,7 +215,7 @@ public class Main { "Copyright 2010 Ryszard Wiśniewski \n" + "with smali v" + ApktoolProperties.get("smaliVersion") + ", and baksmali v" + ApktoolProperties.get("baksmaliVersion") + "\n" + - "Updated by iBotPeaches (@iBotPeaches) and yyj \n" + + "Updated by iBotPeaches (@iBotPeaches)\n" + "Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)\n" + "\n" + "Usage: apktool [-q|--quiet OR -v|--verbose] COMMAND [...]\n" + diff --git a/apktool-lib/src/main/java/brut/androlib/res/AndrolibResources.java b/apktool-lib/src/main/java/brut/androlib/res/AndrolibResources.java index 714d55fe..8dd32592 100644 --- a/apktool-lib/src/main/java/brut/androlib/res/AndrolibResources.java +++ b/apktool-lib/src/main/java/brut/androlib/res/AndrolibResources.java @@ -200,6 +200,7 @@ final public class AndrolibResources { cmd.add("aapt"); cmd.add("p"); cmd.add("-v"); //mega debug mode.@todo REMOVE ON FINAL + if (update) { cmd.add("-u"); } diff --git a/apktool-lib/src/main/java/brut/androlib/res/decoder/ARSCDecoder.java b/apktool-lib/src/main/java/brut/androlib/res/decoder/ARSCDecoder.java index 738e404d..a8c4fbec 100644 --- a/apktool-lib/src/main/java/brut/androlib/res/decoder/ARSCDecoder.java +++ b/apktool-lib/src/main/java/brut/androlib/res/decoder/ARSCDecoder.java @@ -173,7 +173,7 @@ public class ARSCDecoder { /*size*/ mIn.skipBytes(2); short flags = mIn.readShort(); int specNamesId = mIn.readInt(); - + ResValue value = (flags & ENTRY_FLAG_COMPLEX) == 0 ? readValue() : readComplexEntry(); @@ -214,8 +214,8 @@ public class ARSCDecoder { } private ResValue readValue() throws IOException, AndrolibException { - /*size*/ mIn.skipCheckShort((short) 8); - /*zero*/ mIn.skipCheckByte((byte) 0); + /*size*/ mIn.skipCheckShort((short) 8); + /*zero*/ mIn.skipCheckByte((byte) 0); byte type = mIn.readByte(); int data = mIn.readInt(); @@ -247,13 +247,13 @@ public class ARSCDecoder { byte keyboard = mIn.readByte(); byte navigation = mIn.readByte(); byte inputFlags = mIn.readByte(); - mIn.skipBytes(1); + mIn.skipBytes(1); short screenWidth = mIn.readShort(); short screenHeight = mIn.readShort(); short sdkVersion = mIn.readShort(); - mIn.skipBytes(2); + mIn.skipBytes(2); byte screenLayout = 0; byte uiMode = 0; @@ -266,10 +266,15 @@ public class ARSCDecoder { short screenWidthDp = 0; short screenHeightDp = 0; + if (size >= 36) { screenWidthDp = mIn.readShort(); screenHeightDp = mIn.readShort(); } + + if (size >= 40) { + mIn.skipBytes(2); + } int exceedingSize = size - KNOWN_CONFIG_BYTES; if (exceedingSize > 0) { diff --git a/apktool-lib/src/test/java/brut/androlib/BuildAndDecodeTest.java b/apktool-lib/src/test/java/brut/androlib/BuildAndDecodeTest.java index 577abf2a..1e4fc1af 100644 --- a/apktool-lib/src/test/java/brut/androlib/BuildAndDecodeTest.java +++ b/apktool-lib/src/test/java/brut/androlib/BuildAndDecodeTest.java @@ -118,7 +118,7 @@ public class BuildAndDecodeTest { @Test public void qualifiersTest() throws BrutException { compareValuesFiles("values-mcc004-mnc4-en-rUS-sw100dp-w200dp-h300dp" + - "-xlarge-long-land-night-xhdpi-finger-keyssoft-12key" + + "-xlarge-long-land-desk-night-xhdpi-finger-keyssoft-12key" + "-navhidden-dpad/strings.xml"); } diff --git a/apktool-lib/src/test/resources/brut/apktool/testapp/apktool.yml b/apktool-lib/src/test/resources/brut/apktool/testapp/apktool.yml index 6e9af5f7..dbe200bc 100644 --- a/apktool-lib/src/test/resources/brut/apktool/testapp/apktool.yml +++ b/apktool-lib/src/test/resources/brut/apktool/testapp/apktool.yml @@ -1,4 +1,4 @@ -version: 1.4.7 +version: 1.5.0 apkFileName: testapp.apk isFrameworkApk: false usesFramework: diff --git a/apktool-lib/src/test/resources/brut/apktool/testapp/res/values-mcc004-mnc4-en-rUS-sw100dp-w200dp-h300dp-xlarge-long-land-night-xhdpi-finger-keyssoft-12key-navhidden-dpad/strings.xml b/apktool-lib/src/test/resources/brut/apktool/testapp/res/values-mcc004-mnc4-en-rUS-sw100dp-w200dp-h300dp-xlarge-long-land-desk-night-xhdpi-finger-keyssoft-12key-navhidden-dpad/strings.xml similarity index 100% rename from apktool-lib/src/test/resources/brut/apktool/testapp/res/values-mcc004-mnc4-en-rUS-sw100dp-w200dp-h300dp-xlarge-long-land-night-xhdpi-finger-keyssoft-12key-navhidden-dpad/strings.xml rename to apktool-lib/src/test/resources/brut/apktool/testapp/res/values-mcc004-mnc4-en-rUS-sw100dp-w200dp-h300dp-xlarge-long-land-desk-night-xhdpi-finger-keyssoft-12key-navhidden-dpad/strings.xml