android-build

Crates.ioandroid-build
lib.rsandroid-build
version0.1.0
sourcesrc
created_at2024-05-22 23:19:17.250199
updated_at2024-05-22 23:19:17.250199
descriptionA build-time dependency to compile Java source files for Android as part of a Rust build. Use this from your `build.rs` Cargo build script.
homepagehttps://robius.rs/
repositoryhttps://github.com/project-robius/android-build
max_upload_size
id1248886
size36,782
Kevin Boos (kevinaboos)

documentation

https://docs.rs/android-build

README

android-build

Latest Version Docs Project Robius Matrix Chat

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.

Usage

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:

fn main() {
    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 the Cargo-specified OUT_DIR.
    }
}

The above code will automatically run when you build your crate using cargo build.

Configuration via environment variables

The crate-level documentation provides a detailed list of environment variables that can be set to configure this crate.

Examples

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.jar jarfile.
  • Invoking Android's d8 DEXer tool.
Commit count: 6

cargo fmt