1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
use crate::error::*;
use std::{path::PathBuf, process::Command};

pub struct Aapt2Diff {
    input_apks: Vec<PathBuf>,
    help: bool,
}

impl Aapt2Diff {
    /// Initialize aapt2 diff and then specifies paths to input apks
    pub fn new(input_apks: &[PathBuf]) -> Self {
        Self {
            input_apks: input_apks.to_vec(),
            help: false,
        }
    }

    /// Displays this help menu
    pub fn help(&mut self, help: bool) -> &mut Self {
        self.help = help;
        self
    }

    /// Executes aapt2 diff with arguments
    pub fn run(&self) -> Result<()> {
        let mut aapt2 = Command::new("aapt2");
        aapt2.arg("diff");
        self.input_apks.iter().for_each(|input_apks| {
            aapt2.arg(input_apks);
        });
        if self.help {
            aapt2.arg("-h");
        }
        aapt2.output_err(true)?;
        Ok(())
    }
}