0.3.0 - 2024-02-20
Added
- Support
.dex
as an input type with--dex
flag.
Fixed
- Ensure empty line appears between summary table and diff items.
0.2.0 - 2024-02-13
Added
.aab
base module now displays a diff.- Display v4 signatures.
Changed
- Hide trailing numbers from lambda methods to attempt to clean up diffs.
- Update internal ASM library to handle newer Java bytecode versions.
- Update internal binary-resources library to handle empty
.arsc
resource tables. - Migrated the CLI to the Gradle application plugin. This produces a
.zip
instead of an executable.jar
.
Fixed
- Handle comments in R8 mapping files which are indented with whitespace.
- Apply R8 mapping file before displaying a dex file diff.
- Support reading zip entry sizes when the contents were streamed and thus use a trailing data descriptor. This also allows more accurately reporting the zip storage size of entries.
- Handle the same XML namespace URL being mapped to two different namespace names.
0.1.0 - 2020-08-27
Initial release
Note: The project was renamed from dex-member-list
to diffuse
at this point in the version
history. The versions below are for the dex-member-list
tool.
- Fix: Do not crash on inputs that have no code.
- New: Add support for desugaring language features and API levels based on a target minimum API
level. This requires supplying library jars such as
android.jar
orrt.jar
. - New: Expose declared and referenced methods separately. The former always impact the final APK whereas the latter are a shared cost that is de-duplicated across all libraries.
- New: Update D8 dex compiler to v1.5.x.
- Fix: Support dexing jar, aar, and class inputs which produce more than one dex file.
- New: Support for mapping files produced by R8 or ProGuard. Dump obfuscated APKs in unobfuscated
form by providing this file on the command line or in the API using
ApiMapping
. - New: Kotlin users can create a
DexParser
using extension functions on receiver types (likeFile
,Path
, etc.) instead of Java-like static factories. - New: Types are modeled using a new
TypeDescriptor
class. - New: Add
dexCount()
method toDexParser
. - Remove support for using
dx
as a dex compiler for class files. - Remove old
dex-field-list
anddex-method-list
binaries and types.
- New: Remove synthetic numbers from Kotlin lambda types and lambda functions.
- Fix: De-duplicate method and field instances when multiple inputs are supplied. This means that the output for APKs with multiple DEX files, for example, will output the total unique list of referenced methods. This number will be smaller than the sum of the referenced methods from the DEX files, but it more accurately reflects the count. If you want the old behavior, pass the DEX files separately and concatenate the lists yourself.
- Fix: Binary names are now correctly singular instead of plural.
- New:
DexParser.list()
method returns a list of all methods and fields asDexMethod
andDexField
now both extendDexMember
. - New:
dex-members-list
binary lists all members. Supply--methods
or--fields
to filter to members of one type. - New: Artifact ID has changed to
dex-member-list
.
- New: D8 compiler is now the default. Pass
--legacy-dx
to use DX compiler from the command line. - New:
DexParser
class and factory methods replaceDexMethods.list
/DexFields.list
(Java) anddexMethods
/dexFields
(Kotlin).
- New:
dex-fields-list
command for listing field references. - New: Added
DexFields
andDexField
types for listing field references. - Fix: Ignore
META-INF
contents.
Note: The dx and dex dependencies are no longer shadowed in the jar dependency.
- New: Show non-
void
return types. - New: API now returns a model object representing methods.
- The Dalvik and Dex dependencies are now shaded to prevent conflicts in some environments.
- New: Support for reading the
.jar
inside of.aar
files. - New: Add
--hide-synthetic-numbers
flag for removing the number suffix from synthetic methods.
- New: Support for
.class
and.jar
files!
Initial release.