Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cargo-apk: Print and follow adb logcat output after starting app #332

Merged
merged 4 commits into from
Sep 8, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/android_test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ adb uninstall rust.example.hello_world || true

if [ -z "$1" ];
then
cargo apk run -p ndk-examples --target x86_64-linux-android --example hello_world
cargo apk run -p ndk-examples --target x86_64-linux-android --example hello_world --no-logcat
else
adb install -r "$1/hello_world.apk"
adb shell am start -a android.intent.action.MAIN -n "rust.example.hello_world/android.app.NativeActivity"
Expand Down
1 change: 1 addition & 0 deletions cargo-apk/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
- Upgrade to latest `ndk-build` to deduplicate libraries before packaging them into the APK. ([#333](https://github.com/rust-windowing/android-ndk-rs/pull/333))
- Support `android:resizeableActivity`. ([#338](https://github.com/rust-windowing/android-ndk-rs/pull/338))
- Add `--device` argument to select `adb` device by serial (see `adb devices` for connected devices and their serial). ([#329](https://github.com/rust-windowing/android-ndk-rs/pull/329))
- Print and follow `adb logcat` output after starting app. ([#332](https://github.com/rust-windowing/android-ndk-rs/pull/332))

# 0.9.3 (2022-07-05)

Expand Down
17 changes: 16 additions & 1 deletion cargo-apk/src/apk.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,14 @@ pub struct ApkBuilder<'a> {
build_dir: PathBuf,
build_targets: Vec<Target>,
device_serial: Option<String>,
no_logcat: bool,
}

impl<'a> ApkBuilder<'a> {
pub fn from_subcommand(
cmd: &'a Subcommand,
device_serial: Option<String>,
no_logcat: bool,
) -> Result<Self, Error> {
let ndk = Ndk::from_env()?;
let mut manifest = Manifest::parse_from_toml(cmd.manifest())?;
Expand Down Expand Up @@ -100,6 +102,7 @@ impl<'a> ApkBuilder<'a> {
build_dir,
build_targets,
device_serial,
no_logcat,
})
}

Expand Down Expand Up @@ -244,7 +247,19 @@ impl<'a> ApkBuilder<'a> {
pub fn run(&self, artifact: &Artifact) -> Result<(), Error> {
let apk = self.build(artifact)?;
apk.install(self.device_serial.as_deref())?;
apk.start(self.device_serial.as_deref())?;
let pid = apk.start(self.device_serial.as_deref())?;

if !self.no_logcat {
self.ndk
.adb(self.device_serial.as_deref())?
.arg("logcat")
.arg("-v")
.arg("color")
.arg("--pid")
.arg(pid.to_string())
.status()?;
}

Ok(())
}

Expand Down
31 changes: 19 additions & 12 deletions cargo-apk/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,25 @@ fn main() -> anyhow::Result<()> {
env_logger::init();
let args = std::env::args();
let mut device_serial = None;
let cmd = Subcommand::new(args, "apk", |name, value| {
if name == "--device" {
let mut no_logcat = false;
let cmd = Subcommand::new(args, "apk", |name, value| match name {
"--device" => {
if let Some(value) = value {
println!("Running on {}", value);
device_serial = Some(value.to_owned());
Ok(true)
} else {
Err(cargo_subcommand::Error::InvalidArgs)
}
} else {
Ok(false)
}
"--no-logcat" => {
no_logcat = true;
Ok(true)
}
_ => Ok(false),
})
.map_err(Error::Subcommand)?;
let builder = ApkBuilder::from_subcommand(&cmd, device_serial)?;
let builder = ApkBuilder::from_subcommand(&cmd, device_serial, no_logcat)?;

match cmd.cmd() {
"check" | "c" => builder.check()?,
Expand Down Expand Up @@ -79,15 +83,18 @@ USAGE:
cargo apk [SUBCOMMAND]

SUBCOMMAND:
check, c Checks that the current package builds without creating an apk
build, b Compiles the current package and creates an apk
run, r Run a binary or example of the local package
gdb Start a gdb session attached to an adb device with symbols loaded
version Print the version of cargo-apk
check, c Checks that the current package builds without creating an apk
build, b Compiles the current package and creates an apk
run, r Run a binary or example of the local package
gdb Start a gdb session attached to an adb device with symbols loaded
version Print the version of cargo-apk

FLAGS:
--no-logcat Don't print and follow `logcat` after running the application.

OPTIONS:
--device Use device with the given serial. See `adb devices` for a list of
connected Android devices.
--device <serial> Use device with the given serial. See `adb devices` for a list of
connected Android devices.
"#
);
}
Expand Down
1 change: 1 addition & 0 deletions ndk-build/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
- **Breaking:** Postpone APK library packaging until before zip alignment, to deduplicate possibly overlapping entries. ([#333](https://github.com/rust-windowing/android-ndk-rs/pull/333))
- Add `adb` device serial parameter to `detect_abi()` and `Apk::{install,start}()`. ([#329](https://github.com/rust-windowing/android-ndk-rs/pull/329))
- Fix missing `.exe` extension for `adb` on Windows inside `detect_abi()`. ([#339](https://github.com/rust-windowing/android-ndk-rs/pull/339))
- `start()` now returns the PID of the started app process (useful for passing to `adb logcat --pid`). ([#331](https://github.com/rust-windowing/android-ndk-rs/pull/331))

# 0.7.0 (2022-07-05)

Expand Down