Android binary XML (AXML) and resource (ARSC) parser in pure Rust. Port of androguard/axml Python library.
- AXML: Full parser for Android binary XML (e.g.
AndroidManifest.xmlinside APKs)- Decodes chunk-based binary XML to readable XML
- Extracts package, version, permissions, and manifest metadata
- Handles namespaces, attributes, and edge cases (null bytes, wrong chunk start, etc.)
- ARSC: Parser for
resources.arsc(Android resource table)- Reads chunk headers and package names
- Resource ID parsing (
@7F040001style) - Full resource value resolution can be extended
cargo add axml-parserOr add to Cargo.toml:
[dependencies]
axml-parser = "0.0.2"# Decode binary AndroidManifest.xml to XML
axml -i AndroidManifest.xml
# Decode resources.arsc to public resources XML
arsc -i resources.arscuse axml_parser::{AXMLPrinter, ARSCParser, ARSCHeader, ARSCResTableConfig};
// AXML: binary manifest -> XML and metadata
let data = std::fs::read("AndroidManifest.xml").unwrap();
let ap = AXMLPrinter::new(&data);
assert!(ap.is_valid());
println!("Package: {}", ap.package());
println!("Version: {:?}", ap.androidversion());
let xml = ap.get_xml(true);
// ARSC: parse resources.arsc
let arsc_data = std::fs::read("resources.arsc").unwrap();
let arsc = ARSCParser::new(&arsc_data).unwrap();
for name in arsc.get_packages_names() {
println!("Package: {}", name);
}
// Parse resource ID
let (res_id, package) = ARSCParser::parse_id("@7F040001").unwrap();Tests are ported from the Python androguard/axml suite. Test data is under tests/AXML/ and tests/ARSC/.
cargo testApache-2.0 (same as androguard/axml).