iBotPeaches / Apktool

A tool for reverse engineering Android apk files
https://apktool.org/
Apache License 2.0
19.49k stars 3.55k forks source link

[BUG] Repackaging App with Adaptive Icons shows Stock Android Icon #3619

Open kyuds opened 1 month ago

kyuds commented 1 month ago

Information

  1. Apktool Version (apktool -version) - 2.9.3
  2. Operating System (Mac, Linux, Windows) - macOS (Intel Chip)
  3. APK From? (Playstore, ROM, Other) - Other (cannot share, unfortunately)
  4. Java Version (java --version) - 17

So first of all, thank you for the wonderful project. I am currently in the process of editing an APK, and I've noticed that everything works fine EXCEPT for the application icon shown on the home screen (and app menu). Rebuilding the APK and installing it allows for the app to work fine, (including login and rendering), but the icon appears as the stock, green-ish background android icon.

After some inspection, I've noticed that this particular icon uses Adaptive Icons with the two layers, and observing that the decoded android manifest file, points to a completely different link (launcher_icon instead of ic_launcher), it seems that Adaptive Icons seems to be an issue.

I have already tried unpacking and repacking the APK without changing anything (except setting the extractNativeLibs field to true, as my APK is a split), and still the icon is not working properly.

Thank you!

iBotPeaches commented 1 month ago

Do you have a small sample of the AndroidManifest file decoded, then built/decoded again? To see the icon section.

kyuds commented 1 month ago

Honestly don't know if this will help, but: base.apk: AndroidManifest.xml:

<application android:appComponentFactory="androidx.core.app.CoreComponentFactory" android:extractNativeLibs="true" android:icon="@mipmap/launcher_icon" android:isSplitRequired="true" android:label="@string/app_name" android:name="<removed name>" android:requestLegacyExternalStorage="true" android:usesCleartextTraffic="false">

** pre/post rebuild shows the same output. base.apk: The launcher_icon.xml in res/mipmap-anydpi-v26

<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon
  xmlns:android="http://schemas.android.com/apk/res/android">
    <background android:drawable="@null" />
    <foreground android:drawable="@null" />
</adaptive-icon>

The foreground and background images for the launcher icon is in split_config.xxhdpi.apk, but looking through them I wasn't able find any file similar to the "launcher_icon.xml" file in base.apk.

Also, I tried switching out the "@null" to the appropriate paths for the fore/background images, but that also didn't work.
Finally, I forgot to mention but the app is built with Flutter

iBotPeaches commented 4 weeks ago

Thanks - So I'm guessing the adaptive icons are in the split application? Since I don't see how Apktool would null out the drawable refs unless the resource is not valid in that specific application.

kyuds commented 4 weeks ago

Yup. The adaptive icons are in the split apk (split_config.xxhdpi.apk). Im starting to think that it is because the application is built with Flutter