polyhorn_cli/android/tasks/
run.rs1use std::process::{Command, Stdio};
2
3use super::{AndroidContext, AndroidError};
4use crate::core::{Manager, Task};
5
6pub struct Run;
9
10impl Task for Run {
11 type Context = AndroidContext;
12 type Error = AndroidError;
13
14 fn verb(&self) -> &str {
15 "Launching"
16 }
17
18 fn message(&self) -> &str {
19 "Android App"
20 }
21
22 fn detail(&self) -> &str {
23 ""
24 }
25
26 fn run(
27 &self,
28 context: AndroidContext,
29 _manager: &mut Manager,
30 ) -> Result<AndroidContext, AndroidError> {
31 let destination_path = context.config.target_dir.clone();
32 let android_sdk_root = context.android_sdk_root.as_ref().unwrap();
33
34 let mut working_directory = destination_path.clone();
35 working_directory.push("polyhorn-android");
36
37 let mut adb = android_sdk_root.clone();
38 adb.push("platform-tools/adb");
39
40 let mut command = Command::new(adb);
41 command.current_dir(working_directory);
42 command.args(&["shell", "am", "start", "-n"]);
43 command.arg(format!(
44 "{}/{}.MainActivity",
45 context.config.spec.app.android.package, context.config.spec.app.android.package
46 ));
47 command.stdout(Stdio::piped());
48 let output = command.spawn();
49
50 output.unwrap().wait().unwrap();
51
52 Ok(context)
53 }
54}