cargo_flutter/package/
apk.rs

1use crate::cargo::Cargo;
2use crate::package::Package;
3use cargo::core::manifest::TargetKind;
4use failure::Error;
5use lib_cargo_apk::{AndroidConfig, BuildTarget, SharedLibraries, SharedLibrary};
6use serde::Deserialize;
7
8#[derive(Debug, Default, Clone, Deserialize)]
9pub struct TomlApk {}
10
11pub struct Apk {
12    toml: AndroidConfig,
13}
14
15impl Apk {
16    pub fn new(toml: AndroidConfig) -> Self {
17        Self { toml }
18    }
19
20    pub fn build(&self, cargo: &Cargo, package: &Package, _sign: bool) -> Result<(), Error> {
21        let mut config = self.toml.clone();
22        config.default_target_config.assets =
23            Some(package.assets()[0].path().to_str().unwrap().to_string());
24        let mut libs = SharedLibraries {
25            shared_libraries: Default::default(),
26        };
27        let target = BuildTarget::new(package.name().to_string(), TargetKind::Bin);
28        for lib in package.libs() {
29            libs.shared_libraries.insert(
30                target.clone(),
31                SharedLibrary {
32                    abi: self.toml.build_targets[0],
33                    path: lib.path().to_owned(),
34                    filename: lib.name().to_owned(),
35                },
36            );
37        }
38
39        lib_cargo_apk::build_apks(&config, &cargo.build_dir(), libs)?;
40        Ok(())
41    }
42}