REAndroid / APKEditor

Powerful android apk editor - aapt/aapt2 independent
Apache License 2.0
647 stars 95 forks source link

XML entity shows up as "&" instead of "&" after repacking apk #50

Open Gbr22 opened 11 months ago

Gbr22 commented 11 months ago

Describe the bug It appears that APKEditor cannot correctly handle XML entities in resource strings. String in source code: <string name="test_string">\"Alma\" &amp; Körte</string>. Expected behaviour: The string should show up as "Alma" & Körte after repacking the apk. Actual behaviour: The string shows up as "Alma" &amp; Körte after repacking the apk.

To Reproduce Steps to reproduce the behavior:

  1. Used version '1.2.5'
  2. Operating system 'Linux 5.15.90.1-microsoft-standard-WSL2 x86_64 GNU/Linux'
  3. Commands java -jar APKEditor-1.2.5.jar d -dex -i app-debug.apk and java -jar APKEditor-1.2.5.jar b -i app-debug_decompile_xml -o packed.apk

Log/Stacktrace

Used apk file app-debug.apk.zip

Additional context image

Source code for apk (android studio, new project, empty activity)

strings.xml

<resources>
    <string name="app_name">APKEditorTest</string>
    <string name="test_string">\"Alma\" &amp; Körte</string>
</resources>

MainActivity.kt

package com.example.apkeditortest

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import com.example.apkeditortest.ui.theme.APKEditorTestTheme

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            APKEditorTestTheme {
                // A surface container using the 'background' color from the theme
                Surface(
                    modifier = Modifier.fillMaxSize(),
                    color = MaterialTheme.colorScheme.background
                ) {
                    Greeting(getString(R.string.test_string))
                }
            }
        }
    }
}

@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
    Text(
        text = "Hello $name!",
        modifier = modifier
    )
}

@Preview(showBackground = true)
@Composable
fun GreetingPreview() {
    APKEditorTestTheme {
        Greeting("Android")
    }
}
naijun0403 commented 11 months ago

I think it has something to do with #49

REAndroid commented 11 months ago

I confirmed this and will be fixed soon

Gbr22 commented 11 months ago

The issue seems to be fixed in APKEditor 1.2.6

SZRabinowitz commented 3 months ago

I am having the issue is APKEditor 1.3.2

SZRabinowitz commented 3 months ago

to add more details:

I believe this line in resources.arsc.json is where the string is.

        "entry_name": "reset_phone_sdcard_title",
        "value": {
         "value_type": "STRING",
         "data": "Phone & SD card"
        },
        "id": 3384
       },

Here is how it looks on the phone: Screenshot_20240129-214726

I guess my situations is a bit different because it doesnt show "&amp", it shows something else strange.

link to apk: https://filetransfer.io/data-package/6UuDwzLZ#link Mirror: https://murena.io/s/kCTBjTXAHQLAs8y

Keep in mind that this is a system app and you probably cannot install it on your phone