From eec0288e69b2992511bf35ea362daffa9f9094ab Mon Sep 17 00:00:00 2001 From: Connor Tumbleson Date: Fri, 3 Nov 2023 06:40:32 -0400 Subject: [PATCH] Adapt null resource to be treated as reference instead of empty string. (#3417) * fix: handle null resolved items as references * test: add color null test for aapt2 --- .../java/brut/androlib/res/data/value/ResValueFactory.java | 4 +--- .../test/java/brut/androlib/aapt2/BuildAndDecodeTest.java | 5 +++++ .../src/test/resources/aapt2/testapp/res/values/colors.xml | 7 +++++++ 3 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 brut.apktool/apktool-lib/src/test/resources/aapt2/testapp/res/values/colors.xml diff --git a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResValueFactory.java b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResValueFactory.java index 052621e0..1d20c79f 100644 --- a/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResValueFactory.java +++ b/brut.apktool/apktool-lib/src/main/java/brut/androlib/res/data/value/ResValueFactory.java @@ -32,9 +32,7 @@ public class ResValueFactory { public ResScalarValue factory(int type, int value, String rawValue) throws AndrolibException { switch (type) { case TypedValue.TYPE_NULL: - if (value == TypedValue.DATA_NULL_UNDEFINED) { // Special case $empty as explicitly defined empty value - return new ResStringValue(null, value); - } else if (value == TypedValue.DATA_NULL_EMPTY) { + if (value == TypedValue.DATA_NULL_EMPTY) { return new ResEmptyValue(value, rawValue, type); } return new ResReferenceValue(mPackage, 0, null); diff --git a/brut.apktool/apktool-lib/src/test/java/brut/androlib/aapt2/BuildAndDecodeTest.java b/brut.apktool/apktool-lib/src/test/java/brut/androlib/aapt2/BuildAndDecodeTest.java index a0aa8048..c015709c 100644 --- a/brut.apktool/apktool-lib/src/test/java/brut/androlib/aapt2/BuildAndDecodeTest.java +++ b/brut.apktool/apktool-lib/src/test/java/brut/androlib/aapt2/BuildAndDecodeTest.java @@ -71,6 +71,11 @@ public class BuildAndDecodeTest extends BaseTest { assertTrue(sTestNewDir.isDirectory()); } + @Test + public void valuesColorsTest() throws BrutException { + compareValuesFiles("values/colors.xml"); + } + @Test public void valuesStringsTest() throws BrutException { compareValuesFiles("values/strings.xml"); diff --git a/brut.apktool/apktool-lib/src/test/resources/aapt2/testapp/res/values/colors.xml b/brut.apktool/apktool-lib/src/test/resources/aapt2/testapp/res/values/colors.xml new file mode 100644 index 00000000..e78c33e0 --- /dev/null +++ b/brut.apktool/apktool-lib/src/test/resources/aapt2/testapp/res/values/colors.xml @@ -0,0 +1,7 @@ + + + #ff123456 + @android:color/white + #00000000 + @null +