Dex breakdown (Android)

Emerge leverages a proportional approximation to calculate specific dex package/class sizes.

One unique aspect of dex is the usage of shared data between different portions of bytecode. This allows dex to minimize its download/disk size as well as memory footprint, at the expense of being able to attribute all code to a single owner. See the Dex executable format documentation for more details on how dex shares constant information.

Due to this sharing, it's not possible to measure exactly how much size a specific package/class contributes to the overall dex. Therefore, Emerge shows only the "private size" of a class, which is equal to the size that we can attribute to a specific class with 100% certainty. This often means that the sum of the uncompressed size of all individual class nodes will be less than that of the overall Dex node, as we cannot fully account for shared dex elements.

Additionally, download sizes are an estimate of how much each dex class/package node will take in proportion to the uncompressed size. Occasionally, the sum of individual class download sizes might exceed that of the overall dex file, due to compression in the final APK format.

541

Emerge's uncompressed class sizes are the size we can attribute solely to that class. Download size is a proportional approximation of the class's uncompressed size to the overall dex file(s) download size(s).

Emerge will show the full dex breakdown down to the class level of all code that can be attributed to a single owner.

Obfuscation

By default, Emerge makes no assumptions about how dex is obfuscated. If provided obfuscation mappings, bundled automatically in AABs or zipped with uploaded APKs, Emerge will attempt to reverse any obfuscation using the provided mapping file.

Note: Emerge is able to deobfuscate resource and asset names, usually enabled with shrinkResources build flag, without any additional information needed with uploads.