-
Notifications
You must be signed in to change notification settings - Fork 365
Description
Describe the bug
Whitespace collapsing, Backslash escaping, Quoted escaping not implemented in APKEditor
See this link for how it should behave: https://developer.android.com/guide/topics/resources/string-resource#escaping_quotes
Build examples:
| Input string given to APKEditor to build | Expected text displayed in app | Current text displayed in app |
|---|---|---|
Whitespace collapsed |
Whitespace collapsed | Whitespace collapsed |
Unicode: \u00A9 |
Unicode: © | Unicode: \u00A9 |
"That's cool!" |
That's cool! | "That's cool!" |
That's cool! |
Compile Error |
That's cool! |
Backslash (\\) (\) |
Backslash (\) () | Backslash (\\) (\) |
Decompile example: (❌ incorrect, ✅ correct)
| String in android studio | Expected string extracted from apk (mutiple correct examples) | String extracted from apk by APKEditor | String Extracted from apk by apktool |
|---|---|---|---|
"Tab ulated" |
Tab\u0009ulated Tab\tulated "Tab ulated" |
❌ Tab ulated |
✅ Tab\u0009ulated |
\'single\' |
\'single\' "'single'" "\'single\'" |
❌ 'single' |
✅ "'single'" |
"\"double\"" |
"\"double\"" \"double\" |
❌ "double" |
✅ \"double\" |
(\\) (\) |
(\\) () |
❌ (\) () |
✅ (\\) () |
\u00A9 |
\u00A9 © © |
✅ © |
✅ © |
To Reproduce
Steps to reproduce the behavior:
- Used version '1.2.6'
- Operating system 'Linux 5.15.90.1-microsoft-standard-WSL2 x86_64 GNU/Linux'
- Commands
java -jar APKEditor-1.2.6.jar d -dex -i app-debug.apkandjava -jar APKEditor-1.2.6.jar b -i app-debug_decompile_xml -o packed.apk
See the original strings used to build the apk at strings (original)
See the expected output in image strings (original) built with android studio
I also attached the output produced by apktool for reference strings (apktool decompilation output). The decompiled strings created by apktool are different than strings (original) but that is not a problem, as both XML files produce the same apk as seen on images strings (original) built with android studio and strings (apktool decompilation output) built with android studio
Problem 1: The output produced by unpacking with APKEditor is not compatible with the format that other tools such as android studio expect.
To reproduce unpack the attached apk. The unpacked strings.xml is not compatible with the format that Android Studio accepts. When trying to build my example apk I get an error due to the unescaped single quotes '. After escaping the single quotes with a backslash \ and building the app I get the output seen in the attached image strings (APKEditor decompilation output manually edited to escape single quotes) built with android studio.
Problem 2: The APKEditor packer doesn't recognise backslash \ escape codes and double quoted escapes as its input.
To reproduce unpack the attached apk. Edit the strings.xml to the attached strings (original) then pack/build with APKEditor. The built apk will produce the output shown in the image strings (original) packed with APKEditor with is not correct.
Used apk file
app-debug.apk.zip
Attached XML
strings (original)
<string name="test_string">Android escape and quotation test
\n"Tab\tulated 1"
\n"Tab ulated 2"
\nTab\tulated 3
\nTab ulated 4
\nBackslash (\\) (\)
\nQuestion\?
\n"\"Double\"" \"quotes\"
\n\'Single\' "'quote'" "\'test\'"
\nmail\@example.com
\nUnicode: \u00A9
\n"Whitespace Preserved"
\nWhitespace collapsed
\n"Newlines
preserved"
\nNewlines\n\nPreserved
\nNewlines
collapsed
</string>strings (APKEditor decompilation output)
<string name="test_string">Android escape and quotation test
Tab ulated 1
Tab ulated 2
Tab ulated 3
Tab ulated 4
Backslash (\) ()
Question?
"Double" "quotes"
'Single' 'quote' 'test'
[email protected]
Unicode: ©
Whitespace Preserved
Whitespace collapsed
Newlines
preserved
Newlines
Preserved
Newlines collapsed </string>
</resources>strings (APKEditor decompilation output manually edited to escape single quotes)
<string name="test_string">Android escape and quotation test
Tab ulated 1
Tab ulated 2
Tab ulated 3
Tab ulated 4
Backslash (\) ()
Question?
"Double" "quotes"
\'Single\' \'quote\' \'test\'
[email protected]
Unicode: ©
Whitespace Preserved
Whitespace collapsed
Newlines
preserved
Newlines
Preserved
Newlines collapsed </string>
</resources>strings (apktool decompilation output)
<string name="test_string">"Android escape and quotation test
Tab\u0009ulated 1
Tab\u0009ulated 2
Tab\u0009ulated 3
Tab ulated 4
Backslash (\\) ()
Question?
\"Double\" \"quotes\"
'Single' 'quote' 'test'
[email protected]
Unicode: ©
Whitespace Preserved
Whitespace collapsed
Newlines
preserved
Newlines
Preserved
Newlines collapsed "</string>


