created_at2024-04-03 12:43:33.369321
updated_at2024-06-14 13:41:51.906566
descriptionSupport for Android NDK Tracing
Kaur Kuut (xStrom)



Android Trace

Support for Android NDK Tracing

Latest published version. Documentation build status. Apache 2.0 or MIT license.
Linebender Zulip chat. GitHub Actions CI status. Dependency staleness status.

⚠️ Android Trace only supports Android

Android Trace provides access to the Android NDK methods, such as ATrace_beginSection and ATrace_endSection. This enables using Android GPU Inspector for Rust code.

See tracing_android_trace for an integration of this with tracing.

Significant changes are documented in the changelog.


Add a dependency on Android Trace:

[target.'cfg(target_os = "android")'.dependencies]
android_trace = "0.1.0"

The main entry point to the library is AndroidTrace, which stores function pointers to each available NDK function:

use android_trace::AndroidTrace;
let trace = AndroidTrace::new();

// If the `is_enabled` method isn't available, we also shouldn't trace
let should_trace = trace.is_enabled().unwrap_or(false);
if should_trace {
  trace.begin_section(c"My expensive calculation");

// ...performing an expensive calculation

if should_trace {

Android API levels

The first level of the tracing API has been available since Android API level 23, and a more flexible API was added in Android API level 29. To support devices with any Android API versions, we resolve these functions at runtime using dlsym. This runtime access is used unless we know (through features) that a certain API level is available.

Crate feature flags

The following feature flags are available:

  • api_level_23 (enabled by default): Require Android API level 23, to avoid some runtime symbol resolution
  • api_level_29: Require Android API level 29, to improve efficiency, to avoid runtime symbol resolution entirely

To support Android API versions less than 23, you should disable default features:

[target.'cfg(target_os = "android")'.dependencies]
android_trace = { version = "0.1.0", default-features = false }

Minimum supported Rust Version (MSRV)

This version of Android Trace has been verified to compile with Rust 1.77 and later.

Future versions of Android Trace might increase the Rust version requirement. It will not be treated as a breaking change and as such can even happen with small patch releases.

Click here if compiling fails.

As time has passed, some of Android Trace's dependencies could have released versions with a higher Rust requirement. If you encounter a compilation issue due to a dependency and don't want to upgrade your Rust toolchain, then you could downgrade the dependency.

# Use the problematic dependency's name and version
cargo update -p package_name --precise 0.1.1


Discussion of Android Trace development happens in the Linebender Zulip, specifically in #general > Android Tracing. All public content can be read without logging in.

Contributions are welcome by pull request. The Rust code of conduct applies.


Licensed under either of

at your option.

Commit count: 14

cargo fmt