Added
- Add
--summary-onlyflag. - Support diffing bytecode versions for classes.
Changed
- Replace
com.jakewharton.diffuse.io.Sizewithme.saket.bytesize.ByteSizein the APIs. - Eliminate
data classfrom public APIs.
Fixed
- Significantly improve
.jardiff performance.
0.3.0 - 2024-02-20
Added
- Support
.dexas an input type with--dexflag.
Fixed
- Ensure empty line appears between summary table and diff items.
0.2.0 - 2024-02-13
Added
.aabbase 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
.arscresource tables. - Migrated the CLI to the Gradle application plugin. This produces a
.zipinstead 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.jarorrt.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
DexParserusing extension functions on receiver types (likeFile,Path, etc.) instead of Java-like static factories. - New: Types are modeled using a new
TypeDescriptorclass. - New: Add
dexCount()method toDexParser. - Remove support for using
dxas a dex compiler for class files. - Remove old
dex-field-listanddex-method-listbinaries 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 asDexMethodandDexFieldnow both extendDexMember. - New:
dex-members-listbinary lists all members. Supply--methodsor--fieldsto filter to members of one type. - New: Artifact ID has changed to
dex-member-list.
- New: D8 compiler is now the default. Pass
--legacy-dxto use DX compiler from the command line. - New:
DexParserclass and factory methods replaceDexMethods.list/DexFields.list(Java) anddexMethods/dexFields(Kotlin).
- New:
dex-fields-listcommand for listing field references. - New: Added
DexFieldsandDexFieldtypes for listing field references. - Fix: Ignore
META-INFcontents.
Note: The dx and dex dependencies are no longer shadowed in the jar dependency.
- New: Show non-
voidreturn 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
.jarinside of.aarfiles. - New: Add
--hide-synthetic-numbersflag for removing the number suffix from synthetic methods.
- New: Support for
.classand.jarfiles!
Initial release.