1extern crate abxml;
2extern crate byteorder;
3extern crate env_logger;
4extern crate failure;
5extern crate log;
6extern crate zip;
7
8use std::{env, path::Path};
9
10use failure::{Error, ResultExt};
11
12use abxml::apk::Apk;
13
14fn main() {
15 env_logger::try_init().unwrap();
16
17 if let Err(ref e) = run() {
18 println!("error: {}", e);
19
20 for e in e.iter_causes() {
21 println!("caused by: {}", e);
22 }
23
24 ::std::process::exit(1);
25 }
26}
27
28fn run() -> Result<(), Error> {
29 let apk_path = match env::args().nth(1) {
30 Some(path) => path,
31 None => {
32 println!("Usage: exporter <apk> <path>");
33 return Ok(());
34 }
35 };
36
37 let output = match env::args().nth(2) {
38 Some(path) => path,
39 None => {
40 println!("Usage: exporter <apk> <path>");
41 return Ok(());
42 }
43 };
44
45 let mut apk = Apk::from_path(&apk_path).context("error loading APK")?;
46 apk.export(Path::new(&output), true)
47 .context("APK could not be exported")?;
48
49 Ok(())
50}