Skip to content

Whitespace collapsing, Backslash escaping, Quoted escaping not implemented #51

@Gbr22

Description

@Gbr22

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:

  1. Used version '1.2.6'
  2. Operating system 'Linux 5.15.90.1-microsoft-standard-WSL2 x86_64 GNU/Linux'
  3. Commands java -jar APKEditor-1.2.6.jar d -dex -i app-debug.apk and java -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>

Attached images

strings (original) built with android studio

image

strings (original) built with APKEditor

image

strings (apktool decompilation output) built with android studio

image

strings (APKEditor decompilation output manually edited to escape single quotes) built with android studio

image

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions