spotify / ruler

Gradle plugin which helps you analyze the size of your Android apps.
Apache License 2.0
1.13k stars 58 forks source link

Release Build with DexGuard & Product Flavor Not Mapped in the Report #167

Open arifrgilang opened 3 months ago

arifrgilang commented 3 months ago

Current behavior

I ran :app:analyzeSitReleaseBundle with DexGuard enabled. "Sit" is the build flavor. The names were not mapped in the report.

Expected behavior

The names should be mapped correctly base on this comment https://github.com/spotify/ruler/issues/87#issuecomment-1216560083

Steps to reproduce

:app:analyzeSitReleaseBundle with DexGuard enabled. overwriteUnprotected = false

Versions

DexGuard 9.x.x Ruler 1.4.0 Android Gradle Plugin 7.3.1 Gradle 7.4

Anything else?

I tried to modify the target package to place the mapping from DexGuard, just in case Ruler can't find the mapping file.

This is the code from https://github.com/spotify/ruler/issues/87#issuecomment-1216560083 task.mappingFile.set(File(project.buildDir, "outputs/dexguard/mapping/bundle/${variant.name}/mapping.txt"))

The default location is outputs/dexguard/mapping/bundle/sit/release/mapping.txt There's a DexGuard feature to specify the package output, and I change it to:

I also tried changing the DexGuard configuration to overwriteUnprotected = true and with all the package name above, but it is still not working.

arifrgilang commented 3 months ago

After carefully reviewing the logs, I found that Ruler puts the report files here: projectname/app/build/reports/ruler/sitRelease/report.html. Therefore, the correct package should be sitRelease.

Upon examining my mapping, it should be: build/outputs/dexguard/mapping/bundle/sitRelease/mapping.txt. After changing the mapping accordingly, it now works.

However, this ticket should probably remain open with a different title. I'll change it to "Release Build with DexGuard & Product Flavor Not Mapped in the Report."

MrHadiSatrio commented 2 weeks ago

Interesting. I think this behavior is perhaps expected, as Ruler only considers variant.name when registering tasks (in lieu of also looking at variant.flavorName).