This is a free software (GPLv3+) library on top of dexlib2 that features:
- Multi-dex reading and writing.
- Optional management of the content of the main dex file when writing multi-dex.
- Simplified read/write access to multi-dex containers as plain-old dexlib2
DexFile
objects, making it trivial to add multi-dex support to existing non-multi-dex-aware dexlib2 clients. - Faster dex reads than plain dexlib2.
- Optional multi-threaded multi-dex writes that deliver greatly increased write performance.
- Automatic management of dex version, dex opcodes, and API level.
- Configurable naming of multi-dex member files.
- Progress logging to a client-provided logger.
Limitations:
- Only supports dex files. (Does not support odex/oat files.)
- Only writes dex files to directories. (Does not write into zip files.)
Releases of multidexlib2 are distributed with coordinates com.github.lanchon.dexpatcher:multidexlib2
through the Maven Central Repository, with version numbers starting at 2.2.0
and matching the version of dexlib2 they were built against. Release changelog is available here.
Interface:
- MultiDexIO: read and write potentially multi-dex containers.
- readDexFile(): read potentially multi-dex container and return a single, merged
DexFile
. - readMultiDexContainer(): read potentially multi-dex container and return a
MultiDexContainer
. - writeDexFile(): write potentially multi-dex container from a single
DexFile
.
- readDexFile(): read potentially multi-dex container and return a single, merged
- RawDexIO: read and write single dex files (supersedes invoking dexlib2 directly).
Parameters:
- boolean multiDex:
true
to enable multi-dex support. - File file: file or directory to read or write.
- DexFileNamer namer: set to
new BasicDexFileNamer()
. - Opcodes opcodes:
null
to auto-detect. - int maxDexPoolSize: set to
DexIO.DEFAULT_MAX_DEX_POOL_SIZE
. - int threadCount: thread count for multi-threaded multi-dex writes.
1
to force single-threaded writes.0
to auto-detect optimum thread count.
- int minMainDexClassCount, boolean minimalMainDex: main dex file content management.
0, false
to disable main dex management.
- DexIO.Logger logger:
null
to disable logging.
Sample:
DexPatcher's file processor is a simple yet production-quality client of multidexlib2.