From ef32150e2fc86a1c0e95cfd7a72c473b8f820c4b Mon Sep 17 00:00:00 2001 From: Jasper Bekkers Date: Sun, 21 Aug 2022 14:30:20 +0200 Subject: [PATCH] Output PID of launched process --- ndk-build/src/apk.rs | 32 +++++++++++++++++++++++++------- ndk-build/src/error.rs | 3 +++ 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/ndk-build/src/apk.rs b/ndk-build/src/apk.rs index 821b7738..082e0e41 100644 --- a/ndk-build/src/apk.rs +++ b/ndk-build/src/apk.rs @@ -200,19 +200,37 @@ impl Apk { Ok(()) } - pub fn start(&self, device_serial: Option<&str>) -> Result<(), NdkError> { - let mut adb = self.ndk.adb(device_serial)?; - - adb.arg("shell") + pub fn start(&self, device_serial: Option<&str>) -> Result { + let mut am_start = self.ndk.adb(device_serial)?; + am_start + .arg("shell") .arg("am") .arg("start") + .arg("-W") .arg("-a") .arg("android.intent.action.MAIN") .arg("-n") .arg(format!("{}/android.app.NativeActivity", &self.package_name)); - if !adb.status()?.success() { - return Err(NdkError::CmdFailed(adb)); + if !am_start.status()?.success() { + return Err(NdkError::CmdFailed(am_start)); } - Ok(()) + + let pid_vec = self + .ndk + .adb(device_serial)? + .arg("shell") + .arg("pidof") + .arg(&self.package_name) + .output()? + .stdout; + + let pid = std::str::from_utf8(&pid_vec).unwrap().trim(); + let pid: u32 = pid + .parse() + .map_err(|e| NdkError::NotAPid(e, pid.to_owned()))?; + + println!("Launched with PID {}", pid); + + Ok(pid) } } diff --git a/ndk-build/src/error.rs b/ndk-build/src/error.rs index 2055300f..9dee0317 100644 --- a/ndk-build/src/error.rs +++ b/ndk-build/src/error.rs @@ -1,4 +1,5 @@ use std::io::Error as IoError; +use std::num::ParseIntError; use std::path::PathBuf; use std::process::Command; use thiserror::Error; @@ -47,4 +48,6 @@ pub enum NdkError { CmdFailed(Command), #[error(transparent)] Serialize(#[from] quick_xml::de::DeError), + #[error("String `{1}` is not a PID")] + NotAPid(#[source] ParseIntError, String), }