Use this crate from your Cargo build.rs build script to compile Java source files and to run Java/Android commands as part of a Rust build,
specifically designed for Android-targeted builds and Android tools.
This crate aims to behave similarly to cc-rs, but for Java (primarily on Android) instead of C/C++.
This crate is part of Project Robius and is primarily used by those crates.
Add this crate as a build dependency to your Cargo.toml:
[build-dependencies]
android-build = "0.1.0"Then add this to your build.rs build script:
fnmain(){let target_os = std::env::var("CARGO_CFG_TARGET_OS").unwrap();if target_os == "android"{let output_dir = std::env::var("OUT_DIR").unwrap();let android_jar_path = android_build::android_jar(None).expect("Failed to find android.jar");
android_build::JavaBuild::new().class_path(android_jar_path).classes_out_dir(std::path::PathBuf::from(output_dir)).file("YourJavaFile.java").compile().expect("java build failed!");// `YourJavaFile.class` will be in the Cargo-specified OUT_DIR.}}The above code will automatically run when you build your crate using cargo build.
The crate-level documentation provides a detailed list of environment variables that can be set to configure this crate.
Check out the robius-authentication build script to see how we use this crate for more complicated build procedures:
- Discovering specific Android jarfiles and SDK directories (platforms, build tools, etc).
- Compiling Java classes against the main
android.jarjarfile. - Invoking Android's
d8DEXer tool.