10 releases

0.5.0 May 31, 2021
0.4.0 Dec 13, 2019
0.3.1 Dec 1, 2019
0.3.0 Nov 29, 2019
0.1.1 Nov 18, 2019

#1620 in Parser implementations

Download history 149/week @ 2024-11-16 88/week @ 2024-11-23 115/week @ 2024-11-30 83/week @ 2024-12-07 51/week @ 2024-12-14 4/week @ 2024-12-21 48/week @ 2024-12-28 180/week @ 2025-01-04 151/week @ 2025-01-11 242/week @ 2025-01-18 154/week @ 2025-01-25 155/week @ 2025-02-01 249/week @ 2025-02-08 182/week @ 2025-02-15 67/week @ 2025-02-22 89/week @ 2025-03-01

607 downloads per month
Used in smali_disassembler

MIT license

295KB
3K SLoC

Dex

Build Status

Dex is a parser for Android's Dex format written completely in Rust.

Most of the functionality to access the data structures in the file is implemented. Test coverage stands at 81% as of v0.3.0

Usage

Add to your Cargo.toml:

dex = "0.4.0"

Documentation

The primary source of documentation for dex format is Android website. Most of the public structs, and methods in this crate have the same names. There are a few examples here to get you started.

Development Notes

  • The library makes use of mmap to access the file contents.
  • scroll is used to parse binary data.
  • The included classes.dex in the resources folder is from the open-source application ADW launcher. You can find the source code here

Running test cases

Some tests contains Java code and require javac and d8. The other option is to open a PR and test using the travis setup.

  • To get d8, you need to install Android SDK and add Android/Sdk/build-tools/<version>/ directory to PATH variable.
  • For javac, you need to install Java.
  • Also, ANDROID_LIB_PATH variable needs to be set in the environment. It should point to the android.jar file in the SDK. (ex: Android/Sdk/platforms/android-<version>/android.jar). This is needed to prevent warnings when running d8.
  • Use cargo install cargo-tarpaulin and run cargo tarpaulin to get test coverage.

Contributing

All contributions are welcome! Feel free to raise issues/PRs on Github if you find a bug, have a question or think something can be improved! Please add a test when you open an PR!

Dependencies

~3.5MB
~68K SLoC