- Fix: some environment variables in
ndk-envwere incorrectly upper cased
- Fix: cleanup pointless debug logging (I am so bad at this)
- Feature: added
--link-cxx-sharedflag for linking and copyinglibc++_shared.so
- Fix: fix nested
--handling
- Fix: changed
-pto-P, since that should not conflict withcargo
- Fix:
--handled correctly again - Fix:
-pre-added
- Enhancement: add
muslbuilds
This version of cargo-ndk is much closer to a thin passthrough to cargo than previous versions. Please take note of the breaking changes.
It introduces a new command, cargo ndk-test. This will push your tests to a device via adb and run them on-device. It currently has
a limitation that doctests can still only be run on the host.
It also introduces a cargo ndk-runner subcommand (which is used by ndk-test under the hood) and can be specified as a runner in Cargo's config.toml to enable cargo run to work with Android binaries.
Important
New MSRV: 1.86. This means that to build cargo-ndk you need at least 1.86. You can still build projects targetting older versions of Rust with this release of cargo-ndk.
- Breaking change: Replaced gumdrop CLI parsing with clap. This is functionally equivalent but may cause some minor behavioral differences in edge cases
- Breaking change: No longer strips build output by default, and
--no-stripoption is removed - Breaking change: Removed Cargo.toml-based configuration property handling
- Breaking change: Bump minimum supported Rust version (MSRV) to 1.86 and use Rust edition 2024.
- Breaking change:
--bindgenhas been removed, and relevant environment variables are set by default - Feature:
cargo-ndkcan now be installed withcargo binstall - Feature: Clang builtins can now be linked automatically by adding
--link-builtinsor its equivalent environment variable - Feature:
cargo ndk-testfor running tests on Android devices. - Feature:
cargo ndk-runnerfor running binaries on Android devices. - Enhancement: Can now be built for an Android host (i.e. Termux) if built with
CARGO_NDK_ON_ANDROIDenvironment variable set - Enhancement: CLI flags can now be used in any order (e.g.,
cargo ndk -t x86 buildandcargo ndk build --target x86are equivalent). - Enhancement: Added environment variable support for configuration flags with
CARGO_NDK_prefix (e.g.,CARGO_NDK_TARGET,CARGO_NDK_PLATFORM,CARGO_NDK_OUTPUT_PATH) - Enhancement: Target flag now supports comma-delimited lists for specifying multiple targets
- Enhancement: Added cargo-ndk version information to very verbose (
-vv) output. - Enhancement: Add relevant linker flags for NDKs older than 27 to support 16kb page sizes
- Fix: Fixed issue where
--manifest-pathand other flags using--flag=valueformat could be passed to cargo twice.
- Fix: canonicalize output directory path for
CARGO_NDK_OUTPUT_PATH, fixes build scripts not at workspace root - Enhancement: output directory creation error now prints error message instead of panicking
- Fix: a type was optional, then wasn't, and now is optional again.
- Fix: use correct path on Linux
- Fix: only copy libraries being built
- Fix: add compile error if attempted to build for unsupported target OSes (please stop trying to build cargo-ndk for Android. Makes no sense.)
- Fix: remove underscore prefixed env vars from
ndk-env
- Enhancement: add usage instructions to the ndk-env output
- Enhancement: add
--powershellflag to ndk-env
- Fix: make
CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKERcorrect
- Fix: make the exports from
ndk-envuse underscores
- Enhancement: added
ndk-envcommand for printing env vars for use with things like rust-analyzer.
Please note the MSRV for building cargo-ndk is now 1.73 due to dependency churn.
- Enhancement: add additional environment variables for sysroot directories (see README.md)
- Enhancement: console output now uses
cargo's formatter (and looks prettier) - Enhancement: panics will print a dump for simplifying bug reports
RUST_LOG is therefore now ignored. Use cargo's usual -v and -vv for verbosity control.
- Fix: pass CFLAGS, CXXFLAGS and related variables as per
cccrate behaviour
- Fix: pass CFLAGS and CXXFLAGS to cargo correctly (thanks @rib)
- Fix: linker workaround made more robust and fixing too many args issues (thanks @rib)
- Enhancement: use
OUT_DIRto hold thecargo-ndkwrapper executables on Windows (thanks @ScSofts)
- Fix: use
raw_argsfor the Windows workaround subprocesses because random quotation marks still leak in
- Workaround: NDK r25 on Windows does not work with Rust (#92, android/ndk#1856).
cargo-ndkworks around this by filtering the arguments before being passed to the NDK build scripts.
I wish everyone a very good day, except Google.
- Fix: specifying
--profile devwill now look in thedebugtarget directory as expected.
libgcc will no longer be linked against resultant libraries, and the workaround code in cargo-ndk has been removed.
See https://blog.rust-lang.org/2023/01/09/android-ndk-update-r25.html for more information.
- Breaking change: minimum supported version of Rust is now 1.68.
- Enhancement: added
RANLIBenvironment variables
- Fix: stop
cargo_metadatafrom downloading the entire world for no reason.
- Fix: Handle bindgen clang arguments on Windows.
- Fix: Handle
CARGO_ENCODED_RUSTFLAGSandRUSTFLAGScorrectly.
- Fix: add missing Cargo.lock file.
- Fix: Revert
__ANDROID_API__changes from v2.12.0.
- Fix:
build --profile <foo>is now supported.
This release clarifies that the MSRV is 1.56. This is confirmed by CI.
- Fix: removed use of format strings in order to support older Rust releases
- Enhancement: define
__ANDROID_API__inCFLAGSandCXXFLAGS(thanks @Zoxc) - Enhancement: updated dependencies
- Fix: remove automatic adding of bindgen flags (use
--bindgenas expected) - Enhancement: consider all widely-used NDK/SDK env vars (thanks @rib)
- Enhancement: updated dependencies
- Fix: support NDK 23 and higher with libgcc workaround (thanks @rib)
- Fix: better bindgen handling (thanks @lattice0)
- Fix: missing NDK now exits with exit code 1 (thanks @complexspaces)
- Enhancement: more intelligent handling of manifest context (thanks @complexspaces)
- Fix: now works with NDK 23 and maybe up. Maybe. Google do be that company, yo.
- Enhancement: added
--bindgenflag for adding relevant environment variables for bindgen. (thanks @mkpowers and @x3ro)
- Fix:
-vshows version now.
- Fix: Expose
CARGO_NDK_ANDROID_PLATFORMto subprocesses. (thanks @DoumanAsh)
- Fix:
ANDROID_NDK_HOMEwill now try to resolve the highest version in the given directory before falling back to literal path. (thanks @dnaka91)
- Fix: Workspaces no longer cause build failures
- Enhancement: Added
CARGO_NDK_CMAKE_TOOLCHAIN_PATHandCARGO_NDK_ANDROID_TARGETenvironment variable exports
- Fix: Return support for Rust-style triples to the target command line argument (the new behaviour also remains)
- Fix: Handle --manifest-path correctly (thanks @ubamrein)
- Enhancement: Update some help text phrasing and general ergonomics of output
- Breaking change: most command line parameters have changed in some way, see the README for current usage.
- Feature: Added auto-detection of NDK where available
- Feature: Specify all build targets at once
- Feature: Output built libraries to
jniLibs-formatted directory layout - Enhancement: Better error handling in general, better messages
- No changes, just guaranteeing stability of the command line interface. :)
- Add
CXXenvironment variables (thanks @remyers)